本来是拿来创建$prodDir/$appDir目录的,再接着看上去,程式仅仅检测是否存在$argv[1],缺少对$argv[1]的必要过滤,那么您就能够这样
/prod.php?argv[1]=|ls -la或/prod.php?argv[1]=|cat /etc/passwd(分割符 | 在这里是UNIX的管道参数,能够执行多条命令。)
到这里,常见的漏洞类型应该知道点了吧。
对于特别字符的重视
对于特别字符,有句话叫All puts is invalid.外国人文章里这句话很常见的。任何输入都是有害的。您永远不要对用户所输入的东西省心,为了对付这些危害,程式员都在忙着过滤大把大把的字符,唯恐漏了什么。而有些程式员呢?似乎从没注意过这些问题,从来都是敞开漏洞大门的。不说废话,还是先看看下面这些东西吧。
1、其实程式的漏洞里最关键,最让研发者放心不下的就是带着$符号的美元符号,变量,对于找漏洞的人来说,抓着变量两个字就是一切。就像目录遍历这个bug,很多邮件程式都存在,研发者考虑的很周全,有的甚至加上了网络硬盘这个东西,好是好,就像http://mail.com/file.php?id=1&put=list&tid=1&file=./
要是我们把file这个变量换成./../甚至更上层呢?目录就这样被遍历了。
2、尖括号"<>"跨站您不会不知道吧,一些搜索栏里,文章,留言,像前段时间phpwind附件那里的跨站等等。当然,对于跨站问题,您要过滤的远远不止尖括号。不怕过滤时漏掉什么,而是怕您想不起要去过滤。
3、斜杆和反斜杆:对于/和\的过滤,记得魔力论坛的附件下载处的原代码泄露吗?
attachment.php?id=684&u=3096&extension=gif&attach=.\..\..\..\..\..\..\includes\config.php&filename=1.gif
对于过滤.. / \的问题,像windows主机不但要过滤../还要过滤..\,windows主机对\会解析为/,这些细节跟SQL injection比起来,什么才叫深入呢?
4、对于反引号(``),反引号在php中很强大,他能够执行系统命令,就像system()这些系统函数相同,假如用户的恶意语句被他所执行的话就会危害服务器,我想除了服务器配置的很好以外,对于他们,您还是老老实实的过滤好吧。
5、对于换行符,NULL字符等等,像"\t,\x0B,\n,\r,\0这些,这些都是很有用的,像动网以前的上传漏洞就是因为上传中的NULL(\0)字符引起的,对于这些能随意截断程式流程的字符,您说我们在检测的时候应该有多细心呢?
6、分号(;)和分割符(|)
分号截断程式流程,shell_exec("del ./yourpath/$file"); //使用系统函数shell_exec删除文档$file
变量$file没指定,那么直接写zizzy.php;del ./yourpath ,这样您的yourpath目录也就被del了。
分割符(|)是UNIX里自带的管道函数,能够连接几条命令来执行。有时候加在过滤不严的系统函数中执行。
逻辑错误
验证不完全和一些逻辑错误在程式里也很容易找到,特别是现在的程式员,只顾深入的学习,而对于逻辑错误等等这样的安全意识都没有培养的意识,其实这是是靠自己去培养,而不是等着人来报告bug给您。对于逻辑错误的判断,我们只能说,多练练吧,经验才是最重要的。
1、对于登陆验证的问题。举个例子:我们看某论坛的admin.php片断
他这里username 和 password似乎不对劲吧,存在管理员的username和password就直接通过验证,那就意味着没有用户名,没密码也行吧。我们提交
| GET /bbs/admin/index.php?page=general HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; Maxthon) Host: 127.0.0.1 Connection: Keep-Alive Cookie: username='or isnull(1/0) AND level=3/*; password=; |
这是我们伪造的一个数据包(您问我咋伪造地?抓包再修改呗),我们使用GET来提交数据,原理也就是在cookie这里构造欺骗语句。
接着,整个SQL语句就成这样
Select * FROM users Where username=''or isnull(1/0) AND level=3/*' AND password=''
这里仅仅用一个'or'='or'的原理,就把username和password的检测给绕开了,而level=3则是伪造的等级。从而就饶过了检测,进入了管理后台。
对于后台的验证不能这么马虎,两行代码就算完事,您还得从SESSION(会话),Cookie这些地方来增强验证。
2、上传漏洞
有次我看到在一个程式config.php里对上传文档类型限制是这样的
$IllegalExtentions = array('exe','asp','php','php3','bat','cgi','pl','com','vbs','reg','pcd','pif','scr','bas','inf','vb','vbe','wsc','wsf','wsh'); //
对于上传文档的限制,只允许上传exe,asp,php,php3,bat,cgi,pl,com,vbs,reg,pcd,pif,scr,bas,inf,vb,vbe,wsc,wsf,ws'这些文档。
规定不许用户上传什么什么文档,其他都能够上传,这种逻辑好不好呢?假如我上传.inc, ,.php4 .phtml, .html, .pwml 这样的类型呢?为什么您不把这种逻辑思维改为规定用户除了这几种文档能传,其他的统统不允许上传。就像这样,数组改成逆向的思维。
$IllegalExtentions = array('rar','gif','jpg','bmp','pdf')//只能上传rar,gif,jpg,bmp,pdf几种格式
其实这个跟您们上传cer,asa是个道理。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!




