前两天lightless出了一道有趣的流量分析,好多学弟都难以理解,大黑客分享了他的脚本,我就分享下我的半手工脚本吧,俗话说,不管白猫黑猫,能get flag就是好payload…
lightless&aklis的渗透教室 之 入侵分析 POINT: 300 DONE
本题题解详情
题目ID: 104
题目描述: 有一台服务器被大黑客给日了,这是在服务器上捕获的流量,你能分析出什么东西么?
附件地址:http://7ktoky.com1.z0.glb.clouddn.com/hahaha.pcapng.gz
Hint: 啧啧啧,怕你们清明节没事干。。
- 这个数据包是在服务器上捕获的攻击流量,请仔细分析数据包中的流量,找到攻击方法。
- 跟踪这次攻击事件,找到本次入侵的损失和危害。
- 大黑客在攻击过程中拿到了flag,分析攻击的流量就能找到flag。
打开看了一眼是个sqlmap跑盲注的全部流量,这里老司机一看就明白了,通过分析盲注返回,可以知道sqlmap跑了什么,因为给的不是log日志,所以这里分析不是很方便,大黑客用了py的dkpt数据包分析模块,我尝试了一下发现我跑不起来,没办法,那么就粗暴点吧,首先用linux命令strings把数据包的大部分数据转为字符,出来的大概是这样的。
1 | Linux 4.2.0-16-generic |
可以看到返回基本都炸了,但是没关系,发现请求都是完整的,那么先把请求提出来吧。
1 | import urllib |
那么我们得到了flag.log,大概是这样的
1 | GET /user.php?id=1 HTTP/1.1 |
这里发现前面有很多测试的payload,先把他们去掉吧,翻了翻数据包,发现开始注入的时候表名和字段名都得到了,是ctf.flag
把这部分提取出来吧…
1 | log = open('flag','r') |
请求都得到了,大概是这样的
1 | GET /user.php?id=1 AND ORD(MID((SELECT IFNULL(CAST(flag AS CHAR),0x20) FROM ctf.flag ORDER BY flag LIMIT 0,1),1,1))>64 HTTP/1.1 |
请求都有了那么久写脚本吧,limit 0,1)后面的数字代表位数,后面的>xx是代表二分法确定字符是什么,这里有个问题就是二分法最后的测试payload有可能是flag的本身或者小一位,没办法,这种方式无法判断返回的数据,那么就手工吧,最后的脚本
1 | import urllib |
虽然中间用了半手工的模式,但是还是得到flag,能拿到flag的脚本就是好脚本(●’◡’●)