<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Nothing]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/github_36788573</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; github_36788573]]></copyright><item><title><![CDATA[【pwn】未知libc版本利用的一个蠢方法]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/108063060</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/108063060</guid><author>github_36788573</author><pubDate>Mon, 17 Aug 2020 20:31:47 +0800</pubDate><description><![CDATA[前几天看了一道题，题目本身还是比较常规的，这题的预期解法是通过_dl_runtime_resolve来做的。但我就是想用栈溢出+栈迁移碰一碰，整了半天就差onegadget地址了，查了一下libc search发现找不到对应的版本，可能出题人就是想用一个比较偏的libc版本把这条路封死，但我最后还是硬怼出来了。以后如果遇到了数据库中找不到对应的libc版本的时候可以尝试一下这种方法（当然ctf题中一般不会出个很偏的libc版本）。
条件：1.libc中的一个任意地址(通过泄露got表就可得到)。2.可以通过]]></description><category></category></item><item><title><![CDATA[【pwn】WMCTF2020 cfgo-CheckIn]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/107760962</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/107760962</guid><author>github_36788573</author><pubDate>Mon, 03 Aug 2020 12:24:39 +0800</pubDate><description><![CDATA[拿到二进制后先解UPX，解完后发现程序还是很复杂，发现是cgo，做题的时候不知道有没有这种的插件支持，问了下做逆向的队友，似乎插件版本没有更新到这个版本，静态分析没有进展，先看看远程服务是跑啥的。

一个迷宫，走到旗子的位置就行了，一共100关，一波深搜就行了，解决了100关后出现了。

在二进制中搜索字符串无果，就当blind pwn做了，输入name后程序就退出了，可能存在的漏洞格式化字符串以及溢出，尝试发现没有格式化字符串漏洞，然后尝试溢出。当输入了0x78个字符后发现出现了报错信息。这里报错信息还是]]></description><category></category></item><item><title><![CDATA[【pwn】oooorder]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/107006851</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/107006851</guid><author>github_36788573</author><pubDate>Mon, 29 Jun 2020 10:01:25 +0800</pubDate><description><![CDATA[端午节看了dasctf的一个pwn题，学了一个新的姿势。
例行检查

分析程序
这是个堆的菜单题，并且用了seccomp进行保护，禁用了execve。这时候一般想法是orw直接将flag写出来。但是堆的题禁用了这个还是比较麻烦的，因为堆的题无法对栈进行控制就不能进行rop，这个先放一放，先进行堆利用。
漏洞是在edit中，其中使用的了realloc，当size为0的时候，realloc会free掉这个块，执行两次可以造成tcache dup,这里可以泄露堆地址，第一次任意地址分配可以分配到一个unsortb]]></description><category></category></item><item><title><![CDATA[【pwn】 [极客大挑战 2019]Not Bad]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/104780509</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/104780509</guid><author>github_36788573</author><pubDate>Tue, 10 Mar 2020 18:53:46 +0800</pubDate><description><![CDATA[例行检查

开了沙箱

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

那么就可以在buf上布置read以...]]></description><category></category></item><item><title><![CDATA[【pwn】 hitcontrain_bamboobox   &&   ZJCTF_19_EasyHeap]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/104696070</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/104696070</guid><author>github_36788573</author><pubDate>Fri, 06 Mar 2020 14:58:51 +0800</pubDate><description><![CDATA[这两个题目类似，放在一起写。
例行检查

没有pie，got表可写。
程序逻辑
edit功能都存在堆溢出，堆指针都保存在bss段上，可以通过unlink对got表进行读写。本来两个程序都存在后门，但是oj在部署的时候路径有点问题，所以就想办法获取shell。
bamboobox存在show功能，可以泄露libc地址。
easyheap刚好程序中存在system函数。
bamboobox
from ...]]></description><category></category></item><item><title><![CDATA[【pwn】 ciscn_2019_s_4]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/104692013</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/104692013</guid><author>github_36788573</author><pubDate>Fri, 06 Mar 2020 11:18:29 +0800</pubDate><description><![CDATA[main函数，存在八个字节溢出，栈迁移，第一次泄露ebp，得到栈上buf地址，迁移到buf即可。
from pwn import *

io=remote('node3.buuoj.cn',28060)

leave=0x8048562
sys_plt=0x8048400

pl1='a'*0x24+'bbbb'
io.send(pl1)
io.recvuntil('bbbb')
ebp=u32(...]]></description><category></category></item><item><title><![CDATA[【pwn】 roarctf_2019_realloc_magic]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/104668805</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/104668805</guid><author>github_36788573</author><pubDate>Thu, 05 Mar 2020 10:24:43 +0800</pubDate><description><![CDATA[例行检查
保护全开，分析程序逻辑。发现没有输出堆内容的函数，想要泄露libc地址只能通过修改IO_FILE结构体实现。realloc函数有两个trick。在size为0时，free掉指针指向的堆块，返回0；在分配超过当前指针指向堆块大小时如果有剩余空间则扩大堆块大小。
利用思路
1.堆块free 8次放进unsortbin中，在fd上得到arena地址，通过realloc扩大堆块的特性造成堆块堆叠...]]></description><category></category></item><item><title><![CDATA[【pwn】 gyctf_2020_borrowstack]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/104614956</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/104614956</guid><author>github_36788573</author><pubDate>Mon, 02 Mar 2020 17:03:17 +0800</pubDate><description><![CDATA[例行检查
程序逻辑

看到buf缓冲区有0x10大小溢出，且可以控制bss段上的bank，可以用栈迁移做，这题的bss段离got表较近，在迁移时尽量往高地址迁移，防止在rop时破坏got表上数据。
from pwn import *

io=remote('node3.buuoj.cn','29302')

bank=0x0601080
leave=0x400699
puts_plt=0x0400...]]></description><category></category></item><item><title><![CDATA[【pwn】 cmcc_simplerop]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/104512306</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/104512306</guid><author>github_36788573</author><pubDate>Wed, 26 Feb 2020 10:51:25 +0800</pubDate><description><![CDATA[例行检查

ida打开二进制文件发现是静态链接的32位程序。main函数中存在溢出。用ROPgadget查找文件中的gadget。
ROPgadget --binary ./simplerop --only 'pop|ret' &gt;&gt; 1.txt

得到

发现存在
pop eax;ret
pop edx;pop ecx;pop ebx;ret
这些就足够了，给寄存器赋值再用int 80...]]></description><category></category></item><item><title><![CDATA[【Re】36C3CTF xmas_future]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103795899</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103795899</guid><author>github_36788573</author><pubDate>Wed, 01 Jan 2020 21:56:19 +0800</pubDate><description><![CDATA[这是一道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

...]]></description><category></category></item><item><title><![CDATA[【pwn】ciscn_2019_es_2]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103689296</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103689296</guid><author>github_36788573</author><pubDate>Tue, 24 Dec 2019 20:45:39 +0800</pubDate><description><![CDATA[例行检查
分析程序，程序存在system函数，但是不能直接得到flag。

vul函数中存在栈溢出，但只能溢出8个字节，只能盖到ebp和ret。vul函数中有两次read和printf第一次可以用来泄露ebp，得到栈地址，然后进行栈迁移。然后利用main函数返回时将控制流转到system。
根据一下汇编代码布置栈数据。


from pwn import *

#io=process('ciscn...]]></description><category></category></item><item><title><![CDATA[【pwn】roarctf_2019_easy_pwn]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103674651</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103674651</guid><author>github_36788573</author><pubDate>Tue, 24 Dec 2019 10:26:18 +0800</pubDate><description><![CDATA[例行检查
保护全开，分析程序。

当edit大小比申请大小多10的时候可以多输入一字节，存在off-by-one。修改size来进行overlap。需要注意的是最后覆盖malloc_hook时，onegadget都不可用，应为栈条件不满足，可以利用realloc的trick来调整栈。
参考：堆的六种利用手法
from pwn import *

io=remote('xx.xx.xx.xx',xx...]]></description><category></category></item><item><title><![CDATA[【pwn】 ciscn_2019_final_3]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103599951</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103599951</guid><author>github_36788573</author><pubDate>Wed, 18 Dec 2019 16:43:02 +0800</pubDate><description><![CDATA[例行检查
保护全开，分析程序。
add函数

只能申请小于0x78大小的chunk，chunk数量不能超过24个，且题目给了申请到内存空间的地址。
free函数

free后指针没有置0，且libc是2.27的，存在tcache dup。唯一问题就在于如何得到libc的地址。泄露libc地址一般通过unsortbin，存在tcache的情况下，64位程序需要申请超过0x400大小chunk，fre...]]></description><category></category></item><item><title><![CDATA[【re】 watevrCTF2019_Repyc]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103564199</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103564199</guid><author>github_36788573</author><pubDate>Mon, 16 Dec 2019 16:17:35 +0800</pubDate><description><![CDATA[这题给了个pyc。先用uncompyle反编译成py。
uncompyle6 3nohtyp.pyc &gt;&gt;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) 
# ...]]></description><category></category></item><item><title><![CDATA[【pwn】ciscn_2019_s_3]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103541178</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103541178</guid><author>github_36788573</author><pubDate>Sat, 14 Dec 2019 17:57:22 +0800</pubDate><description><![CDATA[这题是全国大学生信息安全竞赛的一道线下半决赛题目，好像是华南赛区？
例行检查。
分析程序。
vul函数

两个系统调用，一个是sys_read，一个是sys_write，往栈上写数据（0x400），从栈上读数据（0x30），存在栈溢出。
还有一个gadget函数。

有两个值得注意的地方。mov rax,0fh 以及mov rax 59。这两个gadget控制了rax的值，看看这两个是什么系统调用...]]></description><category></category></item><item><title><![CDATA[【pwn】 33c32016_babyfengshui]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103527495</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103527495</guid><author>github_36788573</author><pubDate>Fri, 13 Dec 2019 15:10:47 +0800</pubDate><description><![CDATA[例行检查
分析程序，注意到在输入内容的时候，输入限制是这样的。
    if ( (char *)(v3 + *(_DWORD *)*(&amp;ptr + a1)) &gt;= (char *)*(&amp;ptr + a1) - 4 )
    {
      puts("my l33t defenses cannot be fooled, cya!");
      exit(1);
   ...]]></description><category></category></item><item><title><![CDATA[【pwn】 3dsctf2016_get_started]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103515713</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103515713</guid><author>github_36788573</author><pubDate>Thu, 12 Dec 2019 20:32:25 +0800</pubDate><description><![CDATA[例行检查
file一下，发现是静态连接的，还没有Pie。
分析程序发现是简单栈溢出，还有一个get_flag函数？于是直接返回到get_flag函数执行，但是远程没有打通，然后试了下本地可以打通，然后猜测可能是远程环境部署错了，没有flag.txt文件？
然后试试别的方法。
由于是静态链接里面函数还是很多的。
1.mprotect，修改某地址为rwx，随后写入shellcode，然后getshel...]]></description><category></category></item><item><title><![CDATA[【pwn】 0ctf_2017_babyheap]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103495966</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103495966</guid><author>github_36788573</author><pubDate>Wed, 11 Dec 2019 17:12:51 +0800</pubDate><description><![CDATA[例行检查
保护全开。
分析程序。在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...]]></description><category></category></item><item><title><![CDATA[【pwn】SWPUCTF_2019_p1KkHeap]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103475238</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103475238</guid><author>github_36788573</author><pubDate>Tue, 10 Dec 2019 15:12:18 +0800</pubDate><description><![CDATA[libc-2.27.so下的一道tcache堆题。
例行检查
保护全开。
分析程序，在进入菜单之前，有一个函数跟入查看。
注意到这边用mmap函数在0x66660000映射了一块大小为0x1000的内存空间，权限是rwx。然后用prctl函数做了一个沙箱。我们查看以下禁用了什么调用。
可见execve被禁用，于是system函数和onegadget都不可行。于是就只能自己将shellcode（or...]]></description><category></category></item><item><title><![CDATA[【pwn】gwctf_2019_easy_pwn]]></title><link>https://blog.youkuaiyun.com/github_36788573/article/details/103463024</link><guid>https://blog.youkuaiyun.com/github_36788573/article/details/103463024</guid><author>github_36788573</author><pubDate>Mon, 09 Dec 2019 18:39:23 +0800</pubDate><description><![CDATA[例行检查
分析程序，这个程序是c++写的。在往s中read的时候大小没有问题，但是程序在下面将字符"I"替换成了"pretty"，最后在strcpy的时候发生了溢出，没有PIE和canary直接利用即可。
from pwn import *

io=remote('node3.buuoj.cn','27671')
puts_plt=0x8048DC0
puts_got=0x804C068
main...]]></description><category></category></item></channel></rss>