PWN刷题记录——Defcon 2015 Qualifier: R0pbaby
题目来源CTF-Wiki练习题,下载链接:R0pbaby
题目分解
先来检查一下程序保护
64位程序,开启了堆栈不可执行,地址随机化还有一个我们先前没有见过的FORTIFY,谷歌简单查了一下知道它用于检查是否存在缓冲区溢出错误,但只是很轻微的检查,所以我们忽略不计。
先来运行一下看一下它的面貌
程序具有四个选项,其中前两个选项可以输出libc的地址和libc中某一函数的地址,第三个选项可以把数据拷贝到栈上而且给出了我们所能输入的最大值1024,由此盲猜选项三应该存在栈溢出,丢到IDA里面看一看
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111__int64 __fastcall ma ...
PWN刷题记录——2013-PlaidCTF-ropasaurusrex
题目来源于CTF-Wiki练习,下载链接:程序 | libc
拿到题目先检查程序保护
扔到IDA里面查看,程序在主函数里面调用了一个子函数,双击进入子函数可以看到我们熟悉的read溢出漏洞
先来找一下溢出的需要的偏移量,随机生成200个有序的字符
1cyclic 200
将生成的字符串复制,使用gdb对程序进行运行调试,在程序等待输入的时候,把生成的随机字符串输入进去
然后可以得到程序溢出报错的地址0x6261616b,再次使用cyclic可以得到程序溢出所需要的偏移量为140
根据题目名称和所给的libc盲猜是ret2libc的题目
大体思路如下:
首先根据程序源码的结构,我们要利用write函数将程序已经执行过的函数(比如read)地址泄露出来,然后再控制程序返回到含有溢出漏洞的函数,以便下一步溢出到system
根据泄露的函数的真实地址计算得到在libc中的基地址
利用基地址在libc中找到system和/bin/sh的地址,最后在payload中拼接打入程序即可
下面就可以编写我们的exp的,在写之前,我们还需要找一下程序中溢出函数的地址
打开IDA,在mai ...
PWN刷题记录——train.cs.nctu.edu.tw: rop
今天来做一下train.cs.nctu.edu.tw: rop,题目来自于CTF-Wiki的练习题,是bamboofox的入门练习题,题目地址
题目分析
打开题目发现没有任何文件可供下载查看,只有一个远程连接的地址,这根我们之前做的PWN题目都不太一样,莫得办法,nc连上先看看吧
1nc bamboofox.cs.nctu.edu.tw 10001
连接上之后,屏幕里刷刷刷出来一大片(要刷屏的节奏??!!)
再仔细一看题目要求,这是给了我们14个gadgets,然后让我们按照一定的顺序排列,使得这些gadgets能够组合成一段可以完整执行的程序从而获得shell或者flag
对于我这样一个小萌新来说,看到这个题目真的是一筹莫展,第0段gadget提供了int 80h功能调用,由此自然而然地想到了使用系统调用execve("/bin/sh",0,0)来获得shell,下面就要进行拼凑辣。
大概思路
先找一下大概的拼凑思路:
要调用execve(),我们需要查一下系统调用表
根据系统调用表我们可以看到,execve()的系统调用号为11,即0xb,储存在 ...
栈溢出漏洞利用技术学习笔记
听i春秋上面蓝莲花战队成员Atum的课程 CTF PWN选手的养成 ,了解到不少东西,在此记个笔记~
基础知识
栈的结构:先进后出,在内存中为高地址往低地址增长,栈顶为栈的最上方(低地址区),栈底为栈的最下方(高地址区)
一、寄存器
rsp/esp:指向栈顶的栈指针寄存器(低地址)
rbp/ebp:指向栈底的指针寄存器(高地址)。栈低通常作为基址,我们可以通过栈底地址和偏移相加减来获取变量地址
栈的结构如图所示(栈由高地址向低地址增长)
函数调用时栈的变化
EBP指向的栈底,ESP指向的栈顶,EBP下面的EIP是函数返回的地址(即return执行后下一条指令的地址),var1是函数的参数.
pc:程序指针,存储着指向CPU接下来要执行的指令地址
rdi rsi rdx rcx:x86中参数都是保存在栈上,但在x64中的前六个参数依次保存在RDI, RSI, RDX, RCX, R8和 R9中,如果还有更多的参数的话才会保存在栈上。
二、栈溢出漏洞介绍
通俗的讲,栈溢出的原理就是不顾堆栈中分配的局部数据块大小,向该数据快写入了过多的数据,导致数据越界,结果覆 ...
Pwn学习记录——基本ROP-2
题目来源 CTF Wiki
ret2libc
ret2libc 即控制函数的执行 libc 中的函数,通常是返回至某个函数的 plt 处或者函数的具体位置 (即函数对应的 got 表项的内容)。一般情况下,我们会选择执行 system(“/bin/sh”),故而此时我们需要知道 system 函数的地址。
关于got和plt的介绍:介绍got plt以及libc.so
ret2libc1
题目下载
首先检查程序的安全保护
程序只开启了栈不可执行保护,下面丢到IDA里面看一下程序源代码
可以看到在执行 gets 函数的时候出现了栈溢出,Alt+T搜索发现跟ret2text一样具有system函数,但是不再是可以直接执行的system(”/bin/sh“)了
要使用system函数,需要将程序跳转到plt处,找到地址为0x08048460
所以需要我们手动将参数 /bin/sh传入进去,使用ROPgadget搜索
1ROPgadget --binary ret2libc1 --string '/bin/sh'
正好存在,那么我们就可以控制程序直接返回到sys ...
Pwn学习记录——基本ROP-1
题目来源 CTF Wiki
ret2text
题目下载
首先,拿到题目我们先查一下保护
可以看到,程序是32位的,只开启了NX保护
下面我们拖到IDA里面看一下
很明显的gets函数溢出漏洞,先来搜索一下程序里面有没有可以直接利用的溢出漏洞,Alt+T搜索system关键字
可以看到,在secure()函数里面发现了可以直接调用system("/bin/sh")的代码,如果我们控制程序返回到这段代码的位置,那么就可以直接得到shell
首先我们在gdb中调试算出程序溢出需要的偏移量
找到get函数的地址,在peda中设置断点(这里若不显示地址,可以右键Text View查看)
使用 r 命令让程序跑起来,可以看到此时寄存器的内容
我们计算偏移量使用EBP和ESP的地址,字符串s的地址是从ESP+0x1c这个位置开始的,那么 偏移量=EBP-(ESP+0x1c)+4,这里+4是因为覆盖栈中保存的EBP的数据,才能到程序返回地址。offset=0xffffd158-(0xffffd0d0+0x1c)+4=0x70
下面我们再在IDA中找到调用system函 ...
CTF做题环境linux系统的配置
新安装了Linux的虚拟机作为pwn的做题环境,在这里我用的是Ubuntu 18.04.2 LTS版本
基础编译环境
由于是使用的VMware简易安装,系统里好像并没有基础的编译运行环境
123sudo apt-get install gccsudo apt-get install g++sudo apt-get install vim
在编译pwn题目时,可能会遇到
12345In file included from stack_example.c:1:0:/usr/include/stdio.h:27:10: fatal error: bits/libc-header-start.h: No such file or directory #include <bits/libc-header-start.h> ^~~~~~~~~~~~~~~~~~~~~~~~~~compilation terminated.
这是由于gcc环境没有安装完善
1sudo apt-get install gcc-multilib
安装pwntools[参考]
安装所需要 ...
Hexo进阶——主题和功能的完善
花费了一天的时间搭建Hexo博客,总算是有个雏形,可是默认的主题总觉得有些丑,决定换个主题再继续折腾一番……这篇文章主要记录一下主题的安装、配置与美化,以及配置过程中遇到的一些问题–
找一个适合自己的主题
Hexo官网上提供了几百种样式的主题,可以从这里面去寻找自己喜欢的Hexo Themes
经过一番骚操作,最终相中了Butterfly这个主题,真是深得我心
对主题进行安装和配置
Butterfly主题也有比较详细的安装配置方法,照着这个hexo-theme-butterfly安装文档一步一步自己进行配置就可以~
配置时遇到的问题
尽管主题的官方文档已经说的很详细,但是我在配置的过程中还是遇到了一丢丢小问题,在此记录:
1. Algolia搜索
在启用Algolia搜索系统的时候,在Algolia的配置上遇到了很大的问题,ID和Key什么的都没有配置好,也许是我英语水平太低,没能理解官方配置文档所致。这里附一篇中文的配置介绍——Hexo+Next集成Algolia搜索。参考这一篇文章再自己进行配置就容易多了
2. 新建文章时的默认模板
当我们使用 hexo new "fil ...
使用Hexo+Nginx+Namecheap+DigitalOcean搭建个人博客网站
想来想去,准备搭建一个自己的个人网站,用来放一些教程、笔记什么的,以备以后之需。
搭建个人博客有很多种方法,一是使用现成的博客站点,比如CSDN、博客园这些,使用起来比较方便快捷,属于傻瓜式的博客搭建;二是使用Github Pages,用这个最大的好处就是不需要自己申请服务器和域名,一个GitHub账号就可以搞定,0成本,比较适合学生党;三是自己申请一个服务器和域名,这个方法可定制化程度很高,但是成本相对也高。
这里我使用的是第三种方法,用DigitalOcean+NameCheap搭建域名服务器,用Hexo构建个人博客主页的架构。
准备工作
在DigitalOcean上申请一个服务器
1. 注册DigitalOcean账号
打开DigitalOcean进行账号注册,点这个链接会给你$10-$30的优惠额度,相当于可以免费使用两个月。当然也可以像我一样使用GitHub的学生包优惠,可以直接兑换$50的优惠额度。关于GitHub学生包的申请方法,可以自行谷歌。
不管是否使用GitHub学生包,都需要先注册一个账号,注册账号的时候需要验证你的信用卡信息或者使用PayPal支付$5以证明 ...
Hello World
Hello World!
第一篇博客,,写什么好呢,就随便写写测试一下吧~~
一直以来就想找个方式记录一下自己对着电脑瞎搞搞的历程,恰巧之前注册过GitHub的学生包,里面有免费赠送的域名和服务器。。本着不用白不用的白嫖原则,就正好利用起来搭建一个自己的博客来记录各个美妙的时刻~~
OK.由此创建了我个人博客的第一篇文章,发出来纪念一下~~~