0x01 介绍
百度BSRC在4月底举办了一个SQL注入挑战赛,以靶机的形式供安全测试人员攻击。
活动发布在百度安全应急响应中心微信公众号,判定标准分为两档:
- 读取mysql系统信息(user,version)或数据库名
- 通过SQL注入读取表内secret数据
比赛时间是4月28到5月1日24点,等我看到这个比赛的时候已经5月1日晚上9点多了,5月1日24点以后靶机就停止运行了,水平有限,只达到第一档的标准,而且也不是最早提交case的。另外,由于靶机已经关闭,下文关于靶机的描述可能存在偏差。
0x02 过滤与绕过
靶机url:http://sqlitest.anquanbao.com.cn/api/query?art_id=1
靶机屏蔽了错误信息,因此基于报错的注入无法进行,从测试来看,盲注的可能性很大。
经过测试,发现1在SQL语句中是整数。
靶机过滤了一些基本的字符串处理函数,mid,left,right,substr,substring等函数都被过滤。
无法将字符串分开就无法跑盲注,靶机过滤了所有的字符串分割函数,怎样才能让字符串中的字符一个一个跑出来呢?
答案是使用concat,我的绕过方法是通过concat与字符串比较大小,造成基于布尔型的注入。
payload:http://sqlitest.anquanbao.com.cn/api/query?art_id=hex(user()%3CCONCAT(char(67))) 在concat中不断增加字符即可做基于布尔类型的盲注。
代码
|
|
获取的user和version如下:
- user():BSQLITEST@LOCALHOST
- version():5.5.54-0+DEB8U1