![](https://img-blog.csdnimg.cn/20201014180756919.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
pwn
文章平均质量分 86
棂星
这个作者很懒,什么都没留下…
展开
-
DASCTF2020-7月赛 pwn学习记录
DASCTF2020-7月赛 虚假的签到题说实话有点被出题人恶心到了,主要还是自己太菜了。。。????拿到题目直接ida打开,按f5一顿分析就这太简单了吧!先格式化字符串漏洞,后栈溢出,猜想肯定是先用格式化字符串泄漏canary,再利用栈溢出控制程序流,执行后门函数。查看保护机制嗯。。。没有canary保护,那这个格式化字符串漏洞是干嘛用的?然后直接栈溢出发现拿不到shell。这就很奇怪了???其实到这里就到死胡同了,我们回头来看一下main函数的汇编代码,可以看到出题人在程序的最后做了修改原创 2020-08-11 15:32:30 · 838 阅读 · 1 评论 -
pwn题exp模版
根据其他师傅的一些exp自己简单整理了一下,感觉用起来还可以。。。from pwn import *from LibcSearcher import LibcSearcherfrom sys import argvdef ret2libc(leak, func, path=''): if path == '': libc = LibcSearcher(func, leak) base = leak - libc.dump(func) system = base + libc.dum原创 2020-08-07 11:07:58 · 975 阅读 · 0 评论 -
手搓shellcode的学习记录
虽然我们可以利用pwntools自动生成shellcode,也可以利用alpha生成纯字符的shellcode绕过某些限制,但是当程序对输入限制较为严苛时,就不得不和这些自动化工具说再见了。由于之前完全没有手写shellcode的经验,所以本文主要是理解分析其他师傅的shellcode,尝试从中获得技巧和方法(说得明白点就先从照葫芦画瓢开始。。。)首先直接来看题,这是2020 NUAA CTF的一道题,主要考点是ascii shellcode,难点在于限制只能用0x1f-0x7f的字符,并且buf长度只有原创 2020-07-24 15:41:14 · 421 阅读 · 0 评论 -
BJDCTF YDSneedgirlfriend2.0 (UAF)
前几天一直在学堆利用,现在来独立做些题试试水。常见的菜单题,要注意的是tcache bin存取chunk的原则是先进先出的。ida分析漏洞点free掉chunk之后没有把指针置NULL,因此存在Used After Free漏洞。大致利用思路是利用uaf漏洞实现对结构体chunk的改写,修改打印函数指针为我们的后门函数地址。具体利用方法不展开分析了。Exp1:from pwn import *from LibcSearcher import LibcSearcherfrom sys im原创 2020-07-23 13:18:33 · 244 阅读 · 0 评论 -
有关One gadget 限制条件的问题
在整理off-by-one漏洞利用的时候,偶然间发现在执行one gadget时,RSI不为NULL却可以获得shell的情况。这完全打破了我原有的认知,让我十分不解。下图是传参完毕各寄存器的状况:再询问shiroha师傅后,对One gadget执行的限制条件有了新的认识。首先来看看One gadget用到的执行函数execve( )int execve(const char *filename, char *const argv[], char *const envp[]); execv原创 2020-07-21 16:43:14 · 479 阅读 · 0 评论 -
off-by-one漏洞的利用
介绍严格来说 off-by-one 漏洞是一种特殊的溢出漏洞,off-by-one 指程序向缓冲区中写入时,写入的字节数超过了这个缓冲区本身所申请的字节数并且只越界了一个字节。漏洞原理off-by-one 是指单字节缓冲区溢出,这种漏洞的产生往往与边界验证不严和字符串操作有关,当然也不排除写入的 size 正好就只多了一个字节的情况。其中边界验证不严通常包括使用循环语句向堆块中写入数据时,循环的次数设置错误(这在 C 语言初学者中很常见)导致多写入了一个字节。字符串操作不合适一般来说,原创 2020-07-21 15:12:28 · 1454 阅读 · 0 评论 -
从两道基础题简单认识和了解fastbin double free漏洞的利用
fastbin double free原理Fastbin Double Free 是指 fastbin 的 chunk 可以被多次释放,因此可以在 fastbin 链表中存在多次。这样导致的后果是多次分配可以从 fastbin 链表中取出同一个堆块,相当于多个指针指向同一个堆块,结合堆块的数据内容可以实现类似于类型混淆 (type confused) 的效果。(即可以构造假的chunk实现任意地址写)Fastbin Double Free 能够成功利用主要有两部分的原因fastbin 的堆块被释放后原创 2020-07-13 19:41:23 · 975 阅读 · 0 评论 -
关于Linux下更换不同glibc版本的解决方法
在学习fastbin的有关漏洞利用时,由于本地的glibc版本是2.27的,存在tcache机制所以和单纯fastbin的利用方法不同,因此只能换用版本更低glibc版本。但是更换 ELF 文件的 libc 版本的过程让我十分头疼,最后在大佬的帮助下总算还是成功了,现在记录一下解决方法。首先获取不同版本的glibc获取glibc的方法不止一种,可以手动下载也可以借助自动化工具。这里我使用的是https://github.com/matrix1001/glibc-all-in-one下载完成后可以在原创 2020-07-09 20:33:24 · 12031 阅读 · 1 评论 -
从hacknote了解UAF漏洞
首先查看程序的基本功能,基本的菜单形式,主要提供了三个功能,创建,删除,打印。(即malloc堆块,free堆块,printf堆块中的数据)查看程序基本信息拖进ida中进行伪代码审计,由于此题没有去掉符号表,因此审计相对比较简答。创建和打印部分的代码均没有什么漏洞,在删除功能处可以发现很明显的UAF漏洞,在free掉content指针和结构体指针后均没有将其置为NULL。另外可以找到程序中存在后门函数magic进行调试分析,首先创建两个note(note0和note1),大小都为0x10,g原创 2020-07-07 15:05:50 · 619 阅读 · 0 评论 -
从pwn-summoner理解first fit
本文主要为观看bili53448916889师傅讲解视频的学习笔记。首先拖进ida中进行代码审计。以下是main函数的伪代码__int64 __fastcall main(__int64 a1, char **a2, char **a3){ const char *v3; // rsi char **v5; // [rsp+0h] [rbp-240h] unsigned int level; // [rsp+1Ch] [rbp-224h] void **v7; // [rsp+20h]原创 2020-07-06 11:28:47 · 309 阅读 · 0 评论 -
ret2libc 2
ret2libc 2该题目与retlibc1基本一致,只不过不再出现 /bin/sh 字符串,所以此次需要我们自己来读取字符串,所以我们需要两个 gadgets,第一个控制程序读取字符串,第二个控制程序执行 system("/bin/sh")。这里我们和上一题构造system函数一样构造gets函数用于读入/bin/sh字符串,然后我们需要考虑读到什么地址?一般来说在程序运行时bss段会分配很大一段空间,所以我们在此基础上随意制定一个地址就可以了。p.sendline('a'*112 + p32(e原创 2020-05-19 14:13:59 · 305 阅读 · 0 评论 -
Ret2libc 1
Ret2libc 1题目代码和之前一样,gets函数存在栈溢出。同时也存在system函数,但是不同之处是我们不能直接跳转到system(“shell!?”)。因为我们要执行的是system(“bin/sh”)。首先,我们可以在内存中搜索一下看有没有这个字符串我们可以看到在0x8049720存在我们需要的字符串那么,我们直接返回该处,即执行 system 函数。相应的 payload 如下from pwn import *sh = process('./ret2libc1')binsh_原创 2020-05-19 14:13:50 · 675 阅读 · 1 评论 -
ret2syscall知识点及例题
rop检查程序防护和基本信息注意到此时开启了NX防护,所以无法使IP寄存器指向堆,栈。另外,注意这是statically linked(静态链接)调试分析后,知道与之前一样同样在112个字节后同样可以控制返回地址,那怎么获得shell呢?我们要思考,让程序跳转到什么地方呢?由于我们不能直接利用程序中的某一段代码或者自己填写代码来获得 shell,所以我们利用程序中的 gadgets 来获得 shell,而对应的 shell 获取则是利用系统调用。简单地说,只要我们把对应获取 shell 的系原创 2020-05-19 14:13:27 · 725 阅读 · 0 评论 -
ret2shellcode知识点及例题
ret2shellcode检查程序的基础信息后发现和ret2text不同的是其关闭了nx防护,这就代表IP寄存器可以指向堆,栈了。运行程序可以看到只有一个输入,接下来用ida打开进行分析。与ret2text一样可以很明显的看到在main函数中调用了gets函数。我们同样可以控制返回地址,但返回到什么地方呢?查看内部函数可以看到,此时程序中并没有用到system函数,那应该怎么办呢?这里需要注意有两个点1 NX: NX disabled2 strncpy(buf2, &a原创 2020-05-19 14:13:19 · 846 阅读 · 0 评论 -
ret2text知识点及例题
ret2text这里涉及到的知识Stack: No canary foundNX: NX enabledret2text: ELF 32-bit LSB executable, Intel 80386, version 1 (SYSV), dynamically linked1.首先是stack保护措施,如果开启的话在栈中返回地址前放一个随机值,如果被覆盖,程序就会报错退出2.nx则是 no execution,如果开启的话就不能让ip寄存器指向堆和栈。。。。注意堆和栈是不原创 2020-05-19 14:12:41 · 1369 阅读 · 0 评论 -
2020MRCTF - 部分Pwn题
easyoverflow保护全开,但这里只需要栈溢出覆盖数据满足check函数判断就好了。exp:from pwn import *context.log_level = 'debug'p = remote('38.39.244.2',28082)payload="a"*48 + "n0t_r3@11y_f1@g"p.sendline(payload)p.interacti...原创 2020-04-09 19:28:28 · 323 阅读 · 0 评论 -
BJDCTF_ one_gadget
考察点:one_gadget题目给出了 printf 的地址,由此可算得 libc 基址,然后找 one_gadget、计算 libc 中 one_gadget 地址 printf("Give me your one gadget:"); __isoc99_scanf("%ld", &v4); v5 = v4; v4();v4 是个函数指针,scanf 的时候把 on...原创 2020-04-09 19:18:36 · 316 阅读 · 0 评论 -
BJDCTF_r2t3
BJDCTF_r2t3考点:考点:短整型溢出1.首先检查程序的基础信息32位程序,可以看到这开启了NX保护,说明无法在栈上执行shellcode2.运行程序,对程序功能有基本了解程序基本功能:输入name,对name长度进行判断3.用ida打开进行分析这里截取了关键部分对代码首先在main函数中,没有任何可疑的进入name_check函数:接受了一个最大长度为0x400的b...原创 2020-04-09 19:16:30 · 361 阅读 · 0 评论 -
BJDCTF-PWN r2t4详解
BJDCTF_r2t4考点:用格式化字符串写__stack_chk_fail 函数来 bypass canary由于涉及到格式化字符串漏洞的利用,所以基本原理和利用方法要先有一定的了解。推荐先阅读CTF-wiki:格式化字符串漏洞原理介绍格式化字符串漏洞利用1.首先检查程序的基础信息64位程序,可以看到开启了NX和Stack防护2.运行程序,对程序功能有基本了解程序基本功能:对...原创 2020-03-26 22:21:45 · 1011 阅读 · 2 评论