ShellCode的编写和利用
原文链接:https://hvnt3r.top/2018/10/Shell-code的编写和利用/
在渗透测试和漏洞利用中,Shellcode
是一个十分重要的部分,在二进制的安全研究中,Shellcode
也充当着十分重要的角色,本文会记录我学习Shellcode
的编写和利用原理。
在程序中嵌入Shellcode并执行
首先拿一道十分简单的PWN题来演示程序是如何执行Shellcode
的
首先,这是一个32
位的程序,我把它放到了32
位的kali
虚拟机中
gdb-peda$ checksec
CANARY : ENABLED
FORTIFY : disabled
NX : ENABLED
PIE : disabled
RELRO : Partial
程序开启了NX
和CANARY
,实际上并没有检查此程序开启的安全措施的必要,因为分析IDA
中的伪C代码可知,此程序会将用户输入的数据当作汇编代码进行执行,代码如下:
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v3; // ST2C_4
void *v4; // ST30_4
int v5; // ST38_4
char s; // [esp+3Ch] [ebp-84h]
unsigned int v8; // [esp+BCh] [ebp-4h]
v8 = __readgsdword(0x14u);
v3 = open("/home/challenge/flag", 0);
setbuf(_bss_start, 0);
setbuf(stdout, 0);
alarm(0x1Eu);
v4 = mmap(0, 0x80u, 7, 34, -1, 0);
memset(v4, 195, 0x7Fu);
memset(&s, 0, 0x7Fu);
puts("OpenCTF tyro shellcode challenge.\n");
puts("Write me some shellcode that reads from the file_descriptor");
puts("I supply and writes it to the buffer that I supply");
printf("%d ... 0x%08x\n", v3, &s);
read(0, v4, 0x20u);
v5 = ((int (*