您当前位置: 首页 » 代码审计 » 渗透技巧 » 浅谈审计中如何快速定位引入单引号的地方

浅谈审计中如何快速定位引入单引号的地方

2017年2月18日 | 发表评论(0) 查看评论

这个问题比较多,只能想一点写一点了,以后慢慢更。

在审计中如果能快速绕过限制或者快速定位到能引入单引号的地方,那么这个地方可能就是一个完美的注入,分享一下我自己目前想到的能引入单引号的情况和方法。

一、被GPC忽略的$_SERVER

关于GPC这个问题,不得不说$_SERVER,在GPC开启的情况下$_SERVER是不受GPC影响的。

$SERVER用来获取服务器和执行环境信息,如果我们能控制$_SERVER的内容,那么就可能引入一个单引号。

根据之前记录的文章,我找到了$_SERVER中的几个可控的地方,分别用审计实例演示一下:$_SERVER[‘SERVER_NAME‘]、 $_SERVER[‘HTTP_X_FORWARDED_FOR’]、$_SERVER[‘PHP_SELF’]、$_SERVER[“HTTP_USER_AGENT”]、$_SERVER[‘HTTP_HOST’]

$_SERVER[‘SERVER_NAME‘] 在apache2 下 如果你没有设置ServerName或者没有把UseCanonicalName 设置为 On的话,这个值就会是客户端提供的hostname ,对于apache来说,它只取第一个host,但对于php来说,不管多少个,它全要了。

$_SERVER[‘SERVER_NAME‘] 审计实例:

在mlecms2.3中inc/lib/admin.lib.php

可以看到$_SERVER[‘SERVER_NAME’]直接带入sql语句,虽然全局使用了GPC转义,但是$_SERVER并不受GPC限制,所以此处可直接注入

$_SERVER[‘HTTP_X_FORWARDED_FOR’]实例:

$_SERVER[‘HTTP_X_FORWARDED_FOR’]我找到了一款cms  Redlay-Social-Network   github下载地址https://github.com/JamesQuintero/Redlay-Social-Network/tree/36b67ea0b79a587e5ef071bddcf7b028f542626e

在page_login.php中

直接带入$_SERVER[HTTP_X_FORWARDED_FOR]造成sql注入

https://github.com/saatanaperkele/SUPER-DUPER-HACKED-TOGETHER-COPYPASTA-SHITFEST-PENIS/blob/937ae847f02655190a3b10a67e1be4e40a24c957/threadwatch.php 也同样存在这种情况

$_SERVER[‘PHP_SELF’] 审计实例:

Metinfo的一个前台注入

systemincludecompatiblemetv5_top.php中

http://www.am0s.com/metinfo/member/login.php/aa’UNION SELECT (select concat(admin_id,0x23,admin_pass) from met_admin_table limit 1),11113,11111,11111,11111,11111,11111,11111,11111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111,1111111111%23/aa

$_SERVER[“HTTP_USER_AGENT”]审计实例:

$_SERVER[“HTTP_USER_AGENT”]返回客户端ua,所以我们可以通过修改ua达到可控的目的。

某代码中(非开源代码):

可造成注入漏洞。

$_SERVER[‘HTTP_HOST’]实例:

二、$_FILES

之前文章中涉及过$_FILES,请移步copy()

 

$_FILES出现注入的情况应该是开发忽视的一个问题,在代码中只过滤了post和get方式,忽略了$_FILES,从而导致注入

审计实例:tipask

在tipask中,对post个get进行了过滤,忽略了$_files,在文件上传后$_ENV[‘attach’]->add($clientFile[“name”]…),将$clientFile[name] = $_FILES[“upfile”][name]带入了如下add入库的操作,从而造成注入。

poc:filename=”1′,’.php’,1,(select concat(username,0x7e,password) from ask_user limit 1),2,1)”#.jpg

三、一些编码函数

这些函数应该都会被列入敏感函数的名单中,后续会更新文章

substr() 、stripslashes() 、urldecode() 、base64_decode() 、parse_str() 除此之外,可能还存在其他编码函数导致注入。想起一点写一点吧。

审计实例看urldecode()文章中的审计实例吧 地址:http://www.am0s.com/functions/226.html

四、magic_quotes_gpc=Off时,addslashes的缺陷

很多程序在如magic_quotes_gpc=off下自己实现一个代码来模拟magic_quotes_gpc=on的情况. 如下面的一段代码:

利用addslashes()函数模拟了magic_quotes_gpc=on时的效果,看上去很完美,其实是有缺陷的或者说只是模拟了magic_quotes_gpc的部分功能.magic_quotes_gpc=on时不仅仅用addslashes处理了变量值,而且处理了变量名[既$_GET/$_POST等超全局变量的key,而前面那段模拟magic_quotes_gpc的代码仅仅处理了数组的值,因此是存在安全隐患的。

实例[ECShop SQL injection 漏洞分析]

文件includes/init.php判断get_magic_quotes_gpc(),如果为off则调用addslashes_deep():

addslashes_deep()在文件includes/lib_base.php里最后通过addslashes()处理

下面看下具体的导致漏洞的代码,文件 pick_out.php里:

由于magic_quotes_gpc=off时没有对$key处理,同时在数组赋值时存在逻辑问题,最终导致了注射漏洞:)

五、str_replace绕过GPC的例子

test.php?a=&b=%00′  =>’

test.php?a=0&b=%00′  =>’ 成功使用反斜杠注释掉GPC添加的反斜杠,从而引入单引号。这个问题曾发生在echop的支付模块中

六、preg_replace

在法师博客看到的,法师没找到实例,我找了下也没有,看下理论吧,说不定会遇到

当提交

http://www.am0s.com/test/test.php?test=1%27      =>1′

http://127.0.0.1/test/test.php?test=1%0d%0a%27  =>1′

原理是该正则过滤只是把匹配到的关键字进行过滤,如果匹配不到那么就无法过滤。 利用%0d%0a可绕过正则

 

 

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">