流量分析之提取WireShark中的SQL盲注流量技巧分享

admin 2024年7月7日11:10:21评论86 views字数 2090阅读6分58秒阅读模式
0x0 声明

    由于传播、利用此文所提供的信息而造成的任何直接或间接的后果和损失,均由使用者本人承担,Cyb3rES3c及文章作者不承担任何责任。如有侵权烦请告知,我们将立即删除相关内容并致歉。请遵守《中华人民共和国个人信息保护法》、《中华人民共和国网络安全法》等相关法律法规。

0x1 前言

    在打CTF的时候常常会遇到一些要分析SQL盲注的流量包,如下图所示。

流量分析之提取WireShark中的SQL盲注流量技巧分享

    有时关键信息就藏在盲注请求的ASCII码中,如果要提取的数据包比较庞大,采用手工提取会比较繁琐而且容易出错本文分享一个可以节省手工提取信息的时间同时保证准确率的技巧。

    注:仅针对GET请求的SQL盲注。

0x2 正文

    WireShark导出文件时选择导出CSV文件,因为导出的CSV文件中的数据是保持先后顺序的(这一点很关键),方便进行数据处理。

流量分析之提取WireShark中的SQL盲注流量技巧分享

提取CSV文件中的Info字段的内容

流量分析之提取WireShark中的SQL盲注流量技巧分享

    脚本原理:先过滤无关的数据(借助请求参数中的关键字进行过滤,如ascii、substr和一些库名、表名、字段名),将要提取的信息保存到List中,然后比较前后两个数据包的特定内容是否一致,如果不一致,则提取前一个数据包特定内容(一般是ASCII码),最后将ASCII码转换为字符拼接成字符串。

limit 0, 1) > 97limit 0, 1) > 100limit 1, 1) > 97

在上面的这个例子中要提取出 limit 0, 1) > 100,因为前后两个字段不一样,前一个是0,后一个是1。

下面以BUUCTF Misc sqltest为例

要提取的内容是这样的

GET /index.php?act=news&id=1%20and%20ascii(substr(((select%20concat_ws(char(94),%20flag)%20%20from%20db_flag.tb_flag%20%20limit%200,1)),%2038,%201))>125 HTTP/1.1 

下面是一段自己写的脚本

import pandas as pdfrom urllib.parse import unquote
filename = "./your-filename.csv"
readFile = pd.read_csv(filename)
secretList = []columnName = "Info"
# 提取盲注请求for element in readFile[columnName]:    # 需要根据情况自行替换过滤条件 if "GET" in element and "HTTP" in element and "substr" in element and "concat_ws" in element: elementUrlDecode = unquote(element) element = element.replace("%20", ' ').replace("GET /index.php?act=news&id=1 and ascii(substr(((select concat_ws(char(94), flag) from db_flag.tb_flag limit 0,1)),", '') # print(element) secretList.append(element)
# 初始化盲注字符位置first = secretList[0].split(',')[0]asciiList = []# print(first)for index in range(1, len(secretList)): second = secretList[index].split(',')[0] # 比较前后两个请求包中的盲注的字符位置是否相等,如果不相等则说明前一个请求参数的ascii是正确的 if first != second: print(secretList[index - 1]) extractData = secretList[index - 1].split('>')[1].split(' ')[0] asciiList.append(extractData) # 刷新前后两个盲注的字符位置 first = second
# 单独处理最后一个盲注请求print(secretList[len(secretList) - 1])extractData = secretList[len(secretList) - 1].split('>')[1].split(' ')[0]asciiList.append(extractData)
print(asciiList)
flag = ""for element in asciiList: flag += chr(int(element))
print(flag)

注:在提取信息时因为是比较前后两个数据包特定内容是否一致,如果不一致就提取前一个数据包相关的ASCII码,所以会忽略最后一个数据包的内容,需要在循环外单独处理最后一个数据包,如描述不清楚,可参考代码帮助理解。

程序执行结果如下

流量分析之提取WireShark中的SQL盲注流量技巧分享

0x3 总结

以上仅仅是自用的方法,如有好的技巧,欢迎留言分享!

原文始发于微信公众号(Cyb3rES3c):流量分析之提取WireShark中的SQL盲注流量技巧分享

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2024年7月7日11:10:21
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   流量分析之提取WireShark中的SQL盲注流量技巧分享http://cn-sec.com/archives/2928173.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息