<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[BengDouLove的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/BengDouLove</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; BengDouLove]]></copyright><item><title><![CDATA[Pikachu漏洞练习平台----验证码绕过(on server) 的深层次理解]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/126320814</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/126320814</guid><author>BengDouLove</author><pubDate>Sat, 13 Aug 2022 23:03:06 +0800</pubDate><description><![CDATA[对于Pikachu平台 验证码绕过(on server)一题的深层次理解和与之对应的网站代码知识的分析。]]></description><category></category></item><item><title><![CDATA[2020 5space pwn题 twice]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/107326813</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/107326813</guid><author>BengDouLove</author><pubDate>Mon, 13 Jul 2020 23:37:57 +0800</pubDate><description><![CDATA[好久好久没有写博客了，刚放暑假希望自己能抓紧学学吧   -_-
6月24号比的赛，现在才想起来写总结，最近痴迷于想扣篮，一直在打球也没有很努力在学习。。。
一场比赛只出来这么一道题，不过也行了，最近一直没有学pwn，还能记得是真不错。。。

主函数就是一个循环，nCount是主要参数，  InitData函数无关紧要，，点进去 sub4007A9函数看一看

这里的形参 a1 就是 nCount 传进来的，是一开始那个循环的计数器，所以初始值为0
后面就有点看不懂了，所以点进去 sub_400760函数 看]]></description><category></category></item><item><title><![CDATA[de1ctf_2019_weapon (IO_FILE)]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/106390373</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/106390373</guid><author>BengDouLove</author><pubDate>Wed, 27 May 2020 22:36:19 +0800</pubDate><description><![CDATA[这道题的方法对于我来说有点陌生，堆操作之后利用IO_FILE的相关知识，记录一下，以后还会有更多对于 IO 的利用

保护机制全开，所以常规方法肯定没办法
分析程序：

这是主程序

menu函数

create函数
逻辑是输入申请大小，在输入index，然后就写入chunk
没有任何检查，比如申请过的index不能用之类的
最简洁的申请函数

delete函数
同样是简洁的释放函数，而且有 uaf 漏洞

rename函数
改写chunk内容，写入的时候貌似没有溢出，但是 uaf 能用在这上面

程序看似]]></description><category></category></item><item><title><![CDATA[2020网鼎杯 逆向 joker]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/106064098</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/106064098</guid><author>BengDouLove</author><pubDate>Mon, 11 May 2020 23:22:50 +0800</pubDate><description><![CDATA[这么看又是一道猜密码的题

ida看着有些问题，同学说要栈修复，我做的逆向少不知道是啥。。。所以就看的汇编
往下看到这里，有了 scanf ，所以就是要输入字符串，之后进行 strlen 函数，然后看到cmp那一句，与 0x18 比较，
所以字符串大小必须是 0x18 大小，也就是 24
而且注意到我们输入的字符串存在了 [ebp+var_96] 这个位置

这里能看到，输入的大小不是24就输出 Wrong
之后往下走，能看到 [ebp+var_96] 传给eax，然后依次传给 wrong 函数,和 om.]]></description><category></category></item><item><title><![CDATA[2020网鼎杯 逆向 signal]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/106054174</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/106054174</guid><author>BengDouLove</author><pubDate>Mon, 11 May 2020 16:12:00 +0800</pubDate><description><![CDATA[先分析一下程序


main函数进来是这样，__main()好像没什么用，之后把 0x403040位置的东西复制到v4变量，之后vm_operad函数又将v4传了进去。
先看一下 0x403040 位置是什么

是很多四字节为单位的数，之后会用到

进去 vm_operad 函数之后可以看见，之前传进来的 v4 现在是 a1 ,也就是 0x403040那个位置的数用a1来表示


粗略的看一下，有 what a shame 这样的字符串，所以应该是要比较字符

再仔细分析程序，switch 这里用的参数是 ]]></description><category></category></item><item><title><![CDATA[BUUCTF pwnable_start]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105875236</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105875236</guid><author>BengDouLove</author><pubDate>Fri, 01 May 2020 11:27:14 +0800</pubDate><description><![CDATA[程序只有这么点代码，稍微分析一下

esp入栈，返回地址入栈（这里直接返回到exit函数，就退出程序了）

清空四个寄存器

这些东西被入栈，不知道是什么，往下看

这里调用了write函数，在汇编当中调用write函数的形式和寄存器是这样的
wtite ( fd , addr , length )   三个参数对应的寄存器为  ebx   ecx    edx
将esp赋值给了ecx，说明要打...]]></description><category></category></item><item><title><![CDATA[BUUCTF jarvisoj_guess]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105695351</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105695351</guid><author>BengDouLove</author><pubDate>Wed, 22 Apr 2020 23:51:09 +0800</pubDate><description><![CDATA[博文1
博文2
首先这是我看的两个wp，第一个博主讲的很多



main函数里面对我来说有一些难点，就是socket编程，正在学计网，到学期后半段可能会有写socket编程的作业，先了解一下
SOCKET


看到这里就能看出，程序里面也用到了其中一个结构  sockaddr_in

这个结构就是保存socket的信息的



这是地址族，看不太懂，可能和这道题没太大关系，堆在这用到的时候看一下...]]></description><category></category></item><item><title><![CDATA[BUUCTF gyctf_2020_borrowstack]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105676078</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105676078</guid><author>BengDouLove</author><pubDate>Wed, 22 Apr 2020 10:52:12 +0800</pubDate><description><![CDATA[第一个read的只能溢出0x10字节，也就是刚好覆盖返回地址，如果要ROP地方肯定不够
所以栈迁移到bank，在那里ROP
之前没遇到过这样的题，怎么迁过去我苦思冥想，最终还是看了wp，，用两个leave来控制rsp和rbp寄存器，太妙了
leave是个伪代码，，分解开就是
mov rsp,rbp
pop rbp
如果把栈构造成这样

‘A’ * 0x60

bank_addr

leave_...]]></description><category></category></item><item><title><![CDATA[BUUCTF  [V&N2020 公开赛]simpleHeap]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105566015</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105566015</guid><author>BengDouLove</author><pubDate>Fri, 17 Apr 2020 00:13:10 +0800</pubDate><description><![CDATA[保护机制全开的程序，也无法利用got表，，只能覆盖 malloc_hook  或者  free_hook

堆的题要好好分析代码 T T

1.add
sub_AB2 是到heap_got （储存堆指针的表）里面找第一个空着的堆序号返回给v1，没有可用的就返回-1，最多申请10个堆
之后输入堆的大小，最大是 111，也就是0x6F，，加上chunk头是0x7F ，也就是申请的堆只能fastbin...]]></description><category></category></item><item><title><![CDATA[BUUCTF  axb_2019_fmt32]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105565250</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105565250</guid><author>BengDouLove</author><pubDate>Thu, 16 Apr 2020 20:06:27 +0800</pubDate><description><![CDATA[主程序就是这样的，能看到有一个printf的格式化字符串漏洞
sprintf  相当于把参数替换了之后的格式化字符串送入了第一个参数，也就是format
首先，没有后门也没有系统函数，要用格式化字符串泄露出牟哥libc函数，来获得libc基址
然后，仔细算一下 s  和  format 两个参数，都没有溢出，，也没有函数能写进got表，，所以还是再次利用格式化字符串漏洞通过%n来写入数据
先看...]]></description><category></category></item><item><title><![CDATA[BUUCTF  [V&N2020 公开赛]warmup]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105520786</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105520786</guid><author>BengDouLove</author><pubDate>Tue, 14 Apr 2020 21:21:35 +0800</pubDate><description><![CDATA[sub_80A函数进去是初始化设置缓冲区没啥用
sub_84D进去是这样的


进去之后一大堆变量。。。不太想看，，就挑重点的吧
这个prctl 函数简单来说也是设置了沙箱规则

#include &lt;sys/prctl.h&gt;

int prctl(int option, unsigned long arg2, unsigned long arg3, unsigned long ar...]]></description><category></category></item><item><title><![CDATA[BUUCTF cmcc_simplerop]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105509246</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105509246</guid><author>BengDouLove</author><pubDate>Tue, 14 Apr 2020 12:37:07 +0800</pubDate><description><![CDATA[这道题打开ida又是那么一大堆一大堆的函数，也没有外部引用的段，所以就是静态链接把好多函数都链接进来了
所以就和 BUU上另一道 inndy_rop 一样，直接用ROPgadget 去找rop链
    from struct import pack

	# Padding goes here
	p = ''

	p += pack('&lt;I', 0x0806e82a) # pop edx ...]]></description><category></category></item><item><title><![CDATA[BUUCTF pwnable_orw]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105478649</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105478649</guid><author>BengDouLove</author><pubDate>Sun, 12 Apr 2020 23:09:30 +0800</pubDate><description><![CDATA[这道题又是一道seccomp，，这个orw_seccomp函数里面说的傻我看不懂。。。
反正根据套路肯定还是不能用system，，还是通过  open,read,write,来泄露flag文件
写这种shellcode写的方法一个是直接汇编   或者   可以用pwntools里面带的shellcraft
pwntools官方文档
其他的没啥可说的，看一下代码
shellcraft:
#cod...]]></description><category></category></item><item><title><![CDATA[BUUCTF  [V&N2020 公开赛]babybabypwn]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105442923</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105442923</guid><author>BengDouLove</author><pubDate>Fri, 10 Apr 2020 23:14:05 +0800</pubDate><description><![CDATA[先看一下，，所有保护机制都开启了

进入main的第二个函数，里面是这一堆东西
查了一下这个是沙盒机制，seccomp ，，这个seccomp_rule_add函数是给这个沙盒添加规则，意思是这个函数不能调用
这个函数的第三个参数，是代表函数的number，，别的不太清楚，网上也没有查到。。但是 59号代表的是execve函数
所以这个函数不能被调用，，也就是说无法得到系统权限了（吧）
所以这样...]]></description><category></category></item><item><title><![CDATA[BUUCTF  hitcontraining_uaf]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105412725</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105412725</guid><author>BengDouLove</author><pubDate>Thu, 09 Apr 2020 16:25:19 +0800</pubDate><description><![CDATA[这是我第一次自己做出来的堆题，，????动

没什么特别，，看一看代码


还是一个堆块管理系统，不过这次他管理的时候有些不一样

1.add
不一样就在这里，，如果要创建一个用户数据，，先malloc一个八字节的指针堆块（我这么叫。。里面放着指针），，这八字节，前四个字节是一个pirnt_note_content函数，，这个函数的作用是以他后面相邻四个字节的数据为指针，打印这个指针里面的内容；；；申请...]]></description><category></category></item><item><title><![CDATA[BUUCTF  bjdctf_2020_babyrop 1 和 2]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105411972</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105411972</guid><author>BengDouLove</author><pubDate>Thu, 09 Apr 2020 15:52:15 +0800</pubDate><description><![CDATA[这两个rop其实是差不多的，第二个比第一个多了一个canary
先看一下第一个
bjdctf_2020_babyrop1


init里面两个puts

vul里面一个puts一个read
没有system和binsh ，要泄露libc，但是现在没有可以控制的输出手段，，所以要通过read，，覆盖返回地址为puts，，构造参数让puts输出libc的函数

这是网上别人的做法，，首先到pop rd...]]></description><category></category></item><item><title><![CDATA[BUUCTF [ZJCTF 2019]EasyHeap]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105391153</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105391153</guid><author>BengDouLove</author><pubDate>Wed, 08 Apr 2020 19:26:05 +0800</pubDate><description><![CDATA[Partial RELRO 那说明got表可写，可以通过改写got表为想要的函数，堆通常的利用方法

还是老样子，一个堆块管理系统，main函数太长了不放了，就是根据你的输入选择操作
值得一提的是有个这个


这个函数能dedaoflag吗？？一会再说，反正system是有了，不用泄露libc了
1.create

可以看到，堆块最多有十个，，还是用了一张表维护着堆块的指针，，这样就让人想把这个...]]></description><category></category></item><item><title><![CDATA[pwnable.kr uaf（c++类/虚函数的了解）]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105361760</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105361760</guid><author>BengDouLove</author><pubDate>Tue, 07 Apr 2020 13:32:05 +0800</pubDate><description><![CDATA[连进去有三个文件
#include &lt;fcntl.h&gt;
#include &lt;iostream&gt;
#include &lt;cstring
#include &lt;cstdlib&gt;
#include &lt;unistd.h&gt;
using namespace std;

class Human{
private:
        virtual void gi...]]></description><category></category></item><item><title><![CDATA[pwnable.kr  asm （open函数的探究）]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105344496</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105344496</guid><author>BengDouLove</author><pubDate>Mon, 06 Apr 2020 15:41:26 +0800</pubDate><description><![CDATA[这其实是一道挺简单的题，会用pwntools写shellcode就行了，不过里面有一个小点，网上别的文章从没有人提过，前两天学校有人讲座讲了这道题，然后也讲错了。。。不求甚解也得看情况。。

连上去，然后ls发现有这么几个文件，，
这是asm.c
#include &lt;stdio.h&gt;
#include &lt;string.h&gt;
#include &lt;stdlib.h&gt;...]]></description><category></category></item><item><title><![CDATA[攻防世界 4-ReeHY-main-100]]></title><link>https://blog.youkuaiyun.com/BengDouLove/article/details/105243757</link><guid>https://blog.youkuaiyun.com/BengDouLove/article/details/105243757</guid><author>BengDouLove</author><pubDate>Wed, 01 Apr 2020 15:06:09 +0800</pubDate><description><![CDATA[本来想着做2018年的网鼎杯 pwn的，但是就算看了 wp也无法模仿着实现，所以就退而求其次先做一些堆的题吧
18年网鼎杯的pwn有个babyheap，里面用到的unlink我一直不懂，断链是知道咋实现的，但是到底有啥用真是不做题无法体会
然后在攻防世界找了一个pwn题，就是这道题，看了一个肥肠肥肠细致的博主的文章，收获颇多
传送门
下面我就记录一下，题的思路大致和这个博主一样，后面我自己发挥了一...]]></description><category></category></item></channel></rss>