6.3k6 分钟

# 1.Pwn-Auto_Coffee_machine # 1. 查看程序 Arch: amd64-64-little RELRO: Partial RELRO Stack: Canary found NX: NX enabled PIE: No PIE (0x400000) 没有开启 pie 想要进入 admin 里要输入一个密码,我们输入的密码会被加密一下: 所以我们要输入 lwuv"ryp"kv 字符串每个 ASCII码减-2 (最后输入的是 just pwn it )然后就可以进入 admin 在 admin 内有
4.6k4 分钟

# 1. 查看程序 32 位程序,开启了 NX ida32 查看 main: vuln: # 2. 漏洞分析 可以发现 read 读入的字节数可以导致栈溢出,但是没有后门函数,我们可以进行泄露 libc 来 getshell,但是这里换一个方法,通过利用 ret2dlresolve 来解决, ret2dlresolve 通常利用在无法泄露出地址时,通过让 dl_runtime_reslove 函数来解析函数名达到执行动态链接库函数的目的 因为 dl_runtime_resolve 函数没有检查边界,所以我们可以将其对应的结构体写入其他地址,然后通过一定 偏移 大小来使 dl_ru
1.3k1 分钟

# 1. 查看程序 32 位程序,开启了 NX ida32 查看 main: vuln: # 2. 漏洞分析 可以发现 read 读入的字节数可以导致栈溢出,但是没有后门函数,我们可以进行泄露 libc 来 getshell,这里利用 LibcSearcher 没有找到对应的 libc,然后就用了 DynELF 方法,来找到 system 地址,但是还是没有成功 # 3.exp 最后利用别人的偏移量才成功,泄露的地址是对的,但是都找不到正确的偏移量就用了别人的 nfrom pwn import *from LibcSearcher import *context.log_level &#
8931 分钟

# 1. 查看程序 32 位程序,开启了 NX main: printFlag: # 2. 漏洞分析 这里调用了 scanf 函数,可以进行溢出,然后有个后门函数,溢出返回到这里就可以得到 flag 这里看 ida 的距离 ebp 的偏移不准确,gdb 调试是 24 (0x18), 而 ida 是 0x10 # 3.exp nfrom pwn import *from LibcSearcher import *#context.log_level = 'debug'context(os='linux', arch='
1.6k1 分钟

# 1. 查看程序 32 位程序,开启了 NX ida 反汇编: vul函数 :可以看到只能溢出两个字,也就只能覆盖 ebp 和 ret,这种一般都需要栈迁移 hack函数 :只提供了 system 函数,无法获得 flag,所以不能直接用这个地址覆盖 ret # 2. 漏洞分析 由于可以溢出的字节数太小,所以就需要进行栈迁移,这里要考虑迁移的地址,首先 bss 段上没有很大的空间,并且没有备份去写入内容到 bss,所以就只能考虑栈上,那么就需要我们泄露栈上的地址,这里就可以利用 printf 来打印出 mian 函数的 ebp 地址再利用偏移就能计算出我们输入的字符串的地址:
9461 分钟

# 1. 查看程序 64 位程序,保护全开 ida 反汇编查看: 从上面看到会将一个字符串复制到 V5,然后有一个 check 的函数: fake_flag: check 函数会将复制过去的 v5 与系统保存的字符串逐个进行对比,直到对比时两个字符串相等时返回 1 ,就可以 getshell # 2. 漏洞分析 由于一开始复制给 v5 的字符串在栈上,而后面有个 get 函数也是往栈上写内容,并且地址更低也就可以覆盖 v5 的内容来满足后面的判断 # exp nfrom pwn import *from LibcSearcher import *#context.log_level
9251 分钟

# 1. 查看程序 32 位程序,开启了 NX IDA32 查看 main: vuln: 后门 win: # 2. 漏洞分析 有 gets 函数可以导致任意字节的溢出,然后有个后门,溢出到这里传参满足条件就行 # 3.exp nfrom pwn import *from LibcSearcher import *#context.log_level = 'debug'context(os='linux', arch='i386', log_level='debug')p=r
1.2k1 分钟

# 1. 查看程序 32 位程序,开启了 nx ida32 查看 main: vulnerable: (可以溢出 12 个字节,也就是 32 位的 3 个字) 后门 shell ,可以发现并不是 '/bin/sh',被用来进行干扰了 # 2. 漏洞分析 一开始想着用栈迁移 因为后门有执行 system 函数,尽管无法 getshell,但是却提供了 call system, 限制了溢出的字节数,所以无法利用 system_plt 的地址 (因为需要返回地址,这样字节数不够),【而 call system 会直接将下一个命令压入栈中】,也就避免了在