一哥们丢来个站,让帮忙瞅瞅,然后打开网站手工瞅了下,找到好几处注入点,可是在尝试闭合这里,却浪费了太多时间....
注入点
如图所示,在闭合这里折腾了好久好久,丢SQLMAP中也跑不出来,期间曾经请教某大佬,结果某大佬折腾半天后成功闭合,然后人家不告诉我闭合的方法,扎心了老铁....
好吧,我自己折腾,经过各种尝试,终于成功闭合
手注太渣,果断丢sqlmap中跑数据,结果一直跑不出表和数据来,手注尝试发现被某叼毛拦截了...
经过哥们提醒,用 /*!50000Select*/
的方式成功绕过
最终得到后台账号密码,后台地址之前哥们是发过给我的。
GETSHELL
忘了说了,一直没办法得到网站的绝对路径,所以root的注入点并没有什么卵用,只有进后台了,哥们的目的是会员数据,后台有导出功能,所以只要进后台就完事。
然而一波未平一波又起,加密是个什么鬼?好吧,不得不想办法拿shell了,在后台胡乱翻一通,其实已经不抱什么希望了,因为这套程序我有老板本的源码,后台无法拿shell的....
任意上传,老版本源码并没有这个文件,我都不知道该说什么了,这套源码自带2处上传外加1个编辑器,他居然还重新写了一个上传,而且还不做过滤。。。日你没商量。
可以看到,只是对上传的文件类型进行了判断,对上传后缀是一点都不搭理的。。
解密
看了下他的代码,他是从注册的时候就开始对手机号进行了加密处理,在注册文件中的第97-98行,使用了hidcpt($_POST[telephone])
函数,我们跟踪一下。
图中353-389行是加密处理,根据他的加密方式和 $key
我们就可以写出对应的解密方式,至此这个破站折腾完毕。。
拦截代码
最后,附上我注入被拦截的代码:
<?php /*云体检通用漏洞防护补丁v1.1 更新时间:2013-05-25 功能说明:防护XSS,SQL,代码执行,文件包含等多种高危漏洞 */ $url_arr=array( 'xss'=>"\\=\\+\\/v(?:8|9|\\+|\\/)|\\%0acontent\\-(?:id|location|type|transfer\\-encoding)", ); $args_arr=array( 'xss'=>"[\\'\\\"\\;\\*\\<\\>].*\\bon[a-zA-Z]{3,15}[\\s\\r\\n\\v\\f]*\\=|\\b(?:expression)\\(|\\<script[\\s\\\\\\/]|\\<\\!\\[cdata\\[|\\b(?:eval|alert|prompt|msgbox)\\s*\\(|url\\((?:\\#|data|javascript)", 'sql'=>"[^\\{\\s]{1}(\\s|\\b)+(?:select\\b|update\\b|insert(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+into\\b).+?(?:from\\b|set\\b)|[^\\{\\s]{1}(\\s|\\b)+(?:create|delete|drop|truncate|rename|desc)(?:(\\/\\*.*?\\*\\/)|(\\s)|(\\+))+(?:table\\b|from\\b|database\\b)|into(?:(\\/\\*.*?\\*\\/)|\\s|\\+)+(?:dump|out)file\\b|\\bsleep\\([\\s]*[\\d]+[\\s]*\\)|benchmark\\(([^\\,]*)\\,([^\\,]*)\\)|(?:declare|set|select)\\b.*@|union\\b.*(?:select|all)\\b|(?:select|update|insert|create|delete|drop|grant|truncate|rename|exec|desc|from|table|database|set|where)\\b.*(charset|ascii|bin|char|uncompress|concat|concat_ws|conv|export_set|hex|instr|left|load_file|locate|mid|sub|substring|oct|reverse|right|unhex)\\(|(?:master\\.\\.sysdatabases|msysaccessobjects|msysqueries|sysmodules|mysql\\.db|sys\\.database_name|information_schema\\.|sysobjects|sp_makewebtask|xp_cmdshell|sp_oamethod|sp_addextendedproc|sp_oacreate|xp_regread|sys\\.dbms_export_extension)", 'other'=>"\\.\\.[\\\\\\/].*\\%00([^0-9a-fA-F]|$)|%00[\\'\\\"\\.]"); $referer=empty($_SERVER['HTTP_REFERER']) ? array() : array($_SERVER['HTTP_REFERER']); $query_string=empty($_SERVER["QUERY_STRING"]) ? array() : array($_SERVER["QUERY_STRING"]); check_data($query_string,$url_arr); check_data($_GET,$args_arr); check_data($_POST,$args_arr); check_data($_COOKIE,$args_arr); check_data($referer,$args_arr); function W_log($log) { $logpath=$_SERVER["DOCUMENT_ROOT"]."/log.txt"; $log_f=fopen($logpath,"a+"); fputs($log_f,$log."\r\n"); fclose($log_f); } function check_data($arr,$v) { foreach($arr as $key=>$value) { if(!is_array($key)) { check($key,$v);} else { check_data($key,$v);} if(!is_array($value)) { check($value,$v);} else { check_data($value,$v);} } } function check($str,$v) { foreach($v as $key=>$value) { if (preg_match("/".$value."/is",$str)==1||preg_match("/".$value."/is",urlencode($str))==1) { //W_log("<br>IP: ".$_SERVER["REMOTE_ADDR"]."<br>时间: ".strftime("%Y-%m-%d %H:%M:%S")."<br>页面:".$_SERVER["PHP_SELF"]."<br>提交方式: ".$_SERVER["REQUEST_METHOD"]."<br>提交数据: ".$str); print "您的提交带有不合法参数,谢谢合作"; exit(); } } } ?>
本文作者为Mr.Wu,转载请注明,尊守博主劳动成果!
由于经常折腾代码,可能会导致个别文章内容显示错位或者别的 BUG 影响阅读; 如发现请在该文章下留言告知于我,thank you !
老哥,sqlmap跑sql2008,库名都出来了,但是跑表数据的时候死活跑不出来
@laoa手工检查下,应该是有什么关键词被拦截了吧
查看图片
吾爱福利吧