自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

qq_41560595的博客

ctf-pwn,安卓逆向

  • 博客(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 768 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 414 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 513 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 739 6

原创 pwn学习笔记(一)

ret2text:程序中提供了后门函数,自己复写返回地址为后门函数地址。.bss 、.data、.text三个段是elf文件在磁盘上本来就有的文件,进入到内存后仍然存在。PIE影响这三个部分。

2021-03-18 14:51:47 1398

原创 buuctf——[第五空间2019 决赛]PWN5 1

查看文件权限设置了canary,无法栈溢出。F5查看源程序源程序大意是把随机数放入到bss段的0x804c044处,用户输入用户名和密码,如果密码和随机数相等,则拿到权限。解题思路看到了printf,又加了canary权限,可以想到考查格式化字符串漏洞。可以更改0x804c044处的值,所以要精心构造一个合适的格式化字符串。构造的方法很多。在用户输入用户名处,先输入一个AAAA,试探会写在栈的哪个位置。“AAAA”写在了第10个位子。构造:bss=0x804c044payload=b

2021-03-17 10:40:45 4175 11

原创 Ubuntu20安装pip3

wget https://bootstrap.pypa.io/get-pip.py得到get-pip.py文件后,接着执行:python3 get-pip.py

2021-03-16 19:12:55 674

原创 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 3450 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 451

原创 堆学习——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 885

原创 安装不同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 4814

原创 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 1089

原创 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 516 1

原创 ubuntu安装gef,pwndbg,peda

gdb,pwndbg,peda,gef的安装

2021-01-30 12:42:03 1744

原创 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 4455 5

原创 ret2libc续(一)——地址泄漏

思路libc文件本来存在于磁盘上,当程序执行时会被载入到虚拟内存中,由于ASLR开着(远程主机),libc的地址会变动,但是libc中函数之间的偏移关系是不变的。

2020-12-30 10:39:57 1618

原创 docker布题

之前练习pwn题的时候,发现原题的地址和端口已经关闭无效了,想到了在本机上模拟远程机,实现攻击。需要用到的文件:链接:https://pan.baidu.com/s/1ZAQ3JM54-47sGEjhdbPioQ提取码:6jy4复制这段内容后打开百度网盘手机App,操作更方便哦–来自百度网盘超级会员V4的分享...

2020-12-09 17:49:06 324

原创 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 261

原创 pwn学习笔记(二)

gcc -S test.c 生成汇编文件** 内容**把汇编文件变成可执行性文件gcc test.s

2020-10-29 09:37:12 172 1

原创 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 417

原创 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 607

原创 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 4338 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 741 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 4237 3

原创 HITCON 2016——PHP反序列化漏洞

PHP反序列化漏洞典型例题

2020-09-18 09:27:18 333

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除