- 博客(22)
- 收藏
- 关注
原创 [BJDCTF 2020]babyrop
puts_add = u64(i.recv(6).ljust(8,b'\x00'))用来接收plt表中的puts的真实地址的。提醒一下,elf.ELF是()不是[]不难,按照以往的就可以。
2023-12-17 18:22:17
361
1
原创 [SWPUCTF 2021 新生赛]no_wakeup
要绕过__wakeup(),可以修改序列化字符串中表示对象属性个数,当表示对象属性个数的值大于真实的属性个数时会跳过__wakeup的执行。这里的__wakeup()会改变admin和pawssd的值,所以考虑绕过这个函数。__construct(): //构造函数,当对象new的时候会自动调用。__wakeup(): //unserialize()时会被自动调用。__destruct()://析构函数当对象被销毁时会被自动调用。一个简单的PHP的反序列化。
2023-12-12 18:15:39
144
原创 [HNCTF 2022 Week1]ret2shellcode
mprotect()函数把自start开始的、长度为len的内存区的保护属性修改为prot指定的值。但是有个memset(s, 0, sizeof(s));4)PROT_NONE:表示内存段中的内容根本没法访问。先指定context.arch="i386/amd64"2)PROT_WRITE:表示内存段内的内容可读;3)PROT_EXEC:表示内存段中的内容可执行;1)PROT_READ:表示内存段内的内容可写;asm(自定义shellcode)file 和checksec。一道shellcode的题。
2023-12-11 17:59:04
255
原创 [GDOUCTF 2023]Shellcode
这段代码的目的是在内存中放置一个字符串 "/bin/sh",然后调用 execve 系统调用以执行该路径下的 shell 程序。\x68\x2f\x62\x69\x6e :将字符串 "/bin" 压入栈中,即要执行的程序所在的目录。\x68\x2f\x2f\x73\x68 :将字符串 "//sh" 压入栈中,即要执行的程序的路径。\xcd\x80 :触发系统调用,执行 execve("/bin/sh", NULL, NULL)\x31\xc9 :将 ECX 设置为零,用于 execve 系统调用的参数。
2023-12-01 21:13:47
321
1
原创 FSCTF 2023(公开赛道)(pwn持续更新中)
file一下,64位,ida打开关键函数部分:检查用户输入的命令中是否包含"cat"、"flag"、"sh"或者"$0"这些关键词,如果包含,则输出"invalid command";否则关闭标准输出,然后调用backdoor函数。在backdoor函数中system(a1);存在,a1是buf也就是输入的我也是看了wp才知道的,还得多练直接 nc node4.anna.nssctf.cn 28229然后输入 tac fla* >&2。
2023-11-28 20:59:16
704
原创 [CISCN 2019东北]PWN2
p64(pop_ret_rdi_addr)+p64(bin_sh_addr):system函数的参数准备,即把'/bin/sh'的地址传入。p64(pop_rdi)+p64(puts_got)+p64(puts_plt)+:输出puts函数的真实地址,用于后面的寻找libc。#'/bin/sh'的真实地址=libc基址的真实地址+'/bin/sh'相对于libc基址的偏移量。#system函数的真实地址=libc基址的真实地址+system函数相对于libc基址的偏移量。
2023-11-20 21:28:09
456
1
原创 [HNCTF 2022 Week1]easyoverflow
v4的长度为44字节,只需要将他溢出,并将v5覆盖成一就可以了。v4和v5距离rbp的距离可以算出它们之间的相对偏移。
2023-11-17 23:20:10
397
原创 攻防世界Replace
byte_402150 和byte_402151 两个数组相差一,所以v10和V8也相差一。提取数组数据可以用shift+e来提取。
2023-11-17 21:23:26
192
原创 [WUSTCTF 2020]getshell
发现后门函数 shell,并且在vuin函数存在栈溢出。file 和checksec 检查文件。一道简单的ret2text。
2023-11-14 19:43:03
255
原创 [GFCTF 2021]where_is_shell
在ROP攻击中,攻击者利用程序中存在的这种gadget,通过精心构造的数据将程序控制流引导到这个gadget,从而实现对程序行为的控制。通常情况下,攻击者会将需要的参数放置在栈上,然后利用ROP链将控制流引导到 "pop rdi;ret" 这样的gadget,将参数加载到合适的寄存器中,然后再执行调用目标函数的ret指令。在x86_64架构中,这个gadget的作用是从栈中弹出一个数值,并将其赋值给RDI寄存器,然后进行返回。先覆盖到地址,然后执行ret,ret用来返回弹出的地址,然后执行pop_rdi;
2023-11-13 22:28:36
541
原创 [NISACTF 2022]ezpie已解决
PIE全称是position-independent executable,中文解释为地址无关可执行文件,该技术是一个针对代码段(.text)、数据段(.data)、未初始化全局变量段(.bss)等固定地址的一个防护技术,如果程序开启了PIE保护的话,在每次加载程序时都变换加载地址,从而不能通过ROPgadget等一些工具来帮助解题。
2023-10-31 17:42:11
725
2
原创 [watevrCTF 2019]Voting Machine 1
shiift+F12查找字符串,发现flag.text跟踪。简单的栈溢出距离RBP 0X2并且是64位。
2023-10-30 20:18:35
450
1
原创 攻防世界 流浪者
没有发现main函数,可以从字符串入手,找到对应的函数。然后根据第一个解释逆推写出第二个脚本。首先逆推出v5也就是a1这个数组。点进一个字符串,两个都一样。ctrl+x找到所属函数。找到调用此函数的函数。
2023-10-23 21:17:33
98
原创 re2-cpp-is-awesome
这里有个align 8,align num是让后面的字节都对齐num,也就是这里都对齐8才对,中间补7个0。后来查了很多资料才发现是IDA自动把多个0判断成对齐操作了,这里align 8是因为前面dd 24h中本来是db 24 0 0 0 然后后面一个双字是dd 0 也就是db 0 0 0 0,IDA把这连着的7个0当成了间隔,那上一个数和下一个数间隔就是8了,所以IDA生成了align 8。off_6020A0是一个字符串,qword_6020C0是一个int数组,所以就是按数组索引取字符串。
2023-10-23 19:59:25
147
原创 攻防世界parallel-comparator-200
就是通过main函数得出is_ok要为1,所以highly_optimized_parallel_comparsion函数的返回值为1.然后能够在。得出generated_string[i] = just_a_string[i],返回值为1。就是(argument[0]+argument[1]) = argument[2];即 user_string[i]= first_letter+diffrernce。然后在这就可以得出user_string[i]对于just_a_string还有一个加法。
2023-09-27 17:15:55
91
原创 攻防世界EasyRE
追踪aXircjR2twsv3pt。ida打开,打开main函数。正常查壳,32位,无壳。shift+e提取数据。然后根据加密写出脚本。
2023-09-27 16:13:04
175
原创 攻防世界re1-100
{daf29f59034938ae4efd53fc275d81053ed5be8c},对其字符进行分成四份(记得将花括号给去掉)然后按照顺序得到:53fc275d81053ed5be8cdaf29f59034938ae4efd。比较关键的地方,点进confuseKey。观察得到key的顺序为3,4,1,2。一个将字符串顺序打乱的程序。
2023-09-26 18:08:57
84
1
原创 answer_to_everything
所以答案为吧 80ee2a3fe31da904c596d993f7f1de4827c1450a。猜测这是一个加密,在看题目任命sha1,猜测是sha1加密。用ida打开,点进not_the_flag函数。将kdudpeh拖进啥。
2023-09-26 17:40:32
100
1
原创 Guess-the-Number
答案为 a7b08c546302cc1fd2a4d48bf2bf2ddb。cmd里输入 java -jar guess.jar 309137378。直接照上面的加密写一个java就可以了或者写一个py。java就不写了,下面是py。
2023-09-26 17:18:54
201
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人