pwn
dittozzz
这个作者很懒,什么都没留下…
展开
-
格式化字符串漏洞原理详解
菜鸡刚学总结下。理解这个漏洞的原理,你需要有汇编层面的函数调用和函数的参数传递知识。如果你不清楚函数的参数是如何传递的,可以看《加密与解密》的逆向分析技术篇,也可以参考我博客里的(https://blog.csdn.net/qq_43394612/article/details/84350677)和(https://blog.csdn.net/qq_43394612/article/detai...原创 2018-12-08 23:38:02 · 36924 阅读 · 9 评论 -
Jarvis oj level1 wp
看下防护啥也没开。放IDA里看下:很显然,利用泄露的数组的首地址来写通解,就不用管ASLR了。exp如下:from pwn import*a=remote("pwn2.jarvisoj.com","9877")a.recvuntil("What's this:")addr=a.recvuntil(&原创 2018-12-30 19:55:08 · 302 阅读 · 0 评论 -
Jarvis oj level2 wp
检查防护开启了NX,没开启PIE和canary防护,程序本身的基址不变。放IDA里看一下程序本身调用了system函数,那么PLT表里就一定有这个函数。看下vulner函数很显然栈溢出。IDA查找下字符串:发现了/bin/sh字符串,而且在本身程序的data段,由于没有开启PIE,那么这个字符串的首地址是不会变的。简单计算下,首地址是0x0804A024,算下溢出点是多...原创 2018-12-30 20:25:43 · 1208 阅读 · 3 评论 -
Jarvis oj tell me something writeup
拿到题目前checksec下:64位,开启了NX。放到IDA里看下:就单纯的栈溢出,看下调用哪些函数:plt表里并没有system函数,也不知道对方使用的动态库的版本。看到函数good_game:这个函数会读取flag,那么就很显然了,将返回地址覆盖到这个函数即可。计算下溢出点:由于是64位的程序,不能访问大于0x00007fffffffffff的地址空间。但是可以通...原创 2018-12-31 11:41:24 · 263 阅读 · 0 评论 -
Jarvis oj level2 (x64) wp
64位程序前6个参数通过寄存器来传递,多于6个的使用堆栈传递。前6个从左到右依次为RDI,RSI,RDX,RCX,R8,R9。多于六个的从右往左依次压入堆栈拿到题目检查保护:放ida里,还是之前一样的程序:程序本身有字符串/bin/sh找下pop rdi ret 在哪:编写exp:from pwn import* a=remote("pwn2.jarvisoj.com",...原创 2019-01-05 14:22:26 · 294 阅读 · 0 评论 -
jarvisoj level4 wp ROP及DynELF模块
拿到题目开启了NX。放IDA里:栈溢出。程序本身没有调用system函数无法ret2plt。且题目本身没有给出目标的动态库的版本。题目本身有write函数,可以泄露内存,则可以利用pwntools的DynELF模块,找到system函数。本身程序段没有/bin/sh的字符串,则需要使用read函数将字符串读入,read函数有三个参数,这就需要pop pop pop ret这...原创 2018-12-31 21:27:35 · 537 阅读 · 0 评论 -
jarvis oj fm writeup
格式化字符串漏洞简单利用32位程序。canary和nx都打开了。放ida里:直接打印的buf,很明显的格式化字符串漏洞。用%n,将其修改为4即可,exp如下:from pwn import*a=remote("pwn2.jarvisoj.com","9895")payload=p32(0x0804A02C)+"%11$n"a.sendline(payload)a....原创 2019-01-05 19:39:18 · 336 阅读 · 2 评论 -
Jarvis oj Test your Memory writeup
简单的ret2plt检查下防护,只开了NX。放ida里:问题出在mem_test函数里:点开hint,发现了有"cat flag"这个字符串:而且还在rodata区里,那直接硬编码就可以了。程序本身调用了system函数,那直接ret2plt就行了。根据ida计算出溢出点:溢出点0x13+4。编写exp:from pwn import*a=remote("p...原创 2019-01-05 20:49:35 · 871 阅读 · 0 评论 -
int_overflow writeup
做了半天,没注意是整型溢出。。。拿到题目检查下防护:随便运行下:放到ida里看下:题目对输入的password的长度进行了检查,只能在4到8范围内。在strcpy处有溢出,想要进行溢出就必须绕过v3的检查。发现v3是8位无符号整数,则最大只能是255。但是read函数能读取的长度是0x199,远大于255,那就可以进行整型溢出,让passwd的长度是 260到264就可以...原创 2019-01-06 23:06:55 · 922 阅读 · 0 评论 -
cgpwn2 writeup
拿到题目检查防护:简单运行下:放到ida里看下:hello函数的代码如下:char *hello(){ char *v0; // eax signed int v1; // ebx unsigned int v2; // ecx char *v3; // eax char s; // [esp+12h] [ebp-26h] int v6; // [esp+1...原创 2019-01-07 11:42:20 · 1760 阅读 · 7 评论 -
NUAActf string wp
64位的格式化串还没做过,导致做了半天。拿到题目检查下防护:开启了canary。简单运行看了下程序逻辑后放到IDA里:为了方便看,部分变量名已修改:sub_400A70这个函数里没啥问题。输入east退出来。进入east函数:里面有个格式化串的漏洞:继续往下看:关键在:将输入的这个字符串的首地址强制转化为函数指针后调用他。看汇编清楚点:那这里就可以读入she...原创 2019-01-12 15:53:15 · 1189 阅读 · 2 评论 -
Jarvis oj level0 wp
这题就是返回利用自身代码。拿到题目首先检查有什么防护开启了NX保护,没开canary和PIE,本身程序基址不会变。放到 IDA里看一下:main函数如下:调用了 vulner函数:简单的栈溢出漏洞这里看到有callsystem这个函数,那就很明显了,将返回地址覆盖为callsystem函数的地址即可。计算下溢出点:由于是64位的,不能访问超过0x00007fffffff...原创 2018-12-30 19:44:41 · 411 阅读 · 0 评论 -
pwnable.kr 2.collision writeup
拿到题目先连上去。ls查看目录得到cat 查看下col.c的源代码#include <stdio.h>#include <string.h>unsigned long hashcode = 0x21DD09EC;unsigned long check_password(const char* p){ int* ip = (int*)p; //这里将...原创 2018-12-12 11:37:26 · 503 阅读 · 0 评论 -
栈溢出漏洞原理及基本利用(ret2addr,ret2arg)
菜鸡总结下,方便复习。了解栈溢出漏洞,需要对汇编里的call指令,ret指令,以及函数的调用过程有所了解。简介栈溢出是向栈中写入超过原本长度限制的数据,使栈中的其他数据被覆盖,常见的是覆盖栈中返回地址,改变程序的执行流程。栈溢出漏洞成立需要两个条件,其一是:有向栈中写入数据的行为,另一个是:使用了gets,strcpy,strcat等 不限制数据输入长度或者不检查数组长度的函数。原理函...原创 2018-12-14 17:55:08 · 2078 阅读 · 0 评论 -
pwnable.kr 3.bof writeup
拿到题目访问下http://pwnable.kr/bin/bof.c得到源代码#include <stdio.h>#include <string.h>#include <stdlib.h>void func(int key){ char overflowme[32]; printf("overflow me : &qu原创 2018-12-15 20:14:12 · 560 阅读 · 0 评论 -
pwnable.kr 4.flag writeup
没涉及到pwn,就是一道逆向题目。拿到题目访问 http://pwnable.kr/bin/flag 下载文件。。下载得到flag文件,无后缀,记事本打开,发现是elf文件,改后缀为elf。用IDA打开查看汇编代码。发现加了壳,打开字符串窗口看看有没有信息,(shift 加上f12快捷键打开,或者在这里找到字符串窗口并打开,随便一翻就看到了关键字upx,看来应该是upx的壳,用...原创 2018-12-15 20:31:53 · 567 阅读 · 0 评论 -
CGfsb writeup 格式化字符串漏洞的简单利用
如果对格式化字符串漏洞不怎么了解,推荐看《灰帽黑客》这本书,也可以看看我博客里的https://blog.csdn.net/qq_43394612/article/details/84900668拿到题目,先看下开启了什么保护措施没有开启PIE(内存地址分布随机化)file下是动态链接运行下就是让你先输入name,再输入message就完事了。放到IDA里看一下。很明显是格...原创 2018-12-22 10:06:50 · 4231 阅读 · 0 评论 -
pwntw start writeup 栈溢出利用自身代码
这题利用了栈溢出,将返回地址覆盖为程序本身地址,造成内存泄露。有个坑是如果你用gdb peda自带的checksec检查防护措施会发现NX是打开的,那么堆栈处的代码无法执行,就无法构造栈里的shellcode,file下发现程序是静态链接的,那就无法利用ret2libc。想了半天也不知道怎么做。就用ubuntu自带的checksec检查下发现根本没有开启NX,可能是gdb的调试环境会影响...原创 2018-12-22 11:03:41 · 668 阅读 · 1 评论 -
cgctf when_did_you_born 栈溢出简单利用
拿到题目,先checksec下,看下防护措施:没有开启PIE。直接放到IDA里看下:有些变量名为了方便看,我已经修改过了。图中箭头处即是溢出点。分析下第一次输入overflowme,如果等于1926就会退出,但是想要拿到flag,就需要overflowme的值为1926,那就很明显了,第一次输入的时候随便输个数只要不是1926就行,第二次输入v4 这个数组的时候,利用缓冲区溢出,将o...原创 2018-12-22 15:24:55 · 2572 阅读 · 0 评论 -
nuaactf hello_pwn writeup
拿到题目检查下有什么防护:直接放到IDA里:代码很短数组unk_601068和变量dword_60106C都在.bss段里:sub40686()这个函数是读取flag:这里说下read函数,第一个参数为0,代表标准输入即从终端输入,第三个参数是输入的个数是0x10,即16个字节。想要读取flag只需变量dword_60106C的值为0x6E756161即可,那就很明显了,只需...原创 2018-12-22 15:54:06 · 1077 阅读 · 0 评论 -
栈溢出基本ROP绕过ASLR和NX保护
菜鸡刚学rop,总结下,算是对蒸米大佬这篇文章最后一个样例的一点解释说明。笔记中的程序源代码来自 蒸米大佬的x86一步一步学rop http://www.vuln.cn/6645计算溢出点的位置的脚本可以在大佬的github上下载(其实从IDA上也可以计算出来溢出点)https://github.com/zhengmin1989/ROP_STEP_BY_STEP预备知识:了解动态链接中P...原创 2018-12-28 15:39:20 · 3565 阅读 · 1 评论 -
pwnable.kr 1.fd writeup
拿到题目先连上去ls查看下目录文件目录下有 fd,fd.c ,flag文件。用cat 查看下fd.c源文件得到如下源代码:。#include <stdio.h>#include <stdlib.h>#include <string.h>char buf[32];int main(int argc, char* argv[], char* ...原创 2018-12-12 10:52:01 · 276 阅读 · 0 评论 -
csaw-ctf warmup wp
拿到题目检查防护:64位程序,简单的栈溢出:程序本身有cat flag计算下溢出点:exp如下:原创 2019-01-20 10:36:18 · 700 阅读 · 0 评论