虎符网络安全大赛之零解
Last Update:
Word Count:
Read Time:
Hu Fu 2021 Online 之零解
Intro
这次比赛一个都没做出来,菜~,这篇文章主要重新复现一下没做出来的PWN题,这次比赛既然把两个区块链的题放入了PWN中,我们队伍也没人去研究那玩意儿,以后有时间可以去了解一下。。。这次主要还是WEB输出高,REVERSE也不错,我菜得抠脚QAQ。
Misc
你会分析日志吗
通过分析日志,发现请求长度有两个399和377,都是采用sql注入,将日志中sleep函数前面的一个数字提取出来即可。
1 |
|
这里也就是83
通过提取长度为377请求中的数字,执行命令进行提取
1 |
|
或
1 |
|
输出如下
1 |
|
1 |
|
打印出该字符为: ZmxhZ3tZb3VfYXJlX3NvX2dyZWF0fQ==
base64进行解密:
1 |
|
PWN
PWN逆了半天,调试了半天。。。逻辑都没进入,一个字菜~。这次PWN题基本算是VM类型的,grira没办法把某些代码反编译,IDA虽然能反编译汇编,但是伪代码还是存在不能完全反编译。aarch64指令又难看,ememme~。另一个题我看了下,感觉也跟这个差不多,然后我也没很细的看那道题,继续分析apollo,下午太困了,搞不出来,睡觉~~~。这次比赛采用跳转表,只能看汇编动态分析,c伪代码根本不知道在干啥玩意儿!
apollo
hint
hint1: 附件补充aarch64库,同时此题的难点在于vm虚拟机的分析。 https://pan.baidu.com/s/1_RgBNGCBzJeBqlFKDBV0xg 提取码:GAME。
hint2: 漏洞点在于车辆前方的绿灯或红灯的转化,使车辆到达了地图外
各个函数伪c代码如下
main 函数
1 |
|
run 函数
1 |
|
parse函数
1 |
|
mul_1018函数
1 |
|
div_11f4
1 |
|
plus_1394
1 |
|
_sub_14d4
1 |
|
w_1620
1 |
|
s_1990
1 |
|
a_1d10
1 |
|
d_2080
1 |
|
print_2400
1 |
|
get_next
1 |
|
exit_
1 |
|
I dubugging this program, I found just input ‘awdsp+-*/‘ making the program aborted.
So input map followings:
set breaking pinter: b *(0x5500000000 + 0xED0 )
a: 0x5500001d10
w:0x5500001620
d: 0x5500002080
s: 0x5500001990
+: 0x5500001394
-: 0x55000014d4
*: 0x5500001018
/: 0x55000011f4
p: 0x5500002400
enter_flag: 0x5500014098
基本上能翻译为c伪装代码的就这几个函数,但是,enter_flag不知道该怎么设置为0。逻辑都进不去@_@。上面这个是在比赛那天分析的一部分。
复现
该程序存在一些函数跳转表,在parse函数下,ida反编译如下:
1 |
|
当时我还以为是寄存器的初始化,一直搞不明白它是怎么跳的。通过看汇编代码,通过下断点进行动态分析:
b *(0x5500000000 + 0xe14)
如下:
sub_E14
1 |
|
loc_ED0
1 |
|
函数跳转表如下:
1 |
|
opcode 跳转表如下: 0x5500003770
1 |
|
经过调试, 对应opcode * 4之后跳转如下:
通过分析,程序采用 function_table[opcode_table[opcode * 4]]
所以对应查找出opcode对应函数如下:
00 -> exit_
2a -> mul_1018
2b -> plus_1394
2d -> _sub_14d4
2f -> div_11F4
4d -> init_program (EB8)
61 -> a_1d10
64 -> d_2080
70 -> print_2400
73 -> s_1990
77 -> w_1620
而其他的opcode在opcode_table[opcode * 4]之后,都会去执行 get_next (2514) 函数
通过逆向分析,程序进行逻辑交互,则必须要的使enter_flag(14098)变量赋值为1才能进行交互,不然都是执行abort,然而init_program这个分支是不能伪代码反编译的,应该加了花指令,在ghidra下直接不能反编译为汇编。这只能得看汇编了。
1 |
|
跳到loc_ED4,这里也没办法反编译,又只能看汇编QAQ。。。
1 |
|
通过以上我大致写一下伪c代码吧:
1 |
|
进入该函数 opcode = ‘4d’ + ‘0x00’ + ‘0x01’, 然后这里的’0x00’是要赋值给size_l,’0x01’赋值给size_r。
想要进入其他函数,不abort的情况下就的使enter_flag不为0了,调用init_program这个分支是第一步,这样才能操作其他函数。
好了基本所有函数逻辑已经清楚明白了,我没该怎么利用?漏洞在哪?
hint2提示: 漏洞点在于车辆前方的绿灯或红灯的转化,使车辆到达了地图外
车是什么玩意? 红绿灯?地图?
通过分析mul_1018
, div_11f4
,plus_1394
,_sub_14d4
都没发现漏洞QAQ。
WEB
签到
师傅们常说,要善于学习,细致入微;师傅们也常说,要善于分享,总结归纳。
hint:
2021年3月28日,PHP维护的官方Git服务器 git.php.net 被袭击,其Git仓库遭到恶意篡改。如果开发者使用这些遭到篡改的源代码进行网页的开发的话,网站就会在不知情的情况下被感染。
不知道什么东西
1 |
|
是一个个人博客