时间:2021-07-01 10:21:17 帮助过:25人阅读
可以看到,服务端处理GET和POST请求的变量时都会做addslashes处理。
而且74cms为了防止宽字节注入,将MySQL连接设置为二进制读取,配置在/include/mysql.class.php中:
<?php
|
接下来看看php中iconv函数的使用会造成什么样的后果。
Part2:审计过程
注入一分析:
1.在/plus/ajax_user.php注册处:
elseif($act == ‘do_reg‘)
|
这里我们思考下“錦”这个字,它的utf-8编码是e98ca6,它的gbk编码是e55c,而上面提到过反斜杠\正好为5c。
所以如果我们将username设置为:錦’,首先经过addlashes函数或GPC对单引号转义变为:錦\’,然后这里注册时会经过icnov函数会对”錦”转化为gbk编码,最后就是:%e5%5c%5c%27。反斜杠被转义了(%5c%5c),从而单引号逃逸出来引发注入漏洞。
2.我们继续跟进$register=user_register($username,$password,$member_type,$email);
这里的user_register函数,在/include/fun_user.php里:
//检查简历的完成程度
|
3.继续跟进get_user_inusername函数,在/include/fun_user.php里:
function get_user_inusername($username)
|
注入二分析:
在plus/ajax_street.php中:
elseif($act == ‘key‘)
|
这里分析发现页面将查询结果回显出来,构造一些union的查询语句即可获取数据库的敏感信息。
我们使用注入二(有回显)的来做证明
发现74cms的category表有9个字段,所以构造获取数据库用户和相关信息的POC:
http://localhost/74cms(20140310)/plus/ajax_street.php?act=key&key=%E9%8C%A6%27%20union%20select%201,2,3,user(),5,6,7,database(),9%23
查看sql语句发现查询语句里反斜杠被转移,单引号成功逃逸出来:
最后,有兴趣的同学可以继续获取其它的管理员账户等相关字段的信息。
附GBK的汉字编码范围:
汉字区包括:
a. GB 2312 汉字区。即 GBK/2: B0A1-F7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。
b. GB 13000.1 扩充汉字区。包括:
(1) GBK/3: 8140-A0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。
(2) GBK/4: AA40-FEA0。收录 CJK 汉字和增补的汉字 8160 个。CJK 汉字在前,按 UCS 代码大小排列;增补的汉字(包括部首和构件)在后,按《康熙字典》的页码/字位排列。
可以看到,GBK编码中的两个字符是一个汉字,第一个字符需要大于128。
那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入
标签:汉字 范围 情况 文件 请求 exit etc 管理 oba