weblogic
题目:
黑客攻击了Weblogic应用,请分析攻击过程,找出Weblogic的主机名。flag格式:flag{}
Tip:主机名为十六进制。
来源:第七届山东省大学生网络安全技能大赛
解题:
看别人的writeup做出来的,weblogic 攻击流量审计。模拟了爆破weblogic登录密码,通过部署war包getshell,执行命令获取hostname的操作。
既然flag是主机名,我们用wireshark搜索http contains "hostname"
追踪一下http流,可以找到hostname
flag{6ad4c5a09043}
信息提取
题目:
sqlmap用过吗
解题:
也是看了别人的writeup写的,题目提示这是一道sqlmap注入过程分析题, 所以我们直接过滤出http流量. 直接 文件->导出分组解析结果->为CSV。
经过观察, 可以发现这是一次sqlmap注入过程.
导出分组解析结果为csv文件, 接下来的操作就是先将url编码转换过来, 找到注入flag的地方. 发现是从编号806的数据包开始:
"806","11.987578","10.0.0.101","10.0.0.201","HTTP","592","GET /message.php?id=1 AND ORD(MID((SELECT IFNULL(CAST(`value` AS CHAR),0x20) FROM isg.flags ORDER BY `value` LIMIT 0,1),1,1))>64 HTTP/1.1 "
"808","11.988800","10.0.0.201","10.0.0.101","HTTP","467","HTTP/1.1 200 OK (text/html)"
上面就是开始注入flag的地方, 经过分析发现注入方法是二分法.
sqlmap二分法
如果大于64成功, 那么加上64的1/2即在判断是否大于96, 依次判断下去, 最后的判断结果一定会收敛最后一个判断的数字的本身或者比它大1.
而且我们发现如果注入的结果是真, 那么返回的消息会有这一行, 消息长度应该大于460.
否则返回的响应长度小于440, 因为没有 The quick.... 这组数据.
拿编号866的数据包来分析, 如果判断的结果大于73, 那么如果下一行返回的响应信息的长度大于460(因为成功的响应会多一行), 那么这次注入的结果应该是73+1为74, 但是我们发现返回的响应长度是430, 小于440, 即为假, 那么最后的结果就应该是73, 字符 I.所以flag的第一个字符是 I.
那么接下来是写脚本得出这个flag的值. 附上我的脚本:
# -*- coding:utf-8 -*- import re import urllib root_path = unicode('D:\\ctfWP\\bugku\\分析\\信息提取\\http', 'utf-8') # 更改为自己从wireshark提取出的csv文件地址 f = open(root_path) lines = f.readlines() datas = [] # 转码, 保存进datas for line in lines: datas.append(urllib.unquote(line)) lines = [] # 懒得改, 就复用一下, 这个lines保存注入flag的url for i in range(len(datas)): # 提取出注入flag的url if datas[i].find("isg.flags ORDER BY `value` LIMIT 0,1),1,1))>64") > 0: lines = datas[i:] break flag = {} # 用正则匹配 macth1 = re.compile(r"LIMIT 0,1\),(\d*?),1\)\)>(\d*?) HTTP/1.1") macth2 = re.compile(r'"HTTP","(\d*?)","HTTP/1.1 200 OK') for i in range(0, len(lines), 2): # 因为有返回响应, 所以步长为2 get1 = macth1.search(lines[i]) if get1: key = int(get1.group(1)) # key保存字符的位置 value = int(get1.group(2)) # value保存字符的ascii编码 get2 = macth2.search(lines[i + 1]) if get2: if int(get2.group(1)) > 450: value += 1 flag[key] = value # 用字典保存flag f.close() result = '' for value in flag.values(): result += chr(value) print(result)
ISG{BLind_SQl_InJEcTi0N_DeTEcTEd}
特殊后门
题目:
从通信方式的角度看,后门可分为http/https型、irc型、dns型、icmp型等等。安全人员抓到一份可疑的流量包,请从中分析出利用某种特殊协议传输的数据。
来源:第七届山东省大学生网络安全技能大赛
解题:
使用wireshark打开,搜索icmp协议,看到第一个
flagishere,说明flag就在这个协议中,往下看,下一个包里面内容是f,再下一个是l,然后是a,然后是g,应该就是flag{***}
然后我们导出这些数据,导出为json,写个脚本读取一下。
脚本如下,脚本执行可能会报错,需要把刚才导出的json处理一下删除序号大于300的数据(第300个包是最后一位“}”),里面有一些乱码,windows下python会报错:
# -*- coding:utf-8 -*- import json root_path = unicode('D:\\ctfWP\\bugku\\分析\\特殊后门\\1', 'utf-8') f = open(root_path) str = f.read().decode('utf-8') # 将字符串转为json格式 data = json.loads(str) r = '' for i in data: r += i['_source']['layers']['icmp']['data']['data.text'] print r
flag{Icmp_backdoor_can_transfer-some_infomation}