![](https://img-blog.csdnimg.cn/2019091813595558.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
PWN
PWN
43v3rY0unG
逆水行舟。
展开
-
攻防世界warmup pwn wp(fuzz)
发现这题没给附件,所以是要fuzz的题目(最开始不知道什么叫fuzz = =,在这里解释一下,(fuzzing)模糊测试的意思,百度是这样解释的:模糊测试(Fuzzing),是一种通过向目标系统提供非预期的输入并监视异常结果来发现软件漏洞的方法。首先先远程看一下:可以发现给了我们一个十六进制数(应该是地址)那首先根据这些我们可以先将fuzz函数写出来,分三种情况——不用他给的地址(0),用p32发送(1),用p64送(2)expfrom pwn import*addr = 0x原创 2020-10-15 12:01:25 · 739 阅读 · 0 评论 -
攻防世界pwn stack2 wp
拖进ida查看,找到溢出点:通过这里我们可以更改数组中任意元素的值,那么,如果要更改返回位置的话我们就要去计算main函数返回位置距离数组的偏移是多少了。(这道题的难点也是在这里)思路:我们在输入的时候,输入数组的第1个元素,看他存储在栈中的哪个位置,然后再看函数漏洞所在函数(main)最后返回时,栈顶的值,他们的差值就是数组的大小加上ebp。找到后门函数:但是后来发现靶机上没有bash,所以你可以把这个看成是一个假的后门qaq,我们可以找到system函数,然后用后门里的"sh"原创 2020-10-14 16:00:37 · 281 阅读 · 0 评论 -
攻防世界Mary_Morton wp
首先查看他的保护机制:(checksec)有canary保护然后我们拖进ida发现两处溢出点:看一下流程图和汇编可以知道readsqword这个地方有canary保护,只有 rax 和fs:28h 两个值相等的时候 才能跳转到返回值,反之则调用stack_chk_fail找到后门函数思路:将两个漏洞结合利用,首先利用字符串漏洞,泄露出canary的值,然后在函数要返回的时候再填回去,之后利用栈溢出,让其返回到后门函数根据程序可以看出,v2应该就是canary的..原创 2020-10-13 13:32:09 · 278 阅读 · 0 评论 -
攻防世界(PWN)forgot
感觉有些wp写的不是特别详细,当时我看的时候有的地方也是看不太懂...先拖进ida中看一下:找到溢出点,因为我们分配给了v2 32byte的内存,但是scanf不限制长度,所以这里可以溢出。第88行就是决定程序走向的语句了。初步思路就是栈上的变量覆盖,在v2这里溢出,覆盖掉v3,然后让程序走到sub_80486CC:既然我们要覆盖v3,那么根据(&v3+ --v14)我们需要让v14的值不变,因为v14 = 1则--v14 = 0,这样程序就会顺利的走到v3.观察原创 2020-10-12 15:56:59 · 254 阅读 · 0 评论 -
pwn-格式化字符串漏洞
一直想写一篇关于这个漏洞的博客,刚好借着今天刷到buu的【第五空间决赛2019】PWN5这道题来系统讲一下格式化字符串漏洞:(这里这道题还是蛮简单的,主要是去理解这个漏洞的原理,关于该漏洞的难度稍大的题会零开博客讲解)看一下几个经常用来测试格式化字符串的格式控制符%d 用于读取10进制数值%x 用于读取16进制数值(这两个都可以起到泄露信息的作用)%s 用于读取字符串值 即泄露任意地址信息(%d,%x只能泄露原有栈的内容,结合%s就可以泄露任意地址的内容)(%s不直接打印栈中内容,而是通过.原创 2020-09-07 23:14:52 · 890 阅读 · 1 评论 -
buu pwn刷题——分类题型1——gets溢出无脑填充
gets漏洞gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取,所以应该确保buffer的空间足够大,以便在执行读操作时不发生溢出。栈结构:(图自ctf-wiki)warmup_csaw_2016找到gets漏洞,v5到rbp有0x40的内存无脑填充即可:'a' * 0x40 + 'b' * 8 + p64(0x40060d)exp#!/usr/bin/pythonfrom pwn import *r = remote('no原创 2020-09-07 15:19:08 · 1058 阅读 · 0 评论 -
pwn--栈迁移
七夕快乐~咕呱~前言栈迁移主要是为了解决栈溢出时溢出空间大小不足的问题,当我们的rop链过长时很可能栈空间不够,并且ebp之前的空间其实只是填充一些没什么用的数据原理与传统的pop_ret类似,栈迁移是利用level_ret这样的gadgets实现栈的迁移,都是寻找很小短的零碎代码,进行拼接。关于gadget的定义:gadget在英文中意为小配件,在构造ROP链时,主要是指一对pop|ret指令,其功能在于可以配置一个寄存器的值,并返回至指定地址。常常用来在64位pwn的寄存器原创 2020-08-26 11:06:59 · 526 阅读 · 0 评论 -
jarvisOJ Backdoor (pwn)
后门??学到了....题目说有一个参数可以触发程序进行后门操作,拖进ida看一下:main函数:signed int __cdecl wmain(int a1, int a2){ char v3; // [esp+50h] [ebp-2C8h] char v4; // [esp+E1h] [ebp-237h] char v5; // [esp+E4h] [ebp-234h]...原创 2020-02-27 12:14:31 · 384 阅读 · 1 评论 -
JarvisOJ (pwn)guess
先看一下函数结构:main:int __cdecl __noreturn main(int argc, const char **argv, const char **envp){ struct sockaddr addr; // [rsp+0h] [rbp-20h] __pid_t v4; // [rsp+14h] [rbp-Ch] int v5; // [rsp+18h]...原创 2020-02-26 12:58:41 · 251 阅读 · 0 评论 -
JarvisOJ pwn Test Your Memory
先找到几个关键函数:单击main看一下函数结构:点进mem_test看下:找到溢出点:scanf点进去hint发现了cat flag字符串.....(问题突然变得很简单....ret2libc)exp:from pwn import *#p = process('./memory')p = remote("pwn2.jarvisoj.com","9876")...原创 2020-02-24 11:33:42 · 231 阅读 · 0 评论 -
CG-CTF Stack Overflow(pwn)
首先先拿到ida里面看一下,找一下溢出点点进去A发现是一个大小为40的数组(0x28),但是可以接受64个字符,所以这里是第一个溢出点。下面是对s进行输入,限制是n,点开n会发现n就在A的下面。所以思路就是:我们可以通过溢出A来达到覆盖n的效果然后我们点开pwnme函数会发现system函数,搜索字符串发现没有‘/bin/sh’,所以需要我们自己写入bss段。exp:f...原创 2020-02-24 09:50:19 · 697 阅读 · 0 评论 -
PWN-canary学习
先简单介绍一下canary:Canary 的意思是金丝雀,来源于英国矿井工人用来探查井下气体是否有毒的金丝雀笼子。工人们每次下井都会带上一只金丝雀。如果井下的气体有毒,金丝雀由于对毒性敏感就会停止鸣叫甚至死亡,从而使工人们得到预警。canary是一种用来防护栈溢出的保护机制。其原理是在一个函数的入口处,先从fs/gs寄存器中获取一个值,一般存到EBP - 0x4(32位)或RBP - 0x8...原创 2020-02-10 10:13:16 · 1528 阅读 · 0 评论 -
JarvisOJ PWN level系列 wp
菜菜的小白最近学习pwn,做了Jarvis上的一些题目进行练习,也从很多师傅的博客里学习到了很多新的知识,今天重新温习并且总结一下,以下的wp可能会比较详细,大佬可略:level0这一题的难度还是蛮容易的,首先拖进ida里,发现有'/bin/sh/字符串和system函数,然后找溢出点,发现read函数这里发生溢出,只给了0x88的内存,但是却要读0x200个字节,必溢出:然后构造...原创 2020-02-09 09:56:07 · 424 阅读 · 0 评论 -
JarvisOJ PWN fm wp
fm拿到之后首先ida一下,看一下主函数,找漏洞点:然后就发现第10行是一个很简单的格式化字符串漏洞,看一下x的内存地址:x的值是3,所以要利用格式化字符串漏洞的任意地址读写,“x_addr%[i]$n”,%n可以将已经输出的字符个数写入到指定的参数中,这个格式化字符串会在栈上的某处,需要定位x_addr作为printf的第几个参数来确定[i]的值,由于x_addr在32位程序...原创 2020-01-24 19:48:18 · 313 阅读 · 0 评论 -
JarvisOJ PWN smashes WP
Smashes涉及到一些新的知识,以下为转载大佬的一篇博客:这道题利用是保护机制本身的一种漏洞:在程序加了canary保护之后,如果我们读取的buffer覆盖了对应的值时,程序就会报错,而一般来说我们并不会关心报错信息。而stack smash技巧则就是利用打印这一信息的程序来得到我们想要的内容。这是因为在程序发现canary保护之后,如果发现canary被修改的话,程序就会执行_...转载 2020-01-15 20:31:49 · 352 阅读 · 0 评论 -
JarvisOJ PWN Tell me Something wp
Tell me Something先拖进ida里看一下,发现了"flag.txt"字符串,双击发现good_game函数:查看主函数,发现其中并没有调用goodgame函数:所以我们输入大于buffer长度的数据,溢出的数据将会覆盖栈上的数据,因此我们将main的返回地址改成goodgame的地址,这样当main函数执行完之后,将会跳转到goodgame函数上进行执行,从而拿到...原创 2020-01-09 20:50:43 · 169 阅读 · 0 评论 -
JarvisOJ PWN level1 wp
level1checksec看一下保护,几乎没什么保护措施:先拖进IDA里面看一下(f5大法好),发现栈溢出点:f12没发现"/bin/sh",看一下printf函数会把buf的地址输出出来,我们将它截取,并保存在buf_addr中。由于NX是关闭的状态,也就是说我们把shellcode写进buf里面,函数返回时跳转回buf的位置,就可以执行shellcode了。因此我们把sh...原创 2020-01-08 20:00:18 · 241 阅读 · 1 评论