VNCTF 2024 sqlshark 详细WP

sql盲注流量分析

1、用Wireshark打开sqlshark.pcap文件

分析:只有TCP协议和HTTP协议,TCP协议在传输层,传输单位为报文段,所有直接看应用层的HTTP协议

2、过滤出HTTP 协议

3、分析数据包

请求:

 响应:

响应为一个html的文本

响应内容1: 

响应内容2: 

 

分析:POST请求数据为

"username"="1"

"password" = "any'/**/Or/**/(iF(((leAst((Ord(sUbstr((sElect(grOup_cOncat(password))frOm(users)) frOm 14 fOr 1))),99)in(99))),1,0))#"

猜测拼接后的SQL语句为:select * from user where username='1' and password='any' Or (iF(((leAst((Ord(sUbstr((sElect(grOup_cOncat(password))frOm(users)) frOm 14 fOr 1))),99)in(99))),1,0))#'

当or后面语句正确时,就视为登录成功

4、用kali的tshark工具将数据部分提取出来

tshark -r sqlshark.pcap -Y "http" -T fields -e http.file_data > data.txt

-r:设置读取本地文件

-Y:使用过滤器的语法 

-T: 设置解码结果输出的格式,包括text,ps,psml和pdml,默认为text;fields为字段

-e: 如果-T fields选项指定,-e用来指定输出哪些字段

        这题根据POST数据和返回html文本数据就可以了,所以指定http.file_data

>:linux重定向将前面的内容输出写入到后面文件

 

提取后的数据POST数据为URL编码,写了脚本提取分析一下

 5、脚本分析提取

初步分析:

发现每次截取查询出来的password每个字符,将截取的字符用ord函数转为ASCII码和输入的数字用least函数取最小的一个,判断是不是in里的数字,最后不带least函数进行确认。

例如:查出的password为abc

  • ord(a) = 97
  • least(97,101) in (101)  ==>  97 in (101)  -----false
  • least(97,96) in (96)      ==> 96 in (96) ----true
  • least(97,97) in (97)      ==> 97 in (97) ---- true
  • (97) in (97)  ----最后不用least函数进行确认

所以,只需要找出不含least的请求提取in里面的数字转为ASCII对应的字符拼接起来即可

# -*-coding:utf-8 -*-
# @File  :exp.py
import urllib
from urllib import parse

with open("data.txt", "r") as f:
    for line in f.readlines():
        if "password" in line:  # 如果password字段在,说明是请求
            # 以password分割取后面一部分再进行url解密
            line = urllib.parse.unquote(line.split('password=')[1])
            # 存放请求数据
            tmp = line
        else:  # 否则是响应
            # 如果响应成功,并且不含least即是“确认”请求
            if "login success" in line and "least" not in tmp.lower():  
                print(chr(int(tmp.split("in(")[1].split(")")[0])), end="")

 

套个VNCTF{}即可

  • 32
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值