自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(94)
  • 资源 (2)
  • 收藏
  • 关注

原创 【pwn】未知libc版本利用的一个蠢方法

前几天看了一道题,题目本身还是比较常规的,这题的预期解法是通过_dl_runtime_resolve来做的。但我就是想用栈溢出+栈迁移碰一碰,整了半天就差onegadget地址了,查了一下libc search发现找不到对应的版本,可能出题人就是想用一个比较偏的libc版本把这条路封死,但我最后还是硬怼出来了。以后如果遇到了数据库中找不到对应的libc版本的时候可以尝试一下这种方法(当然ctf题中一般不会出个很偏的libc版本)。条件:1.libc中的一个任意地址(通过泄露got表就可得到)。2.可以通过

2020-08-17 20:31:47 1359 1

原创 【pwn】WMCTF2020 cfgo-CheckIn

拿到二进制后先解UPX,解完后发现程序还是很复杂,发现是cgo,做题的时候不知道有没有这种的插件支持,问了下做逆向的队友,似乎插件版本没有更新到这个版本,静态分析没有进展,先看看远程服务是跑啥的。一个迷宫,走到旗子的位置就行了,一共100关,一波深搜就行了,解决了100关后出现了。在二进制中搜索字符串无果,就当blind pwn做了,输入name后程序就退出了,可能存在的漏洞格式化字符串以及溢出,尝试发现没有格式化字符串漏洞,然后尝试溢出。当输入了0x78个字符后发现出现了报错信息。这里报错信息还是

2020-08-03 12:24:39 2244

原创 【pwn】oooorder

端午节看了dasctf的一个pwn题,学了一个新的姿势。例行检查分析程序这是个堆的菜单题,并且用了seccomp进行保护,禁用了execve。这时候一般想法是orw直接将flag写出来。但是堆的题禁用了这个还是比较麻烦的,因为堆的题无法对栈进行控制就不能进行rop,这个先放一放,先进行堆利用。漏洞是在edit中,其中使用的了realloc,当size为0的时候,realloc会free掉这个块,执行两次可以造成tcache dup,这里可以泄露堆地址,第一次任意地址分配可以分配到一个unsortb

2020-06-29 10:01:25 569

原创 【pwn】 [极客大挑战 2019]Not Bad

例行检查开了沙箱程序逻辑很简单,存在0x18字节溢出,看是否能进行栈迁移,目前可控输入只有buf,但是buf只有0x20大小不够rop,所以尝试别的方法。程序在最开始mmap了一块内存,可写可执行,那么接下来目标就是1.在这块内存上写shellcode2.跳转过来执行由于不能rop且栈是可执行的想到能不能进行jmp rsp。在程序中找到了这个指令。那么就可以在buf上布置read以...

2020-03-10 18:53:46 1065 7

原创 【pwn】 hitcontrain_bamboobox && ZJCTF_19_EasyHeap

这两个题目类似,放在一起写。例行检查没有pie,got表可写。程序逻辑edit功能都存在堆溢出,堆指针都保存在bss段上,可以通过unlink对got表进行读写。本来两个程序都存在后门,但是oj在部署的时候路径有点问题,所以就想办法获取shell。bamboobox存在show功能,可以泄露libc地址。easyheap刚好程序中存在system函数。bambooboxfrom ...

2020-03-06 14:58:51 518

原创 【pwn】 ciscn_2019_s_4

main函数,存在八个字节溢出,栈迁移,第一次泄露ebp,得到栈上buf地址,迁移到buf即可。from pwn import *io=remote('node3.buuoj.cn',28060)leave=0x8048562sys_plt=0x8048400pl1='a'*0x24+'bbbb'io.send(pl1)io.recvuntil('bbbb')ebp=u32(...

2020-03-06 11:18:29 755 3

原创 【pwn】 roarctf_2019_realloc_magic

例行检查保护全开,分析程序逻辑。发现没有输出堆内容的函数,想要泄露libc地址只能通过修改IO_FILE结构体实现。realloc函数有两个trick。在size为0时,free掉指针指向的堆块,返回0;在分配超过当前指针指向堆块大小时如果有剩余空间则扩大堆块大小。利用思路1.堆块free 8次放进unsortbin中,在fd上得到arena地址,通过realloc扩大堆块的特性造成堆块堆叠...

2020-03-05 10:24:43 969

原创 【pwn】 gyctf_2020_borrowstack

例行检查程序逻辑看到buf缓冲区有0x10大小溢出,且可以控制bss段上的bank,可以用栈迁移做,这题的bss段离got表较近,在迁移时尽量往高地址迁移,防止在rop时破坏got表上数据。from pwn import *io=remote('node3.buuoj.cn','29302')bank=0x0601080leave=0x400699puts_plt=0x0400...

2020-03-02 17:03:17 1603 7

原创 【pwn】 cmcc_simplerop

例行检查ida打开二进制文件发现是静态链接的32位程序。main函数中存在溢出。用ROPgadget查找文件中的gadget。ROPgadget --binary ./simplerop --only 'pop|ret' >> 1.txt得到发现存在pop eax;retpop edx;pop ecx;pop ebx;ret这些就足够了,给寄存器赋值再用int 80...

2020-02-26 10:51:25 721

原创 【Re】36C3CTF xmas_future

这是一道wasm的逆向题。先分析给的js文件存在一个check函数里面调用了wasm.check,传入了两个参数一个是flag,一个是flag的len。接下来就要对wasm进行分析。先使用开源项目wabt将hxp.wasm文件反编译成C文件hxp.c项目地址:wabt但是这c语言还是比较难理解,用gcc将其其编译成x86架构下的目标文件。gcc -c hxp.c -o hxp.o...

2020-01-01 21:56:19 428

原创 【pwn】ciscn_2019_es_2

例行检查分析程序,程序存在system函数,但是不能直接得到flag。vul函数中存在栈溢出,但只能溢出8个字节,只能盖到ebp和ret。vul函数中有两次read和printf第一次可以用来泄露ebp,得到栈地址,然后进行栈迁移。然后利用main函数返回时将控制流转到system。根据一下汇编代码布置栈数据。from pwn import *#io=process('ciscn...

2019-12-24 20:45:39 2754 5

原创 【pwn】roarctf_2019_easy_pwn

例行检查保护全开,分析程序。当edit大小比申请大小多10的时候可以多输入一字节,存在off-by-one。修改size来进行overlap。需要注意的是最后覆盖malloc_hook时,onegadget都不可用,应为栈条件不满足,可以利用realloc的trick来调整栈。参考:堆的六种利用手法from pwn import *io=remote('xx.xx.xx.xx',xx...

2019-12-24 10:26:18 2066

原创 【pwn】 ciscn_2019_final_3

例行检查保护全开,分析程序。add函数只能申请小于0x78大小的chunk,chunk数量不能超过24个,且题目给了申请到内存空间的地址。free函数free后指针没有置0,且libc是2.27的,存在tcache dup。唯一问题就在于如何得到libc的地址。泄露libc地址一般通过unsortbin,存在tcache的情况下,64位程序需要申请超过0x400大小chunk,fre...

2019-12-18 16:43:02 1684 2

原创 【re】 watevrCTF2019_Repyc

这题给了个pyc。先用uncompyle反编译成py。uncompyle6 3nohtyp.pyc >>sss.py打开,然后惊了。# uncompyle6 version 3.6.0# Python bytecode 3.6 (3379)# Decompiled from: Python 3.8.0 (default, Oct 23 2019, 18:51:26) # ...

2019-12-16 16:17:35 532

原创 【pwn】ciscn_2019_s_3

这题是全国大学生信息安全竞赛的一道线下半决赛题目,好像是华南赛区?例行检查。分析程序。vul函数两个系统调用,一个是sys_read,一个是sys_write,往栈上写数据(0x400),从栈上读数据(0x30),存在栈溢出。还有一个gadget函数。有两个值得注意的地方。mov rax,0fh 以及mov rax 59。这两个gadget控制了rax的值,看看这两个是什么系统调用...

2019-12-14 17:57:22 4468

原创 【pwn】 33c32016_babyfengshui

例行检查分析程序,注意到在输入内容的时候,输入限制是这样的。 if ( (char *)(v3 + *(_DWORD *)*(&ptr + a1)) >= (char *)*(&ptr + a1) - 4 ) { puts("my l33t defenses cannot be fooled, cya!"); exit(1); ...

2019-12-13 15:10:47 223

原创 【pwn】 3dsctf2016_get_started

例行检查file一下,发现是静态连接的,还没有Pie。分析程序发现是简单栈溢出,还有一个get_flag函数?于是直接返回到get_flag函数执行,但是远程没有打通,然后试了下本地可以打通,然后猜测可能是远程环境部署错了,没有flag.txt文件?然后试试别的方法。由于是静态链接里面函数还是很多的。1.mprotect,修改某地址为rwx,随后写入shellcode,然后getshel...

2019-12-12 20:32:25 263

原创 【pwn】 0ctf_2017_babyheap

例行检查保护全开。分析程序。在fill函数中存在溢出,通overlap,泄露libc。然后fastbin attack。from pwn import *io=remote('node3.buuoj.cn',27627)libc=ELF('./libc-2.23.so')def add(size): io.recvuntil('Command: ') io.send...

2019-12-11 17:12:51 592

原创 【pwn】SWPUCTF_2019_p1KkHeap

libc-2.27.so下的一道tcache堆题。例行检查保护全开。分析程序,在进入菜单之前,有一个函数跟入查看。注意到这边用mmap函数在0x66660000映射了一块大小为0x1000的内存空间,权限是rwx。然后用prctl函数做了一个沙箱。我们查看以下禁用了什么调用。可见execve被禁用,于是system函数和onegadget都不可行。于是就只能自己将shellcode(or...

2019-12-10 15:12:18 667

原创 【pwn】gwctf_2019_easy_pwn

例行检查分析程序,这个程序是c++写的。在往s中read的时候大小没有问题,但是程序在下面将字符"I"替换成了"pretty",最后在strcpy的时候发生了溢出,没有PIE和canary直接利用即可。from pwn import *io=remote('node3.buuoj.cn','27671')puts_plt=0x8048DC0puts_got=0x804C068main...

2019-12-09 18:39:23 896 1

原创 【Pwn】SWPUCTF_2019_login

例行查看程序保护。分析程序,最里面函数存在格式化字符串漏洞。但是格式化字符串不再栈上,而在bss段上,没办法直接任意地址读写,于是动态调试观察栈上数据。观察到fff65158指向fff65168,fff65168指向fff65178。那么就可以修改fff65168的内容,然后再观察栈上还有什么有用数据,注意到fff65160和fff65164的值离got表很近,于是想到可以修改这两个地方的后...

2019-12-09 16:00:24 1135 2

原创 【Pwn】NCTF2019 easy_rop

查看程序保护。分析程序,程序只有一个main函数。v6距离rbp为0x70,在输入数字的时候可以输34 * 4个字节的数,34*4-0x70=24,意味着可以溢出覆盖rbp,ret_address,以及返回地址下面的8个字节。main函数的old_rbp值实际上是代码段init的地址,返回地址位置是libc中的一个地址。scanf函数%d当输入为’+'时不会改变原内存中数据,于是可以来泄露代...

2019-12-03 17:58:52 1020

原创 【Pwn】2019安洵杯线上赛 Heap

一道常规的pwn题,查看程序保护。保护全开。分析程序发现bannar函数有格式化字符串漏洞,可以用来泄露代码段基址以及Libcdi地址,edit函数有一字节溢出,可以修改next chunk的size,且chunk指针存储在bss段上想到unlink。from pwn import *io=remote('xx.xx.xx.xx',xxxxx)libc=ELF('./libc-2.23...

2019-12-01 19:42:35 444

原创 【Pwn】2019安洵杯线上赛 fmt32 && fmt64

出题人好像比较喜欢blind pwn,5道pwn题里有3个,由于时间关系来不及看rop64了(我太菜)。1.fmt32只给了ip&port,没有附件猜测是blind pwn,根据题目名字,猜想有格式化字符串漏洞,试了一下发现是一个循环(毕竟是复读机),每次都可以利用格式化字符串漏洞,于是首先想法是先将内存dump下来再分析,如果32位程序没开pie保护,程序首地址为0x8048000。...

2019-12-01 19:19:57 1007

原创 【Pwn】NCTF2019 easy_heap

查看程序保护。分析程序,漏洞在free之后指针没置0,导致uaf;堆的分配大小做了限制0x50该变量在bss段上,刚好bss段上存放了用户名信息,所以先考虑在bss上伪造堆块,进行一次fastbinattack,分配到bss段,修改限制大小,去掉限制之后就是常规操作了,unsortbin泄露libc,再进行一次fastbinattack,getshell。from pwn import *...

2019-11-29 18:37:34 549

原创 【Pwn】NCTF2019 pwn me 100 years! (Ⅲ)

main函数首先创建了一个0x10大小的堆块,最后如果这个堆块的值为0x66666666那么执行/bin/sh。那么想办法分配到这块内存空间即可。看看中间的菜单,找到漏洞在edit函数中,read为固定的0x20个字节,由于最小堆块的大小是0x10,共享pre_size的8个字节,0x10和0x18分配的大小都是0x10字节,所以存在0x10个字节的溢出,但是0x10大小的字节只能覆盖到...

2019-11-28 15:16:35 8007

原创 Pwn题中修改程序连接库的方法

做Pwn的时候有时候会遇到题目的环境和本地环境不一致的情况。如果要装和远程环境相同的虚拟机就会比较麻烦,下面可以通过修改binary动态连接库的方法,强行让程序链接到与远程环境相同的库上。1.首先下载好和远程环境相同的动态库,如libc-2.23.so;然后下载与之相符的链接器ld-2.23.so。有两个项目可以实现自动下载 libc:https://github.com/niklasb/lib...

2019-11-28 12:47:05 1683 5

原创 【Re】 HomuraVM

南邮Homura师傅出的一个虚拟机的题目。比较关键的函数。这里根据程序内部的指令序列,进行dispatch,每个字符对应一个代码片段,这边我是看汇编分析的,将每个片段的功能分析了一下,把反调试patch后,稍微动态调一下,还是比较简单就能分析出来。h: ptr+4 (指向输入的下一个字符)o: ptr- 4 (指向前一个字符)u: input[ptr]-1m:input[ptr]+1...

2019-11-20 21:21:31 305

原创 格式化字符串总结

0x00 原理通过控制格式化字符串,可以进行任意地址读和任意地址写。0x01 任意地址读先测试需要泄露的地址在栈上的位置,假设位置是??。任意地址读可将格式化字符串控制为:p64(泄露地址)+"%??$s"0x02 任意地址写先测试需要修改的地址在栈上的位置,假设位置是??。由于远程一次能传的字符有限,所以一般使用hhn(覆盖一个字节),hn(覆盖两个字节)。假设将某word覆盖为2...

2019-11-17 16:11:34 415

原创 jjencode&&aaencode类似js编码原理探究

$$=1;$=[($+"_")[$$+!+[]+$$]+($+"_")[$$+!+[]+$$+$$+!+[]+$$]+($+"_")[$$+!+[]+$$+$$+!+[]+$$+$$]+(($$==$)+"_")[$$+!+[]+$$]+(($$==$$)+"_")[$$-!+[]]+(($$==$$)+"_")[$$]+(($$==$$)+"_")[$$+!+[]]+($+"_")[$$+!+[...

2019-11-02 22:59:05 2497 3

原创 (Jarvis Oj)(Pwn) fm

(Jarvis Oj)(Pwn) fm查看保护。 ida查看程序逻辑。 第12行,很明显的格式化字符串漏洞,当全局变量x的值是4的时候会执行system函数,查看x的值。 x的值是3。所以就要利用格式化字符串漏洞的任意地址读写,“x_addr%[i]$n”,%n可以将已经输出的字符个数写入到指定的参数中,这个格式化字符串会在栈上的某处,需要定位x_addr作为printf的第...

2018-06-18 13:08:55 1235

原创 (Jarvis Oj)(Pwn) Guess

(Jarvis Oj)(Pwn) Guess查看保护。没开什么保护。 丢到ida中查看程序逻辑。前面不用看,找到handle函数。 可以看到输入是用fget函数处理的,限制了输入的长度,所以不好溢出。再看看flag_correct( )函数。 在nc连远程服务器的时候也提示说,要将flag先encode成hex,所以50个字符的flag就成了100个字符,程序首先判断长度是否...

2018-06-17 17:46:59 579

原创 (Jarvis Oj)(Pwn) Smashes

(Jarvis Oj)(Pwn) Smashes查看保护。打开了栈保护。看上去有点麻烦。 再来分析下程序代码。如下是主要的函数体部分。 这个函数首先让我们输入name字符串,通过gets()函数,是有溢出的,但是在输入过长的字符串时程序会abort。 并且提示 ./smashes terminated 这里其实是ssp(Stack Smashing Protector)的提示...

2018-06-14 15:53:10 2373 2

原创 (Jarvis Oj)(Pwn) Tell Me Something

(Jarvis Oj)(Pwn) Tell Me Something首先查看程序开的保护。基本什么都没有。 丢到ida中,主函数。 然后发现了good_game函数。 这个函数的用途就显而易见了,输出目录下的”flag.txt”文件。于是利用read函数导致的栈溢出,将返回地址覆盖为good_game函数的地址。通过ida或者cyclic工具可以获得需要的填充的长度。写得脚本...

2018-06-14 11:30:25 975 3

原创 iscc_obfuscation and encode

iscc_obfuscation and encode没事做了一道iscc的逆向题,题目还是有点意思的。首先ida反汇编。 发现有两个关键的函数fencode()和encode(),输入的字符串通过这两个函数,最后转换成s1与字符串”lUFBuT7hADvItXEGn7KgTEjqw8U5VQUq”进行比较。先进入到fencode()里看一看。 打开之后惊了,数了一下大概11层循环...

2018-05-15 22:08:49 753

原创 (Jarvis Oj)(Pwn) level5

(Jarvis Oj)(Pwn) level5题目描述:mmap和mprotect练习,假设system和execve函数被禁用,请尝试使用mmap和mprotect完成本题。附件和level3_x64的附件一样。 首先去看看这个mmap函数和mprotect函数是干啥的。 void* mmap(void* addr, size_t len, int port, int flag, int...

2018-05-03 12:21:41 2021

原创 (Jarvis Oj)(Pwn) level4

(Jarvis Oj)(Pwn) level4先看一下保护措施,没什么奇怪的地方。 这次并没有给libc的文件,开始通过泄露得到的__libc_start_main地址对照libc库,并没有成功。于是就学了一波DynELF,这个模块的原理还是不太清楚(玄学),以后来填。总之利用这个模块可以找到system的地址,但是找不到”/bin/sh”这个字符串位置,但是我们可以控制read函数,所...

2018-05-01 20:43:57 1130

原创 (Jarvis Oj)(Pwn) level3_x64

(Jarvis Oj)(Pwn) level3_x64这题是level3的64位版本,思路和32位版本一致,不同之处就是函数的参数传递,利用寄存器,于是构造rop链。写得脚本如下: from pwn import * ...

2018-04-24 21:00:47 937

原创 (Jarvis Oj)(Pwn) level3

(Jarvis Oj)(Pwn) level3首先用checksec查看一下保护。 依然开启了NX保护。ida反汇编,找到溢出点。 可是呢,这次在程序中并没有找到system函数,和”/bin/sh”字符串,那么这次该如何拿到shell呢,还是利用system函数,但是没有程序中system的plt,我们如何获取system的地址呢,这需要利用到在libc.so文件中各个函数的相对...

2018-04-24 19:40:15 1641

原创 (Jarvis Oj)(Pwn) level2(x64)

(Jarvis Oj)(Pwn) level2(x64)首先用checksec查一下保护,和level2一样。 反汇编,程序和32位的程序几乎一致。找到溢出点。 那么溢出思路也和32位的差不多,唯一不同的是,64位程序在调用system函数时,参数的传递方式和32位不一样,32位是通过栈传参,而64位通过edi寄存器传参,所以这时我们的思路变成如何覆盖edi的值,通过基本rop就可...

2018-04-19 17:53:15 1397 2

AIS3 2017 Binary Exploitation

主要用于学习pwn的二进制安全,缓冲区溢出技术,栈溢出,堆溢出等

2018-04-15

Q版缓冲区溢出教程

本书定位于初学缓冲区溢出利用的读者;并照顾想学习缓冲区溢出技术的朋友。 本书的目的是用幽默的语言和通俗的解释,对 Windows 缓冲区溢出编程的思路和思维进行详细分析; 并用大量实例对溢出的实际利用进行一次又一次详尽的讲解。本书没有枯燥的、大段汇编代码的解释;没有复杂的、Windows 系统结构的定义,阅读起来不会有混 混欲睡的乏味感!

2018-04-12

空空如也

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

TA关注的人

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