一些软安实验题记录

1.shellcode编写

使用dependency walker查找ExitProcess函数和MessageBoxA函数的真实地址

ExitProcess的地址在0x1B0BB+0x77E60000 = 0x77E7B0BB

图片

图片

MessageBoxA的地址在0x33D68+0x77DF0000 = 0x77E23D68

图片

图片

编写shellcode,在弹窗中输出1234

图片

图片

使用OD将shellcode的机器码导出

图片

2.静态地址跳转注入

查找到dest的地址在0x0012FAF0

图片

为淹没返回地址,需填充44字节buff,4位authenticated,4位EBP,并写入shellcode。输入如下

图片

运行后弹出窗口

图片

3.跳板注入

查找JMP ESP

图片

输入如下

图片

运行后弹出窗口

图片

4.思考题

使用跳板进行shellcode注入,基本构造是填充位+JMP ESP+shellcode。

使用IDA打开程序,查看buff空间,需填充12字节

图片

在OD中查找JMP ESP,这里选用77E2E32A这个地址

图片

选择使用WinExec来打开记事本,该函数需要的参数有两个,一个控制参数和一个用于说明执行目标的字符串。

使用记事本打开指定文件的语句是:

WinExec("notepad shellcode",SW_SHOW)

也就是按这样的格式构造shellcode:

PUSH 5  //SW_SHOW
PUSH xxx  //字符串
CALL WinExec

使用Dependency Walker查找WinExec的地址:0x77E78601

图片

由于第一个字符串没有在原程序中,必须在shellcode中输入。将字符串的值跟在call指令后方,那么call指令前的push需要修改。

首先将esp的值赋给eax,然后对eax进行加减偏移使其指向字符串,最后push eax即可。通过调试和计算得到这里的偏移是13:

MOV EAX,ESP
ADD EAX,13
PUSH EAX

那么完整输入就是12字节填充+JMP ESP+函数调用机器码+字符串。

图片

432143214321*汊wj嬆兝P鑭喸w悙notepad" "shellcode

输入,用OD调试程序。

在return时栈顶已经是JMP ESP。

图片

图片

成功来到了shellcode处。

图片

call指令时,栈中已经压入了WinExec函数的两个参数。

图片

成功打开shellcode.txt。

图片

posted @ 2021-11-30 20:12  SithF  阅读(151)  评论(0)    收藏  举报