0x00 配置过程
1 | pecl install xdebug |
着重注意2点:
php --ini
找到php.ini
的位置,复制xdebug的配置到文件。- 配置xdebug端口
0x01 OrderBy注入
结论:
- dir使用了白名单,只允许asc、desc
- sort转义了反引号(`)为2个
valet start
启动,直接打断点:
1 | http://backpack-demo.test/sharp/api/list/voucher?dir=desc&filter_status=1%20%23%20&search=&sort=user_idd%5C%60ss |
返回数据,看似是SQL注入:
1 | {"message":"SQLSTATE[42S22]: Column not found: 1054 Unknown column 'user_idd\\`ss' in 'order clause' (SQL: select * from `vouchers` where `status` = 1 # order by `user_idd\\``ss` desc limit 10 offset 0)"} |
会报错,但是反引号被转义了一层。实际的SQL语句不是真的数据库执行语句。
Illuminate\Database Connection.php
的644行,打断点:
1 | select * from `vouchers` where `status` = ? order by `user_idd\``ss` desc limit 10 offset 0 |
0x02 防御原理
排列方式使用了白名单过滤: SQL查询使用PDO进行,在预编译阶段执行OrderBy时,会发现列名不存在而报错。
转义的原理是这个:
1 | function wrapValue($value) |