01 2025 档案
摘要:一个整数溢出,注意get_n函数把a2转换为了unsigned int类型,但在vuln函数里面比较的是int类型 输入-1即可绕过 这里的libc是不是太老了都打不通 exp from pwn import * from LibcSearcher import * io = remote('nod
阅读全文
摘要:main里面有个gets溢出函数,再点开flag函数看 可以看到传入了一个a1参数,如果win1和win2都是1且a1为-559039827时会输出flag的值 用十六进制比较,该数的十六进制可以直接再ida里面看到 看到win1函数设置了win1为1,win2函数需要再传入一个参数为-116322
阅读全文
摘要:一个normal的栈溢出,没有system和binsh,为ret2libc 这里也没有常见的write和puts,所以我们用read泄露libc基址,并使用printf打印read的地址 这里注意printf的第一个参数必须是格式字符串,即Welcome to the Pwn World again
阅读全文
摘要:看一下ida 两个read函数都是读取0x30(48),然后s距离ebp有0x28(40),所以虽然有溢出但只溢出了两个4字节,也就是只能覆盖到ebp和ret。 这时候就需要运用栈迁移 栈迁移就是当溢出不够多的时候,这时候可以考虑把栈给迁移去其它地方,利用leave_ret指令控制ebp,使其指向我
阅读全文
摘要:分析一下这串代码,每次读取flag.txt的一个字符存入buf[0]里面,然后用write输出(buf代表的是buf[0]),读到文件末尾退出返回0xFF。其实就输出flag啦,我们只要将栈溢出返回地址填到这个函数就行 这里注意没有把rbp压入栈,结尾也没有leave,不用加8 exp from p
阅读全文
摘要:格式字符串漏洞的篡改内容 看到x值为3,将x的值改为4就好 首先传入x参数的地址,这个地址存放在栈上偏移为11的位置,利用%11$n,定位到了偏移为11的位置,往这个位置写入数据,写入的数据由%11$n前面的参数的长度决定,而我们的x参数的地址,正好是4位,不需要添a来补齐位数就可以直接利用,将x参
阅读全文
摘要:整数溢出 要使栈溢出,则应该输入nbytes,使其转换为int类型小于10,但转换为unsigned int类型大于0x10+ int类型:在C语言中,int类型是有符号整数,通常占用4个字节(32位)。它的取值范围是-2147483648到2147483647。 unsigned int类型:un
阅读全文
摘要:先让我们输入s1,如果不是'administrator'程序将退出。 然后输入1会让我们输入src(限制读入128个字符) 输入2会展示我们输入的src,输入3有个system 输入4会将src拷贝到dest里面,注意到strcpy没有限制,而dest离ebp为0x48,而src最多可以输入128.
阅读全文
摘要:打开ida 记得绕过加密,因为它会改变s里面的值 exp from pwn import * from LibcSearcher import * context(os='linux', arch='amd64') context.log_level='debug' io=remote('node5
阅读全文
摘要:打开ida能看到 栈溢出,返回地址填到get_secret函数里面,可以看到get_secret函数是直接读取了flag的,现在就需要把它输出即可。 输出我们可以利用代码里面的printf,因为printf从缓冲区打印出东西需要满足条件,比如有换行符或缓冲区已满或程序正常退出。 这里我们用exit让
阅读全文
摘要:非常normal的ret2libc 点击查看代码 from pwn import * from LibcSearcher import * io = remote('node5.buuoj.cn',27414) #io = process('./ciscn_2019_n_5') elf = ELF(
阅读全文
摘要:打开ida看 点击查看代码 sub_80486BB();#一些基本的输入输出 fd = open("/dev/urandom", 0);#Linux系统中的一个特殊文件,用于生成随机数。 if ( fd > 0 )#文件打开成功返回非负 read(fd, &buf, 4u);#读取4字节到buf里面
阅读全文
摘要:其实这题直接nc连一下就可以了。 其实考的是系统调用来着 32位程序系统调用号用 eax 储存, 第一 、 二 、 三参数分别在 ebx 、ecx 、edx中储存。 可以用 int 80 汇编指令调用。 64位程序系统调用号用 rax 储存, 第一 、 二 、 三参数分别在 rdi 、rsi 、rd
阅读全文
摘要:gets造成栈溢出,返回地址填入getflag函数 打开看getflag函数,它功能是打开flag文件读取并输出。 如果我们的exp传入两个参数a1,a2还不够,因为程序若是不正常退出是没有回显的。(本题没有开启标准输入输出,输入输出会在缓冲区呆着,而exit执行后会将缓冲区输出,即输出flag)
阅读全文
摘要:checksec一下能发现开了很多保护,吓人一跳,但其实我们分析一下发现只要var[13]为17就可以了 if ( *(_QWORD *)&var[13] )#判断var[13]开始的8字节(_QWORD表示64位,即8字节)内存区域是否非零。*(_QWORD *)&var[13]是将var[13]
阅读全文
摘要:先checksec一下,发现开启了NX和canary保护 看一下ida反汇编,发现输入全都有限制,无法造成造成栈溢出。代码最后会与随机数判断,若相等会执行system。 我们看到有printf(buf),这可以造成格式字符串漏洞。 如果我们用格式字符串修改随机数的值,再将输入一样的值就可以执行我们想
阅读全文
摘要:打开ida反汇编看一下,是c++,无所谓,复制问一下ai 先让我们输入s的数据,读取长度限制在32字节。然后replace函数会将s里面的 I 替换成 you 。最后输出s。 分析一下,s距离ebp为0x3C(60字节),且我们最多只能输入32字节的,但经过replace函数,一个字节的‘I’会被替
阅读全文
摘要:可以看到用gets让用户输入v1,还比较了v2的值,但此之前已经设置了v2的值为0.0 法一 可以用传统的方法栈溢出,覆盖返回地址为system的地址 法二 v2也存在栈上,也可以通过gets栈溢出修改v2原本的数据 movss xmm0, [rbp+var_4] #将v2的值放到xmm0里面 uc
阅读全文