0x01 流量分析
本人web狗一只,最近学了一些网络协议方面的 所以做了一下MISC的两道流量分析,大佬们都觉着太简单没放脚本,我就放一下自己写的(小菜鸡勿喷)
<--第一道流量分析不难,主要就是布尔盲注的流量包分析,直接查看http请求包即可我们可以通过观察看到注入成功的响应长度不同,这里成功的为978字节
失败的994字节.不要问为什么.其实也可以直接判断.978的流量比994的少了非常多 显然就是成功的(因为这里是获取ASCII码.所以判断成功的流量肯定更少)
所以我们只需要提取出这一部分成功的流量出来进行分析即可-->
<--使用过滤语法 frame.len == 978 过滤长度为978的包 然后导出为文本一定要先过滤再导出 不然就会把全部的导出-->
import re
#Request URI: http://192.168.246.1/ctf/Less-5/?id=1'%20and%20ascii(substr((select%20flag%20#from%20t),1,1))=102--+
nums = []
obj1 = re.compile(r"1\)\)=(?P<num1>.*)\b",re.S)#开启贪婪模式匹配这里一定要使用.*贪婪模式 如果用.*?可能匹配失败 \b代表结尾
def getAscii():
with open("re.txt", "r", encoding="utf-8") as f:
for line in f.readlines():
line = line.strip()
result = obj1.finditer(line)
for it in result:
num = it.group("num1")
nums.append(num)
def getflag():
flag = ""
for i in nums:
i = chr(int(i))
flag = flag + i
print(flag)
if __name__ == '__main__':
getAscii()
getflag()
第二道题稍微难点,前面获得百度网盘提取码的我就不讲了,可以参考其他大佬的wp 我这里就放一下脚本
0x02 A_MISC
<--这道题也是sql注入的分析 但是这里是时间盲注并不是布尔盲注 所以我们不能通过返回包的长度进行判断了.我们需要通过查看上一步是否成功来判断这里丢一个大佬的连接参考-->
某行业攻防培训-----流量分析之-----sql盲注
这里我们将所有http的包导出
然后进行跑脚本
import re
#username[1]" = "in ('-1' ))) or if(ascii(substring((select
#flag from flag limit 0,1),1,1))=30,sleep(5),1)
asciis = []
asciis1 = []
obj = re.compile(r"limit 0,1\),(?P<num>.*),1\)\)=(?
P<asciinum>.*)\b,sleep",re.S)
#匹配正则表达式 第一个匹配lit 但是我们需要的只有ascii值 这里用.*贪婪模式 否则匹配失败
def getASCII():
with open("time.txt","r",encoding="utf-8") as f:
for line in f.readlines(): #readlines()读取出来为列表所以我们直接迭代 用strip()去除空格
line = line.strip()
result = obj.finditer(line) #正则匹配
for it in result:
num = it.group("num") #lit值
asciinum = it.group("asciinum") #ASCIi值 注意这里提取的都为str类型 所以以下都要做int强转
asciis.append(asciinum) #将payload的全部ascii值(包括失败的)写入列表
#使用一个循环 时间盲注可知ascii正确后才会进行下一次匹配 所以我们这里直接一个一个循环
# 然后当正确的如102时 下一个又从30开始 所以会比前面小 利用这个特点筛选将正确的ASCIi写入新的列表
def getASCII2():
a = 1
while a < len(asciis):
if int(asciis[a]) < int(asciis[a-1]):
asciis1.append(int(asciis[a-1]))
a += 1
def getFLag(): #转换ASCIi
flag = ""
for i in asciis1:
i = chr(i)
flag = flag + i
print(flag)
if __name__ == '__main__':
getASCII()
getASCII2()
getFLag()