记录一道 sql 注入流量分析题

news/2024/9/18 12:20:13/文章来源:https://www.cnblogs.com/lpppp/p/18381732

题目:一个流量包 ddos.pcapng

在ddos中寻找黑客的真实意图。提交flag格式:flag{xxxx)。

思路:

分析一下流量包,过了 http 请求,不难发现,黑客在尝试登入,那肯定就是在破解密码了,那我们可以看看登入成功的包

image-20240826202804-23whmyx

然后,继续往下看流量包,可以发现登入成功的数据包

image-20240826205808-li40iy6

并且请求包有在做一些 sql 注入的操作

image-20240826205902-nxutrvp

然后我们就想办法吧登入成功的数据包提取出来,观察一下,发现在进行 sql 注入时能发现,登录成功的数据包长度是 620,登录失败的长度是 640,那我们可以通过 frame.len == 620​ 来过滤出登录成功的返回包,那现在的问题是,我们需要的是请求包里面的东西,我们能发现返回包中是能看到来自那条请求包的,写脚本提取出来就行

image-20240826212848-sp2vvjs

import os
import json
import re
from urllib.parse import unquoteos.system('tshark -r ddos.pcapng -Y "frame.len == 620" -e http.request_in -T json > 登录成功.json')with open('登录成功.json', 'r') as f:data = json.load(f)frame_numbers = []
for num in data:frame_number = num['_source']['layers']['http.request_in'][0]frame_numbers.append(frame_number)
print(frame_numbers)

接下来就行根据请求包的 id 去取出我们想要的数据就行

# 导出所有 post 请求的 urlencoded-form.value 和 frame.number
os.system('tshark -r ddos.pcapng -Y "http.request.method == POST" -e urlencoded-form.value -e frame.number -T json > post.json')'''
现在根据我们登入成功的 id 去过滤出对应的数据
'''
with open('post.json', 'r') as f:data = json.load(f)msg = []
for num in data:try:frame_number = num['_source']['layers']['frame.number'][0]if frame_number in frame_numbers:value = num['_source']['layers']['urlencoded-form.value'][0]msg.append(unquote(value))except KeyError:# 如果某个数据项缺少 'frame.number' 或 'urlencoded-form.value',则跳过该项continue# 将数据写入 result.txt 进行分析
with open('result.txt', 'w') as f:for m in msg:f.write(m + '\n')

然后分析 result.txt 可以发现基本都在做,sql 注入,现在找到我们有用的就行,很明显,黑客是要爆破密码的,所以搜索一下就行可以发现如下:

aaa'/**/OR/**/NOT/**/ORD(MID((SELECT/**/IFNULL(CAST(password/**/AS/**/NCHAR),0x20)/**/FROM/**/web.users/**/ORDER/**/BY/**/password/**/LIMIT/**/0,1),1,1))>96#

然后,就将类似这些数据提取出来,取值就行

# 我们需要的数据提取出来
psassword = []
for i in msg:if '''aaa'/**/OR/**/NOT/**/ORD(MID((SELECT/**/IFNULL(CAST(password/**/AS/**/NCHAR),0x20)''' in i:psassword.append(i)'''
/0,1),6,1))>51#
'''
num = {}
pat = pat = r"\),(\d+),1\)\)>(\d+)#"
for p in psassword:re_ = re.compile(pat)match = re_.search(p)[1]match1 = int(re_.search(p)[2])# 都是取最后一次的才是正确的num[match] = match1print(num)
flag=""
for i in num:flag+=chr(num[i])
print("flag:", flag)

完整代码

import os
import json
import re
from urllib.parse import unquote'''
这里有个问题,外面必须是单引号,里面必须是双引号,不能换
'''
# 这是提取数据的命令,运行一次提取出来就可以注释了,不然后面调试可能有点慢
os.system('tshark -r ddos.pcapng -Y "frame.len == 620" -e http.request_in -T json > 登录成功.json')with open('登录成功.json', 'r') as f:data = json.load(f)frame_numbers = []
for num in data:frame_number = num['_source']['layers']['http.request_in'][0]frame_numbers.append(frame_number)
# print(frame_numbers)# 导出所有 post 请求的 urlencoded-form.value 和 frame.number
os.system('tshark -r ddos.pcapng -Y "http.request.method == POST" -e urlencoded-form.value -e frame.number -T json > post.json')'''
现在根据我们登入成功的 id 去过滤出对应的数据
'''
with open('post.json', 'r') as f:data = json.load(f)msg = []
for num in data:try:frame_number = num['_source']['layers']['frame.number'][0]if frame_number in frame_numbers:value = num['_source']['layers']['urlencoded-form.value'][0]msg.append(unquote(value))except KeyError:# 如果某个数据项缺少 'frame.number' 或 'urlencoded-form.value',则跳过该项continue# 将数据写入 result.txt 进行分析
with open('result.txt', 'w') as f:for m in msg:f.write(m + '\n')# 我们需要的数据提取出来
psassword = []
for i in msg:if '''aaa'/**/OR/**/NOT/**/ORD(MID((SELECT/**/IFNULL(CAST(password/**/AS/**/NCHAR),0x20)''' in i:psassword.append(i)'''
/0,1),6,1))>51#
'''
num = {}
pat = pat = r"\),(\d+),1\)\)>(\d+)#"
for p in psassword:re_ = re.compile(pat)match = re_.search(p)[1]match1 = int(re_.search(p)[2])# 都是取最后一次的才是正确的num[match] = match1print(num)
flag=""
for i in num:flag+=chr(num[i])
print("flag:", flag)

flag:flag{Lsadu21b2ud2b}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/787714.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

网卡-频段、信道、带宽

频段 在无线通信领域中,网卡频段(频带)是指所支持的无线通信频率范围,将频率划分成多段,主要是2.4G、5G2.4GHz频段:是最常见的无线通信频段之一,2.412GHz-2.484GHz,一般用于Wi-Fi网络和蓝牙等。2.4GHz频段在各个地区都是通用的5GHz频段:这也是用于Wi-Fi网络的一个常见频…

扩展系统最佳的八种策略

扩展系统最佳的八种策略

线性规划标准型知识精解

线性规划的标准型及其转化过程是理解和求解线性规划问题的基础。通过引入松弛变量、剩余变量和将自由变量转化为两个非负变量,可以将任意形式的线性规划问题转化为标准型。标准型的线性规划问题便于使用单纯形法等算法进行求解,从而找到最优解。了解这些概念和技巧,对于深入…

高并发业务下的库存扣减技术方案设计

扣减库存需要查询库存是否足够:足够就占用库存 不够则返回库存不足(这里不区分库存可用、占用、已消耗等状态,统一成扣减库存数量,简化场景)并发场景,若 查询库存和扣减库存不具备原子性,就可能超卖,而高并发场景超卖概率会增高,超卖数额也会增高。处理超卖的确麻烦:系…

Echarts实现双x轴,支持均分和非均分的情况

效果图代码 <template><div class="app"><div class="demo" ref="demoRef"></div></div> </template><script> import * as echarts from echarts export default {data() {return {}},mounted() {th…

第一章:Linux‘’用户和组的管理‘’

第一章:Linux‘’用户和组的管理‘’@一、Linux用户身份概述@1.1 Linux用户介绍@1.2 三个重要passwd,shadow,group文件的介绍@1.2.1 passwd文件 @1.2.2 shadow文件 @1.2.3 group文件@二、创建Linux用户@2.1 添加Linux用户——useradd @2.2 设置Linux用户密码——passwd@三、…

远程观看群晖里面的视频(webdav)

前言 本文使用 webdav 服务加 tvbox 来实现远程播放群晖中的视频,关于 webdav 服务曾在[[黑群晖同步obsidian]] 中提及。本次也是使用类似的操作方式 配置黑群晖 配置 webdav 并创建共享文件夹 为了方便,此处我直接复制了黑群晖同步 obsidian 这篇博客中相关内容 首先下载套件…

远程观看群晖里面的视屏(webdav)

前言 本文使用 webdav 服务加 tvbox 来实现远程播放群晖中的视频,关于 webdav 服务曾在[[黑群晖同步obsidian]] 中提及。本次也是使用类似的操作方式 配置黑群晖 配置 webdav 并创建共享文件夹 为了方便,此处我直接复制了黑群晖同步 obsidian 这篇博客中相关内容 首先下载套件…

java连接sqlite数据库

首先下载jar包(每种数据库有自己jar包) 然后idea里创建新项目并且在项目里创建lib文件里面放jar包 接着导入jar包然后apply->ok 这样就连上 如果要可视化数据库DB Browser最后测试连接Test Connection看数据库连上没 结果:

Adobe Lightroom Classic LRC v13.5 下载及安装教程 (图像后期处理软件)

前言 Adobe Lightroom Classic为您提供强大的一键式工具和高级控件,使您的照片看起来很棒。轻松整理桌面上的所有照片,并以多种方式共享。使用Lightroom Classic,您需要具备所有桌面编辑工具,才能充分发挥照片的作用。增强色彩,使沉闷的镜头充满活力,去除分散注意力的物体…

详细分析平衡树-红黑树的平衡修正 图文详解(附代码) (万字长文)

目录红黑树简述性质/规则主要规则:推导性质:红黑树的基本实现struct RBTreeNodeclass RBTree红黑树的插入红黑树插入修正前言什么时候需要变色:变色的基础:为什么需要旋转与变色变色:旋转需要修正的所有情况先认识最简单的情况1. 叔叔是红色结点注意:2.没有叔叔结点3. 叔叔是黑…

手搓平衡搜索树-红黑树 平衡修正 图文详解 (万字长文)

目录红黑树简述性质/规则主要规则:推导性质:红黑树的基本实现struct RBTreeNodeclass RBTree红黑树的插入红黑树插入修正前言什么时候需要变色:变色的基础:为什么需要旋转与变色变色:旋转需要修正的所有情况先认识最简单的情况1. 叔叔是红色结点注意:2.没有叔叔结点3. 叔叔是黑…