- 博客(44)
- 收藏
- 关注
原创 buuctf中的一些pwn题总结(不断更新)
前言:本文记录一些buuctf中不是很典型,但是仍然值得记录的pwn题,以便于查看。0x00:stkof——unlink查看保护查看IDA伪代码增自定义size,使用malloc分配。删free之后直接置空,难以利用。改重点来到改中,这里可以随意输入大小,然后根据输入的大小来为堆块中填入数据。这样就造成了堆溢出漏洞。解题思路由于此题存在堆溢出漏洞,我们又掌控着heap地址的存在位置,这样我们很容易就想到unlink漏洞来控制堆块。由于程序本身的原因,我们先malloc一个堆
2020-08-19 22:22:05 4614
原创 House of force —— gyctf_2020_force
前言:House of force是属于House of xxx系列的利用方法,House of xxx是2004年《The Malloc Maleficarum-Glibc Malloc Exploitation Techniques》中提出的一系列针对glibc堆分配机制的利用方法。想要利用House of force,需要以下条件:1.能够以溢出等方式控制top chunk的size域。2.能够自由的分配堆的大小解题思路保护机制保护全开,64位。IDA查看伪代码程序有两个功能,
2020-08-13 12:32:31 933
原创 非常规情况下栈溢出系统调用——PicoCTF_2018_can-you-gets-me
前言:对于这种非常规的栈溢出题目,我自己也是见的比较少,故写此博客记录一下。解题思路查看保护只开了NX保护的32位程序,如果是常规题的话,应该是非常容易做的。进入IDA查看伪代码打开IDA,如果是第一次见这种题目就会傻眼了。题目中的每一个函数都好像是自己写的,那么我们就不能利用got表来泄露函数地址来getshell了。题目开了NX保护,我们不能写shellcode,常规的ROP又利用不了,我们就完全利用不了libc里边的函数了。乍一看,好像没什么办法了,但是我们可以用程序中非常多的g
2020-08-04 12:40:20 524
原创 libc2.26以下的单一堆溢出漏洞利用——0ctf_2017_babyheap
前言:此题为libc2.26以下的libc环境,在libc2.27及以上不一定行得通。解题思路:查看保护:保护全开的64位程序。观察IDA伪代码:我们进入IDA看看程序(在此之前建议先运行一遍程序,看看程序的逻辑)。标准的菜单题,题目先申请了一块堆结构来保存接下来我们要申请的堆地址,在开了保护的情况下,我们并不能很容易的找到这块堆地址在哪,这样我们就很难把堆块劫持到这个上面。我们看看各个功能:增本题采用了calloc来申请堆块,这样对于申请的堆块来说,原有的数据就会被清除掉,这样我
2020-08-03 11:49:46 614
原创 关于沙箱关闭execve的绕过技巧及SROP的简单利用方法 --(buuctf[V&N2020 公开赛])babybabypwn + warmup
前言最近做buuctf又发现一种以前没有见过的沙箱关闭execve的题目,在网上找了很多资料,终于初步了解了一些简单的绕过技巧,故写此博客记录一下。[V&N2020 公开赛]babybabypwn查看保护保护全开的64位Linux程序。IDA查看伪代码直接进入main函数看看,发现syscall函数,并不是很了解这个函数,但是通过百度我们知道syscall的几个参数的意义。第一个参数表示syscall调用的函数,例如题目中的15调用的就是sigreturn。看到sigreturn
2020-07-05 14:26:38 1556 1
原创 栈帧劫持的一些利用方法及注意事项--buuctf--gyctf_2020_borrowstack
前言最近在刷buuctf时发现了很多栈帧劫持的题目,从中取出最有代表性的、坑最多的拿出来写一篇博客记录一下。保护机制64位Linux程序,只开了NX保护。解题思路IDA看伪代码伪代码分析从代码中我们可以看到,read读入buf的字节大小只多了0x10,这样是不能构成ROP链的,但是我们发现,程序下面给了我们一个bank的bss段的地址,这不就是典型的劫持栈帧到bss段吗?但是这里有一个坑:我们可以看到got.plt距离bss段非常近,而bank又正好是在0x601080的位置,当我们
2020-07-01 10:24:10 599 2
原创 bugku-web-入门
前言:两个月前做完bugku的web入门题,一直没有什么时间总结,最近又在做buuctf的pwn题,抽出一点时间总结一下web。1.web2出来一张图片,我没直接F12,就能看到注释了的flag。2.计算器原本框中只能输入一位,我们F12后,改写js代码,输入正确结果即可得到flag。3.web基础$_GET题目给了php源代码,我们发现只要what为flag就可以得到flag了,所以我们就让what=flag。4.web基础$_POST与上题一样是给what传值,不过这次用的是PO
2020-06-07 11:34:41 924
原创 [V&N2020 公开赛]easyTHeap + ciscn_2019_final_3 ——heap中tcache的一些简单利用方法
在libc2.26之后的libc版本中加入了新的存储结构tcache,这使得我们利用堆的时候要特别注意libc版本。对tcache不是很了解建议看看CTFWiKi1.[V&N2020 公开赛]easyTHeap保护全开,libc2.27版本,进入IDA看到程序有增删改查的功能。我们一个个来看:add:我们可以看到add中不能写入数据。edit:add中不能读入的数据由edit来读入。show:没什么特殊的,就是输出数据,这里我们可以用其来查看我们泄露的地址。dele
2020-06-06 15:05:52 1110 1
原创 攻防世界(pwn) shell——c代码审计题
前言:此题难度没有前几题或者后几题难度大,考验的是对c程序逻辑的理解。开了canary和NX保护,我们打首先运行一下程序查看程序的逻辑。程序打开了一个shell,但是只能运行ls指令,不能运行cat指令,这样我们就不能查看远端的信息了。我们打开IDA看看程序的逻辑。通过IDA的提示,我们知道,程序还可以运行login指令,他是一个登录程序,登录成功后就可以获取权限。我们继续往下看...
2020-04-19 17:01:53 1013
原创 攻防世界(pwn)250
前言:此题说难也不是很难,但是需要一些基础知识,否则利用起来比较困难。只开了NX保护的32位程序。此题里面的功能函数几乎都是自己写的,所以说没有一点基础知识,利用起来还是挺麻烦的。我们看到里面有一个自己写的print函数我们点进去发现,由于size是我们自己决定的,所以里面存在一个栈溢出漏洞。但是我们并不知道远端的libc环境版本,函数几乎自写,我们基本没什么信息可以利用,所以传...
2020-03-23 20:43:40 543
原创 攻防世界(pwn)babyheap(一些常见的堆利用方法)
前言:此题攻击链路:null_off_by_one修改堆块信息 => UAF泄露libc基址和其他有用信息 => fastbin attack申请堆块到指定地址 => 利用realloc_hook来调整堆栈 => one_gadget get shell。64位程序,保护全开。程序提供增删查操作,没有改操作。由于题目已经给了libc-2.23文件(虽然给错了)说明...
2020-03-22 11:58:43 2091 1
原创 攻防世界(pwn)echo_back + magic (_IO_FILE文件流攻击初探)
前言:这两题都是关于_IO_FILE文件流攻击的题目,如果对_IO_FILE文件流不是很清楚,可以看ctfwiki中的_IO_FILE介绍——传送门。echo_back——关于_IO_2_1_stdin结构的利用文件保护全开,不能got覆写。进入IDA,发现程序有两个功能,一个是setname,一个是echo back。查看setname功能,发现此功能只能输入7个字节,不具备RO...
2020-03-14 10:45:00 1398
原创 攻防世界(pwn)house_of_grey——Linux系统文件初探
前言:此题涉及到Linux的两个系统文件:maps和mem,不了解的可以看科普(传送门)。64位,保护全开,打开IDA64看看程序到底是怎么设计的。可以看到程序首先打开系统,然后用mmap映射了一片区域,并对fn函数进行操作,我们双击进入fn函数看看情况:fn函数里边又5个功能,没个功能都有用途,分析一下每个功能:第一个功能从字面意思看就知道是用来定位文件,然后打开他,但是不能打...
2020-03-06 12:05:07 1042
原创 攻防世界(pwn)Noleak
前言:看了大佬们的writeup,发现这题解法真的非常多,我这里用的是unsortedbin的地址写漏洞,详情可以看ctfwiki了解漏洞原因。没开NX,有可以执行的堆栈,但是开启了Full RELRO,不能修改got表地址了。打开IDA:发现是一个菜单题,可以创建,删除,更新堆快信息,没有输出信息的选项,果然Noleak。我们这里可以一个一个功能去看,看看漏洞存在哪里:经过观察...
2020-03-03 18:55:12 1588 2
原创 攻防世界(pwn)easyfmt
这题出的很奇怪,本地调试不知道为什么出问题,远程也调了很久才通,希望路过的大佬提出更好的思路和解题方式!查看一下保护:开了canary,NX,部分打开RELRO,没开PIE,可以尝试got表的覆盖。这里不能有时候全信,还是要打开IDA自己分析才行。可以看到有明显的格式化字符串漏洞,看看怎么利用他。要运行到格式化字符串漏洞,我们必须完成一个判定,我们进入CheckIn函数看看。Ch...
2020-03-02 10:46:45 1145 1
原创 攻防世界pwn RCalc
需要知识:ROP,堆溢出发现查询没开PIE和canary。程序在最开始申请了几个堆空间,并不允许我们自己申请,而且整个程序并没有free的地方,所以常规的堆漏洞并不容易利用,这时候我们就继续往下看。这里可以看到,主要功能函数处有一个没有输入限制的字符串,由此我们就联想到使用常规的ROP。但是程序在主要功能函数中添加了随机数植入,构造了一个自定义的canary,我们只要覆盖了这个随机...
2020-02-22 18:23:53 490
原创 攻防世界pwn supermarket + 实时数据监测
supermarket这是一个典型的堆题,菜单类型。只开了NX保护的32位程序。我们来分析一下程序程序实现了增删改查,其中改可以改价格和商品的描述,我们重点看改描述,因为程序的漏洞就在这里。首先让我们输入商品的名字,通过名字来找到商品,这里我们就可以伪造商品了。继续往下看会看到程序让我们输入描述信息的size。通过程序分析我们知道(&s2)[v1]+5是结构体中存储堆的si...
2020-02-13 11:48:26 959
原创 pwn格式化字符串漏洞小结
格式化字符串漏洞0x00.前言在pwn中,格式化字符串漏洞是一个非常基础的漏洞,他通常穿插在各种漏洞之中。比如,当程序开了PIE保护时,在栈溢出之前,我们先可以运用格式化字符串漏洞获取栈中的信息;通过格式化字符串漏洞的任意地址写,我们可以把栈帧劫持到堆地址上;我们甚至可以直接通过任意地址写,劫持got表,实现getshell……总而言之,格式化字符串漏洞虽然在目前市面上的软件中比较难以看到,...
2019-11-30 13:44:48 2558 2
原创 (攻防世界)(pwn)4-ReeHY-main
这题很早之前就做过了,之前做的时候没怎么注意,这次重新写又有很多感受。0x00前言这题有两种做法,一种是堆溢出,一种是栈溢出。第一次写的时候,由于刚刚入门,只会用栈溢出,这次重新看,用堆溢出试了一下,由于技术有限,还是出现了很多错误,找了很多资料,磕磕绊绊一下午才利用成功。故写此博客记录一下。0x01栈溢出利用方法此题的栈溢出漏洞比较明显,因为他有一个很明显的整数溢出漏洞,可以导致栈漏洞...
2019-10-24 13:40:22 419
原创 (攻防世界)(pwn)(RCTF2017)Recho
0x00.前言又是一题栈溢出题,但是又有一点点不同。。。0x01.程序逻辑程序保护:程序只开了NX保护,堆栈不可执行。进入IDA程序让你先输入你将要输入的字符串长度,然后继续让你输入字符串。最后,程序会输出你输入的字符串。看起来,这很像一般的栈溢出,甚至我们可以通过程序的输出把一些敏感的地址给输出出来。更加让人欣喜的是,这个程序好像给了什么不得了的东西。0x02.奇怪的东西...
2019-09-07 23:51:44 1829
原创 pwntools库DynELF函数使用小结
DynELF函数0x00.前言当我们在使用ROP做题目的时候,发现题目并没有给出libc.so文件(或者libc.so直接给错),这就让一部分人犯了难,这个问题怎么解决嘞?这里,我们介绍一种不需要给出libc.so实体文件,我们直接从库里匹配libc.so的方法——pwntools中的DynELF函数。0x01.使用条件既然我们要使用这个函数,我们就必须知道这个函数使用起来要什么条件。要...
2019-09-01 14:11:11 1725
原创 (jarvisoj)(pwn)guestbook2/level6_x64
guestbook2和level6_x64真的是一摸一样的,两个题目除了提示文字不同,其他的漏洞根本一样,鉴于jarvisoj中的pwn服务器比pwn2服务器要稳定一点,所以这里就写guestbook2。前言:这里,我提供两种方法解题,一种是利用unlink的任意地址读写功能泄露libc基址,一种是用unsorted bin和use after free来泄露libc基址,两种方法都行。漏洞...
2019-08-28 11:53:59 1144
原创 (jarvisOJ)(pwn)level6_x86
Unlink!Unlink!Unlink!level6_x86作为一道堆溢出入门题,还是值得用来练练手,学习一下堆的基础的知识的。参考文献:ctf-wiki:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/glibc-heap/unlink-zh/大佬博客:https://blog.csdn.net/weixin_41617275/article...
2019-08-05 15:10:43 461
原创 (攻防世界)(pwn)babyfengshui
入门级的堆题,拿来学习还是不错的。做这道题之前,最好还是先对堆的数据结构有一定的了解。拿到题目,下载附件,查看保护。一个32位的程序,开了NX和Canary保护,这都不是重头戏毕竟这题不用栈,栈保护只是锦上添花罢了。把文件拖进IDA查看逻辑:可以看到,典型的菜单题,这很pwn,实现了增删改查四个功能,像极了C语言程序设计的期末结业程序设计题哈哈哈,暴露年龄。进入增加用户功能:可...
2019-08-03 14:02:21 1322 8
原创 (攻防世界)(pwn)hacknote
use after free 堆!堆!堆!终于对堆的结构有了一定的了解,开始做堆的题目,恰巧攻防世界xctf中有这么一题可以练练手,还是挺不错的。。。对于use after free呢,这里有ctf-wiki的学习资料:https://ctf-wiki.github.io/ctf-wiki/pwn/linux/glibc-heap/use_after_free-zh/写的非常详细,很实用...
2019-07-31 16:27:31 3451
原创 (攻防世界)(pwn)forgot
这题我也是想了好久啊,实在是没找到什么办法,后来还是把题目给摸透了根据经验一个个试出来的方法!!!拿到题目下载附件查看保护:只开了NX,嗯。。。进入IDA,————惊了,这个是啥子意思???一大堆奇奇怪怪的东西,实在是看不懂,我们只能看看几个关键的输入点:第一个输入name:没有什么东西,进行看string v2 :我们看到距离32的地方,有个0x54的函数指针:找...
2019-07-21 14:55:27 2384 3
原创 (攻防世界)(pwn)pwn1(厦门邀请赛)babystack
canary!canary!canary!拿到题目,下载附件,查看保护。可以很清楚的看到,程序开了canary,这就说明我们不能实现暴力的栈溢出,还要考虑这个canary的值。我们首先运行一下程序:可以很清楚的看出程序的功能,当我们选择1时,我们就可以输入,当我们选择2时,我们可以输出我们前面输入的东西。进入IDA看源代码:我们可以看到canary的值存放在v6里,v6距离rbp...
2019-07-21 11:38:15 2652 10
原创 (攻防世界)(pwn)mary_mroton
经过一段时间的研究,终于接触到Canary了,不容易啊拿到本题查看保护开了NX和Canary两种栈保护,我们运行一下出现,看一下程序逻辑:根据我们对英语强大的理解 (翻译软件的腻量)我们可以看到1标题是栈溢出漏洞函数,2是格式字符串漏洞函数,3为退出,既然他都告诉我们了,我们也不用客气直接用就可以了。我们可以用格式字符串漏洞泄露Canary的值,然后再进行简单的栈溢出,把Canary填...
2019-07-20 16:34:06 885 4
原创 (攻防世界)(pwn)welpwn
首先,放在最前面:这题服务器远端的libc版本是libc-2.23.so而不是libc-2.19.so的版本(害得我编译半天出不来)看到题目,我们下载附件,一看是个tar.gz文件,我们解压一下,发现里面有三个文件:我就心想,这个攻防世界怎么就这么好心这次,以前要给的时候从来不给,这次这么大方???答案是大错特错,这就是个骗局,这个反而是个障碍,版本根本就是错的(但仔细一想,有可能是出题者故...
2019-07-18 10:58:25 2738 3
原创 (攻防世界)(XDCTF-2015)pwn200
这一题和JarvisOJ中的level4简直不要太像了,只是改变了几个地址,改变了溢出点。既然前面已经讲解了,这里就不再重复讲了,详细解法请看链接:https://blog.csdn.net/qq_43986365/article/details/95081996完整exp如下:#! /usr/bin/env pythonfrom pwn import *p=remote('111.19...
2019-07-13 14:55:14 2237 2
原创 (攻防世界)(2016 L-CTF)pwn100
这题也是一个DynELF()的栈溢出题,不过这里是运用了puts函数而不是write函数,所以我们构造的leak函数就要不同些。拿到题目,我们首先查看一下保护:可以看到,程序只开启了NX保护。我们进入IDA看一下程序逻辑,找一找漏洞:我们找到了puts和read函数,看到了明显的栈溢出漏洞,一般思路就是DynELF函数的利用了:我们找到我们需要的一些地址,然后开始构造exp:#!...
2019-07-12 15:50:17 2526 4
原创 JarvisOJ level5
题目要求不用system和execve函数,练习使用mmap和mprotect函数。首先看一下mmap函数和mprotect函数有什么用。mmap()函数mmap将一个文件或者其它对象映射进内存。文件被映射到多个页上,如果文件的大小不是所有页的大小之和,最后一个页不被使用的空间将会清零。mmap在用户空间映射调用系统中作用很大。头文件<sys/mman.h>函数原型voi...
2019-07-11 14:52:05 418
原创 JarvisOJ smashes
这题仍然是栈溢出题,只不过加入了栈保护CANARY,要做这题,CANARY的作用以及他对栈的影响一定要有所了解,不然将无从下手。拿到程序,首先查看一下保护:程序开了CANARY保护,有点麻烦。对于canary,就是在栈底前面一点点(不一定贴近)加入一串字符,如果你暴力进行栈溢出,你就会覆盖canary,导致程序报错,只是栈的一种保护机制。我们先进入IDA查看程序逻辑:我们可以看到在函...
2019-07-10 15:18:42 336
原创 JarvisOJ fm
这一题是一道格式化字符串漏洞题关于格式化漏洞的基础,你可以看我前面的博客,里面有提到:https://blog.csdn.net/qq_43986365/article/details/94896862拿到这一题,我们仍然是先查看保护:我们可以看到,简单的格式化漏洞题只开了NX和CANARY保护,好的。接下来我们就可以进入IDA中看一下程序的具体逻辑:在这里,我们可以看到有一个明显的...
2019-07-09 18:49:54 1114
原创 JarvisOJ level3_x64
这题和level3大同小异,只不过这一题是x64的程序做这题之前,建议先写level2。拿到这题,我们首先查看保护:程序只开了NX保护,好的。根据做过level3的经验,我们先找出我们需要的地址(也可以用pwntools工具自动找):vul()函数:write()函数的plt地址:之后我们找齐需要用的gadget:但是我们并没有找到pop rdx ; ret,根据我们对w...
2019-07-09 16:48:56 1029
原创 JarvisOJ level2x64
这题和level2的漏洞和处理方式差不多,只不过level2是x86而这题是x64的前言:首先,我们先看一下x64和x86的区别:linux_64与linux_86的区别主要有两点:首先是内存地址的范围由32位变成了64位。但是可以使用的内存地址不能大于0x00007fffffffffff,否则会抛出异常。其次是函数参数的传递方式发生了改变,x86中参数都是保存在栈上,但在x64中的前六个参...
2019-07-09 13:25:41 557
原创 JarvisOJ level4
这题与level3相比就是就是题目并没有给出对应的libc文件,这里就要学习使用一波DynELF函数了,这是pwntools的一个函数,使用前请确认安装完整pwntools工具。前言:DynELF函数是通过已知函数,迅速查找libc库,并不需要我们自己本身知道对应版本的libc文件。这是DynELF函数使用的一个模板:def leak(address): payload=pad+p...
2019-07-08 18:58:40 2336 1
原创 Jarvis OJ level3 writeup
这题是典型的ROP返回libc地址题,是一个十分经典的ROP题目。拿到题目我们可以看到他给出了一个rar文件,我们拿这个文件到Linux中解压一下:解压出两个文件:level3和libc-2.19.so。我们查看一下这两个文件的保护:可以看到,libc-2.19.so保护全部开启了(幸好不是攻击他,哈哈),而level3只开了NX保护。我们把level3放到IDA中查看一下程序逻辑:...
2019-07-07 21:27:37 291
原创 JarvisOJ level2 writeup
这是一题最基础的ROP题,题目有system,有/bin/sh,只需简单组合即可。拿到题目,查看保护:可以看到,程序只开启了NX保护。打开IDA查看程序逻辑:可以看出,在输出Input:之后,就可以读入数据了。在buf这里,我们可以看到一个溢出点。从图片中可以发现,buf距离前栈帧的距离为0x88,也就是说,buf距离返回地址的距离为0x88+4。所以我们可以填写的垃圾数据长度为...
2019-07-07 17:22:12 239
原创 Jarvis OJ level1 writeup
拿到题目,首先我们检查一下程序的保护:可以看出来,程序什么保护也没开,既然没开NX保护,说明堆栈上的代码可以执行。我们打开IDA反汇编一下:我们看到这里可输入一个buf,并且题目把buf的地址也输出到屏幕上,我们就可以控制buf植入shell code了,再返回调用即可。...
2019-07-07 16:54:54 708
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人