摘要: gets造成栈溢出,返回地址填入getflag函数 打开看getflag函数,它功能是打开flag文件读取并输出。 如果我们的exp传入两个参数a1,a2还不够,因为程序若是不正常退出是没有回显的。(本题没有开启标准输入输出,输入输出会在缓冲区呆着,而exit执行后会将缓冲区输出,即输出flag) 阅读全文
posted @ 2025-01-12 18:05 fdddddd 阅读(83) 评论(0) 推荐(0)
摘要: checksec一下能发现开了很多保护,吓人一跳,但其实我们分析一下发现只要var[13]为17就可以了 if ( *(_QWORD *)&var[13] )#判断var[13]开始的8字节(_QWORD表示64位,即8字节)内存区域是否非零。*(_QWORD *)&var[13]是将var[13] 阅读全文
posted @ 2025-01-11 15:34 fdddddd 阅读(100) 评论(0) 推荐(0)
摘要: 先checksec一下,发现开启了NX和canary保护 看一下ida反汇编,发现输入全都有限制,无法造成造成栈溢出。代码最后会与随机数判断,若相等会执行system。 我们看到有printf(buf),这可以造成格式字符串漏洞。 如果我们用格式字符串修改随机数的值,再将输入一样的值就可以执行我们想 阅读全文
posted @ 2025-01-11 00:19 fdddddd 阅读(225) 评论(0) 推荐(0)
摘要: 打开ida反汇编看一下,是c++,无所谓,复制问一下ai 先让我们输入s的数据,读取长度限制在32字节。然后replace函数会将s里面的 I 替换成 you 。最后输出s。 分析一下,s距离ebp为0x3C(60字节),且我们最多只能输入32字节的,但经过replace函数,一个字节的‘I’会被替 阅读全文
posted @ 2025-01-10 15:22 fdddddd 阅读(59) 评论(0) 推荐(0)
摘要: 可以看到用gets让用户输入v1,还比较了v2的值,但此之前已经设置了v2的值为0.0 法一 可以用传统的方法栈溢出,覆盖返回地址为system的地址 法二 v2也存在栈上,也可以通过gets栈溢出修改v2原本的数据 movss xmm0, [rbp+var_4] #将v2的值放到xmm0里面 uc 阅读全文
posted @ 2025-01-10 00:23 fdddddd 阅读(31) 评论(0) 推荐(0)
摘要: 我们先简单地看一下程序 发现它会跳转到challenge函数 定义了数组buf和v2,v2已经给了初始值,buf用read函数读取 后面用strcmp()将v2和guet555比较,如果相等(返回0)则会执行if段的内容,不相等的话会return result的结果。 然后我们还可以看到有许多函数 阅读全文
posted @ 2024-12-09 23:20 fdddddd 阅读(53) 评论(0) 推荐(0)
摘要: 1. GUETSEC栈溢出(32位) 可以看到它看起来好像有四个栈溢出,我们逐个点进去 __isoc99_scanf("%20s", v1):限制了读取20个字符串(但其实无法完全杜绝缓冲区溢出风险) 0x50=80,对于second attack是溢出了,final chance却没有。 所以其实 阅读全文
posted @ 2024-11-30 12:06 fdddddd 阅读(72) 评论(0) 推荐(0)
摘要: ret2text [NewStarCTF 2023 公开赛道]ret2text (64) execve本身并不是一个后门函数。 实际上,execve是一个标准的系统调用函数,用于在 Linux和类 Unix 系统中执行一个新的程序。 它的原型如下: 该函数接受三个参数: 1. filename:要执 阅读全文
posted @ 2024-11-22 23:36 fdddddd 阅读(58) 评论(0) 推荐(0)