![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
BUUCTF刷题记录
文章平均质量分 63
Angel~Yan
这个作者很懒,什么都没留下…
展开
-
[BUUCTF]PWN——ciscn_2019_es_1
ciscn_2019_es_1装了一个ubuntu18.04的机子,终于可以做2.27的题目了例行检查,64位程序,保护全开本地运行一下程序,经典的堆体菜单64位ida载入,看一下各个选项的函数原创 2021-07-20 19:27:26 · 1379 阅读 · 2 评论 -
[BUUCTF]Reverse——[WUSTCTF2020]funnyre
[WUSTCTF2020]funnyreELF文件,无壳,用ida64打开,程序没法f5,从程序入口点找到main函数的汇编部分因为这边没有创建函数,所以无法f5在选取汇编部分打算创建函数的过程中发现了不对劲的地方jz和jnz跳转到同一地址,花指令,nop掉,然后那个call看着也不太对的样子,先也nop掉,call下面的那条jz也nop掉。经过多次测试,要从第一条jz指令nop到xor eax,eax之前一共有4处需要修改nop掉,修改完后,发现一共有两端函数没有创建,拿一处说一原创 2021-07-13 18:02:08 · 1361 阅读 · 1 评论 -
[BUUCTF]Reverse——[CFI-CTF 2018]IntroToPE
[CFI-CTF 2018]IntroToPE例行检查,发现是 .NET逆向运行一下,看看大概的情况让我们输入密码,点击validate会检查密码是否正确.net逆向用dnSpy打开,在左侧,找到程序名的目录 ,就能找到程序的关键代码了找到绑定在validate按键上的代码,它是button控件检验flag2,flag2的值由flag赋予,flag的值与validatePasswd.verifyPasswd()函数有关看一下validatePasswd.verifyPasswd();原创 2021-07-12 16:12:18 · 426 阅读 · 0 评论 -
[BUUCTF]Reverse——特殊的 BASE64
特殊的 BASE64无壳儿,直接用ida打开 ,习惯性的检索程序里的字符串根据题目这道题应该是道变种的base64,在字符串列表里也看到了base64加密后的字符串,只是这个密码表跟常见的有点不大一样,常见的base64的密码表应该是ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/而这题的看到的类似密码表的字符串是AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYy原创 2021-07-12 15:42:24 · 2744 阅读 · 0 评论 -
[BUUCTF]PWN——qctf2018_stack2
qctf2018_stack2例行检查 ,32位程序,开启了canary和nx保护本地运行一下,看看大概的情况32位ida载入,检索字符串发现了后门main函数太长了,贴一下关键部分,漏洞点在修改v13数组里的值。利用数组越界漏洞去修改ret,将ret修改成backdoor即可。一开始我想当然的认为偏移是0x70+4,但是实际利用的时候发现不对。动调找一下吧我输入的数据是12,存储在了0xffffcf38处,v13数组的地址找一下函数结束的时候esp的地址相差0原创 2021-04-12 18:58:33 · 589 阅读 · 1 评论 -
[BUUCTF]PWN——[BSidesCF 2019]Runit(mmap+shellcode)
[BSidesCF 2019]Runit例行检查,32位程序,开启了nx保护运行一下看看大概的情况ida载入虽然开了nx,但是buf用mmap映射了地址,可读可写可执行,直接传入shellcode,15行调用了buf,运行shellcode获取shell。expfrom pwn import *p=remote("node3.buuoj.cn",25055)context.arch="i386"shellcode=asm(shellcraft.sh())p.sendlin原创 2021-04-12 14:40:03 · 519 阅读 · 1 评论 -
[BUUCTF]Reverse——[SWPU2019]ReverseMe
[SWPU2019]ReverseMe例行检查,32位程序,c++写的,无壳本地试运行一下,看看大概的情况程序里有好多复杂的函数,静态分析有点难度,这边选择动调理一下程序逻辑。汇编动调小白,简单记录一下自己的调试过程。找到程序的入口点,在这边下断点,f8单步直到让我们输入运行到call sub_CF37B0的时候开始让我们输入了,输入结束后将ebp-0x90处的值跟0x20比较,更改ZF标志位,0xCF28C7处的jz会根据这边的情况进行跳转,如果ZF标志位为0,则跳转,否则就会输出Try原创 2021-04-12 14:10:23 · 1959 阅读 · 2 评论 -
[BUUCTF]Reverse——[2019红帽杯]childRE(C/C++函数名修饰)
[2019红帽杯]childRE例行检查,64位程序,c++写的,无壳儿试运行程序没有得到有用的提示,检索字符串看到有关flag的提示信息,跟进来到关键函数截取关键部分代码分析循环遍历去取outputString字符串中的字符,然后分别对23取余和除数,做为下标,分别在str3中找到对应位置,而且还必须与str1和str2对应位置的值相等先来逆算一下outputstring中的字符串str3 = '1234567890-=!@#$%^&*()_+qwertyuiop[]QWER原创 2021-04-10 19:46:26 · 406 阅读 · 0 评论 -
[BUUCTF]Reverse——[FlareOn1]Bob Doge(c#逆向)
[FlareOn1]Bob Doge例行检查 ,64位程序,c++写的,无壳本地试运行一下,看看大概的情况,安装程序???搞了半天,以为是逆向安装程序,逆了半天没看懂,查了wp之后知道了是要逆向这个安装包安装后的程序。心态炸裂。检查一下安装的程序,32位,c#写的,无壳试运行一下,点击decode,真·手动狗头用dnspy打开,找到decode按键上的代码程序进行了三次运算,得到了text,text2和text3,最后回显text3。不太会用dnspy,不知道dat_原创 2021-04-10 14:35:26 · 980 阅读 · 0 评论 -
[BUUCTF]Reverse——[MRCTF2020]PixelShooter(apk)
[MRCTF2020]PixelShooter这题主要是使用安卓逆向的工具,试了很多,发现jeb最好用,百度爱盘在线工具包即可下载听大佬门说安卓unity游戏的核心逻辑一般位于assets\bin\Data\Managed\Assembly-CSharp.dll进入直接搜索{.flag{Unity_1S_Fun_233}...原创 2021-04-09 15:37:35 · 848 阅读 · 0 评论 -
[BUUCTF]PWN——actf_2019_babyheap(UAF)
actf_2019_babyheap例行检查,64位程序,没开PIE检索字符串的时候发现了’/bin/sh’字符串程序在申请malloc的时候定义了这样一个结构体菜单里调用了system,这下system地址有了add()申请两个chunk看一下,方便理解delete()show()利用思路:将ptr[i][1]处原先的print_content函数改成system,ptr[v1]改写成bin/sh的地址,这样在执行show的时候就会执行system(‘/bin/sh原创 2021-04-09 14:57:53 · 803 阅读 · 0 评论 -
[BUUCTF]Reverse——[ACTF新生赛2020]SoulLike
[ACTF新生赛2020]SoulLikeELF文件,应该没壳儿,在ubuntu里运行一下看看大概的情况直接上ida了如果能满足sub_83A()的条件,就能输出flag看一下sub_83A()sub_83A(),将传进去的v8进行了3007行的异或操作,然后得到v3里的值,如果不对,会将错误的地方的下标打印出来拿v3里的值反向异或一下应该就能得到flag,但是将sub_83A()里的代码复制出来后还要修改好一会儿,既然会将错误的那一位给打印出来,那就干脆爆破每一位吧,也不多,12位贴原创 2021-04-07 15:53:08 · 653 阅读 · 0 评论 -
[BUUCTF]——[FlareOn5]Ultimate Minesweeper
[FlareOn5]Ultimate Minesweeper直接勇,把所有雷都点一遍,就知道数字在哪里了例行检查试运行一下程序,扫雷?不管点哪儿都是雷,运气太差了吧c#的程序,用dnSpy打开,首先找到程序入口点百度一下里面出现的函数12行创建windwos窗体,MineField是雷区的封装,是游戏的核心组建;它负责方格的布局以及地雷的分布;并控制玩家的基本操作以及正确的响应。AllocateMemory创建雷区SquareRevealedCallback根据英文翻译方块字显示回原创 2021-04-06 14:43:42 · 966 阅读 · 0 评论 -
[BUUCTF]Reverse——[网鼎杯 2020 青龙组]jocker
[网鼎杯 2020 青龙组]jocker例行检查,无壳,32位程序运行一下看看大概的情况32位ida载入进入encrypt函数会报错,0x40151D处反编译失败40151D:无法转换为伪代码我一开始以为是堆栈不平衡导致,后来发现恢复后也没法f5看程序的逻辑,大概这边的代码被加密了,24~25行代码的作用就是给这个函数代码进行解密,这个函数后面在说,先继续往下看。wrong(),一个简单的加密函数omg()经过wrong处理的字符串得到unk_4030c0原创 2021-04-06 10:57:55 · 610 阅读 · 0 评论 -
[BUUCTF]REVERSE——[FlareOn5]Minesweeper Championship Registration
[FlareOn5]Minesweeper Championship Registration附件是jar程序,先运行看一下大概的情况,叫我们输入code直接用jd-gui打开看到一个域名,GoldenTicket2018@flare-on.com,看程序逻辑我们要输入的code就是它了flag{GoldenTicket2018@flare-on.com}...原创 2021-04-03 21:21:45 · 401 阅读 · 0 评论 -
[BUUCTF]REVERSE——[2019红帽杯]xx
[2019红帽杯]xx附件步骤PE文件,查壳儿,64位程序,无壳儿64位ida载入原创 2021-03-23 14:43:07 · 1476 阅读 · 3 评论 -
[BUUCTF]PWN——starctf_2019_babyshell(有限制的shellcode)
starctf_2019_babyshell例行检查,64位程序,开启了nxmain函数,往buf里写入shellcode,然后程序会执行shellcodsub_400786(),这个函数会对我们输入的shellcode进行检查检查的时候*i即可退出,可以使用\x00来绕过。...原创 2021-03-23 10:45:17 · 891 阅读 · 0 评论 -
[BUUCTF]PWN——wdb_2018_3rd_soEasy(ret2shellcode)
wdb_2018_3rd_soEasy例行检查,32位程序,没有开启任何保护,估计是ret2shellcode32位ida载入一开始输buf在栈上的地址,然后存在栈溢出,利用pwntools自动生成shellcode,之后劫持返回地址到buf执行shellcodeexpfrom pwn import *context.arch="i386"p=remote("node3.buuoj.cn",25832)p.recvuntil("Hei,give you a gift->"原创 2021-03-23 10:44:24 · 386 阅读 · 0 评论 -
[BUUCTF]Reverse——findKey
findKey例行检查,32位程序,c++写的运行一下,没什么特别提示的地方32位ida载入,检索字符串发现flag提示,跟进跳转会发现中间有一段汇编没有转换成成函数,选中这部分,按p转换成函数,在按f5就能得到关键代码理一下,贴一下关键代码,这一段应该是计算flag的代码,根据sub_401005中有md5加密的api调用判断sub_401005是md5加密。太久没做用API进行字串hash的題目了,去微软的网站上查询了一下才认出来了是md5加密首先让我们输入string1原创 2021-03-23 10:41:59 · 535 阅读 · 0 评论 -
[BUUCTF]PWN——gyctf_2020_document(UAF)
gyctf_2020_document例行检查,64位程序,保护全开漏洞在free chunk的时候简单看一下其他几个功能函数add()像我这样的新手,可以申请几个chunk看一下,方便理清楚堆的内部情况show(),根据存放在bss段的0x202060堆指针数组来输出对应的chunk里的值edit()利用思路申请一个chunk,释放掉,在show,由于存在uaf,这样就泄露了libc泄露libc后,由于第一个chunk被释放了,并且edit函数编辑的是chun原创 2021-03-22 15:02:56 · 740 阅读 · 2 评论 -
[BUUCTF]PWN——xman_2019_format(堆上的fmt+爆破栈)
xman_2019_format例行检查,32位程序,开启了nx检索程序里的字符串,发现了后门函数,back_doorr=0x80485AB这题buf并不存储在栈上,而是在malloc申请的堆上之后buf作为参数,进入到sub_80485C4由于存在后门函数,可以利用格式化字符串将返回地址改为back_door这边主要利用了%ac$bn,将长度a的数据写入偏移为b的位置。格式化字符串漏洞,一般需要先泄露栈地址,然后计算偏移,但是这里没办法这么利用,因为这里的s存放在chunk上,不在原创 2021-03-22 10:49:03 · 616 阅读 · 3 评论 -
[BUUCTF]PWN——bjdctf_2020_YDSneedGrirlfriend(UAF)
bjdctf_2020_YDSneedGrirlfriend例行检查,64位程序,开启了canary和nx试运行一下,看看大概的情况,常见的堆题的菜单64位ida载入,首先是检索字符串发现了程序中的后门函数,backdoor=0x400b9cadd_girlfriend()del_girlfriend()print_girlfriend()常见的uaf漏洞的利用方法,不清楚的详细看ctfwikishow函数会调用chunk里的puts输出chunk里的name原创 2021-03-19 10:37:44 · 642 阅读 · 0 评论 -
[BUUCTF]PWN——护网杯_2018_gettingstart
护网杯_2018_gettingstart例行检查,64位程序,除了RELRO,其他全开试运行一下,看看大概的情况64位ida载入当满足v5=0x7FFFFFFFFFFFFFFFLL并且v6=0.1的时候就能够获取shell,看一下栈布局确定了偏移,可以在读入buf的时候修改v5和v6的值这题没什么难度,v5的值可以直接表示,只是要注意一下0.1在内存中的表示。内存中存放的是数据的补码,浮点型数据的在内存中按照IEEE754 标准存储。有兴趣的师傅可以百度看看怎么算。这边在其他师傅的博原创 2021-03-18 13:17:05 · 654 阅读 · 0 评论 -
[BUUCTF]PWN——judgement_mna_2016(32位fmt)
judgement_mna_2016例行检查,32位程序,开启了canary和nx运行一下,看看大概的情况32位ida载入明显的格式化字符串漏洞,动调看一下输入点的位置,找一下flag在栈上的位置,算一下偏移就能够打印出flag先找一下输入点参数在栈上的位置可以看到在oxffffcf4c,然后看一下栈上的布局发现在距离我们输入的数据的偏移为28和32处存放着flag,定位偏移到该处即可这题根本不用写exp,但为了水长度,贴一下吧from pwn import *conte原创 2021-03-18 12:47:26 · 455 阅读 · 3 评论 -
[BUUCTF]PWN——wustctf2020_name_your_dog(越界修改got表)
wustctf2020_name_your_dog例行检查,32位程序,开启了canary和nx本地试运行一下看看大概的情况32位ida载入,检索字符的时候发现了后门函数,shell_addr=0x80485cb主要函数,感觉跟cat那题差不多 漏洞函数...原创 2021-03-18 10:09:11 · 469 阅读 · 0 评论 -
[BUUCTF]PWN——picoctf_2018_are you root(程序逻辑错误)
picoctf_2018_are you root例行检查,64位程序,开启了canary和nx本地试运行一下,看看大概的情况原创 2021-03-17 18:10:41 · 471 阅读 · 0 评论 -
[VNCTF 2021]White_Give_Flag
[VNCTF 2021]White_Give_Flag公开群里有官方wp,简单记录一下自己的复现过程例行检查,64位程序,保护全开本地试运行一下,看着像堆64位ida载入main()sub_E5Aqword_2010120数组中存放着5个字符串,对应菜单的5个选项。而且这个函数执行完后会在chunk中遗留flag的值sub_F07读取菜单选项的函数返回的是 read() 的返回值⽽不是 atoi() 的返回值,根据返回值打印qword_202120 中的字符串原创 2021-03-16 21:25:08 · 885 阅读 · 0 评论 -
[BUUCTF]PWN——mrctf2020_shellcode_revenge(可见字符shellcode)
mrctf2020_shellcode_revenge例行检查,64位程序,开启了RELRO和PIE本地运行看一下大概的情况64位ida载入,没法f5,直接看汇编jg大于则跳转,jl小于则跳转,jump无条件跳转要让程序继续执行下去,肯定是跳转loc_11ACloc_123Aloc_11B8cdqe使用eax的最高位拓展rax高32位的所有位movzx则是按无符号数传送+扩展(16-32)EAX是32位的寄存器,而AX是EAX的低16位,AH是ax的高8位,而AL是ax的低原创 2021-03-15 15:14:30 · 3824 阅读 · 3 评论 -
[BUUCTF]PWN——wdb2018_guess(stack smashing--canary报错利用)
wdb2018_guess例行检查,64位程序,开启了canary和nx本地试运行一下,看看大概的情况64位ida载入存在溢出利用点,但是有canary保护,这边39行和41行的puts函数是写死的,没法用来接收泄露的信息,想到了利用canary的报错输出在程序加了 carry 保护后,如果我们的输入覆盖了 carry ,程序就会报错,报错代码如下,可以看到,程序会执行 __stack_chk_fail 函数来打印 __libc_argv[0] 指针所指向的字符串(默认存储的是程序的名称)原创 2021-03-14 21:38:07 · 1204 阅读 · 2 评论 -
[BUUCTF]PWN——wustctf2020_name_your_cat(数组越界)
wustctf2020_name_your_cat附件步骤例行检查,32位程序,开启了canary和nx本地试运行一下看看大概的情况32位ida载入,在检索字符串的时候发现了后门主要函数原创 2021-03-13 11:08:56 · 1285 阅读 · 4 评论 -
[BUUCTF]PWN——gyctf_2020_some_thing_interesting(格式化字符串+UAF)
gyctf_2020_some_thing_interesting附件步骤例行检查,64位程序,保护全开本地试运行一下程序,看看大概的情况64位ida载入sub_B7A()check()create()原创 2021-03-11 15:57:37 · 850 阅读 · 2 评论 -
[BUUCTF]PWN——ciscn_2019_final_2
ciscn_2019_final_2附件步骤例行检查,64位程序,保护全开本地没有flag文件,远程连接一下,经典的堆题的菜单64位ida载入init()allocate(),只可以申请0x20或者0x10的chunkdelete()show(),show只能调用3次bye_bye这道题的关键点在于文件流的知识dup2 用来复制文件描述符:int dup2 (int oldfd,int newfd)_fileno 是用来规定 fd 所指向的文件流的,i原创 2021-03-10 16:02:57 · 1123 阅读 · 1 评论 -
[BUUCTF]PWN——ciscn_2019_final_3(tcache dup)
ciscn_2019_final_3附件步骤:例行检查,64位程序,保护全开本地试运行一下,看看大概的情况,提示是堆题64位ida载入add()remove()简单的思路:先合并堆块,合并后的堆块大于tcache的范围,然后free掉即可出现libc,接下来就是堆块重叠malloc一个堆块到libc空间,通过gift得到libc地址,接着tcache attack修改__free_hook拿到shelltcache第一次接触tcache,根据ctfwiki上的知识点简单总结一原创 2021-03-10 12:59:16 · 1034 阅读 · 0 评论 -
[BUUCTF]PWN——picoctf_2018_buffer overflow 0
picoctf_2018_buffer overflow 0附件步骤例行检查,32位程序,开启了nx保护提示要ssh链接ssh连上后稍微尝试了一下,好像vuln这个程序能读出flag32为ida载入测试文件百度一下signal,得知11是(SIGSEGV),对存储的无效访问的信号。15行的意思是设置了一个函数sigsegv_handler来处理当程序产生对存储的无效访问。就是说当程序造成无效内存访问的时候,就会输出flag。在往下看vuln函数将src拷贝到dest中,原创 2021-03-09 16:19:04 · 442 阅读 · 0 评论 -
[BUUCTF]REVERSE——wdb_2018_2nd_easyfmt(32位格式化字符串修改got表)
wdb_2018_2nd_easyfmt附件步骤例行检查,32位程序,开启了nx本地试运行一下,看看大概的情况,看交互式的情况,知道存在格式化字符串漏洞32位ida载入利用思路:找到格式化字符的偏移量打印print@got的地址,泄露libc,计算system的地址将print@got修改成system,传入参数‘/bin/bash\x00’利用过程:找到偏移为6打印print@got的地址printf_got=elf.got["printf"]payloa原创 2021-03-08 14:09:04 · 893 阅读 · 1 评论 -
[BUUCTF]REVERSE——[ACTF新生赛2020]Universe_final_answer(z3求解)
[ACTF新生赛2020]Universe_final_answer附件步骤无壳儿,一般elf文件都是64位先在linux中试运行一下看看大概的情况64位ida打开,根据运行时候看到的字符串找到关键函数,输入一个字符串,经过sub_860和sub_C50得到flagsub_860()bool __fastcall sub_860(char *a1){ int v1; // ecx int v2; // esi int v3; // edx int v4; // er9原创 2021-03-05 12:24:01 · 338 阅读 · 1 评论 -
[BUUCTF]REVERSE——[WUSTCTF2020]level4
[WUSTCTF2020]level4附件步骤elf文件,虚拟机试运行一下看看大概的情况,根据提示字符Typing....Struct.....char....*left....*right............emmmmm...OK!猜测存在二叉树看到type1和type2里的字符串有点像flag,但是顺序被打乱了64位ida载入type1(byte_601290), 二叉树中序遍历:2f0t02T{hcsiI_SwA__r7Ee}type2(byte_601290),二叉树后序遍原创 2021-03-05 10:35:28 · 436 阅读 · 3 评论 -
[BUUCTF]REVERSE——[UTCTF2020]basic-re
[UTCTF2020]basic-re附件步骤elf文件,我一开始还在linux中试运行了一下,了解了一下程序大概的执行情况,静态分析用ida打开时直接检索字符串,就发现了flag,一开始还以为是假的,拿去试了一下是正确的。这几天遇到的题目不是动调就是各种加密函数,给这位出题人orz!!!flag{str1ngs_1s_y0ur_fr13nd}...原创 2021-03-05 08:49:39 · 486 阅读 · 1 评论 -
[BUUCTF]REVERSE——[GWCTF 2019]re3
[GWCTF 2019]re3附件步骤64位程序,无壳儿,直接用ida打开,首先是检索程序里的字符串根据correct跳转去找到有关flag的函数,下面能看到ABC……*/,猜测程序里存在base64加密这边没法f5,估计是jz的锅影响了ida的正常运行,先看一下上面的main函数main()输入的字符串长度为32位,利用mprotect函数将dword_400000处的0xF000长度地址修改成了可读可写可执行,sub_402219()里的数据进行了异或处理。可以看到sub_402原创 2021-03-04 19:48:40 · 1238 阅读 · 3 评论 -
[BUUCTF]REVERSE——[网鼎杯 2020 青龙组]singal
[网鼎杯 2020 青龙组]singal附件步骤例行检查,32位程序,无壳本地试运行一下程序32位ida载入,首先是找到main函数确定了flag字符串的样式flag{……}根据输入点的提示字符串,找到对应函数,确定了字符串的长度是15右击该函数,找到调用该函数的地方,来到了vm_operad()函数处,看main函数可以知道,vm_operad里的参数v4在上面一行调用了qmemcpy函数,百度上说逆向里的qmemcpy=memcpy,memcpy在c语言里的拷贝函数,在unk_4原创 2021-03-03 18:19:38 · 1131 阅读 · 0 评论