代码编织梦想

一、low级别

    打开dvwa靶场,将等级设置为low,选中XSS(Stored)
在这里插入图片描述
    这里有一个很明显的特征就是表单,遇到这种情况最好每个表单都输入内容,即XSS测试语句
先查看源码(View Source):

<?php
if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );
    // Sanitize message input
    $message = stripslashes( $message );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    // Sanitize name input
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
    //mysql_close();
}
?> 

可以看到直接用sql语句存储了,并没有多余的设置

$query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";

接下来我们先尝试在Name表单内进行测试:
在这里插入图片描述
    奇怪的是,语句打到这里就没办法继续进行输入了,初步判断是有前端代码的限制

绕过前端限制,修改输入长度

我们右键查看源代码
在这里插入图片描述
    看到 maxlength = 10 限制了我们的输入长度,一般前端的设置是可以绕过的。
按F12,选择这里的前端代码,把maxlength=10改成maxlength=30
在这里插入图片描述
    修改好以后,我们接着在Name上面输入

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

    为了区别,在Message处输入

<script>alert(/message/)</script>

    完了之后,点击注册(Sign Guestbook)
在这里插入图片描述
第一个出现XSS弹窗,是Name上的
在这里插入图片描述
第二个出现的是弹窗message,因此两个地方都存在XSS漏洞
在这里插入图片描述
那么如何判断他是不是存储型的呢?我们只要在这个网页什么都不填写,直接刷新,会发现直接出现弹窗了
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
还会将我们的内容显示出来
在这里插入图片描述
    我们可以用数据库管理工具进行查看,这里我用的是Navicat Premium 15,可以看出,我们输入的内容已经存储进来了
在这里插入图片描述

如果navicat连接不上kali数据库,请参考我的另一篇博客:
链接: https://blog.csdn.net/weixin_43847838/article/details/110420513.

    在进行Medium级别测试之前,先要把数据库中存放的两条XSS脚本删除,否则打开Medium级别后也会出现弹窗,因为是同一个数据库。删除方法很简单,用数据库连接工具,比如我用的Navicat工具即可。

二、Medium级别

先查看源代码(view source):

<?php
if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = strip_tags( addslashes( $message ) );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $message = htmlspecialchars( $message );
    // Sanitize name input
    $name = str_replace( '<script>', '', $name );
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
    //mysql_close();
}
?> 

可以看到//Get input ,输入的内容

 // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

接着看到关键的语句:

// Sanitize name input
    $name = str_replace( '<script>', '', $name );

    Name的过滤方式跟dvwa反射型XSS几乎一模一样的,就是用 str_replace() 函数将<script> 字符过滤掉,把它替换成空,但是message的值就比较麻烦了

$message = strip_tags( addslashes( $message ) );
$message = htmlspecialchars( $message );

    先是使用addslashes() 函数,这个函数作用返回在预定义字符之前添加反斜杠的字符串。
预定义的字符是:
1.单引号(')
2.双引号(")
3.反斜杠(\)
4.NULL

    然后用strip_tags()这个函数除去字符串中的HTML、XML、 PHP 的标签,最后再调用htmlspecialchars() 函数,把预定义的字符转换为 HTML 实体,可谓是铜墙铁壁,所以message处不好下手,我们把攻击目标转移到防范薄弱的name.

函数具体用法可以前往w3school编程学习网查看:
PHP addslashes() 函数.

    因此我们可以采用大小写绕过和双写绕过。

1.双写绕过

Name*处

<scr<script>ipt>alert(1)</script>

同样的,在输入前要绕过长度限制
在这里插入图片描述
在这里插入图片描述

2.大小写混淆方式绕过

Name*处

<SCript>alert(/Hello/)</script>

在这里插入图片描述
先弹出1(双写绕过时留下的
在这里插入图片描述
后弹出内容:
在这里插入图片描述

三、High级别

先查看源代码(View Source)

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = strip_tags( addslashes( $message ) );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $message = htmlspecialchars( $message );

    // Sanitize name input
    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));

    // Update database
    $query  = "INSERT INTO guestbook ( comment, name ) VALUES ( '$message', '$name' );";
    $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );

    //mysql_close();
}
?> 

    可以看到,只是在medium级别的基础上,在Name处多了种过滤方式:

$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $name );

    完全把<script>的大小写完全过滤掉,但是忽略了<img>等其他的标签
因此可以用图片插入语句法

图片插入语句法:

 <img src=1 οnerrοr=alert(999)> 

在这里插入图片描述
在这里插入图片描述

四、dvwa_impossible分析

查看源代码(View Source):

<?php

if( isset( $_POST[ 'btnSign' ] ) ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $message = trim( $_POST[ 'mtxMessage' ] );
    $name    = trim( $_POST[ 'txtName' ] );

    // Sanitize message input
    $message = stripslashes( $message );
    $message = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $message ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $message = htmlspecialchars( $message );

    // Sanitize name input
    $name = stripslashes( $name );
    $name = ((isset($GLOBALS["___mysqli_ston"]) && is_object($GLOBALS["___mysqli_ston"])) ? mysqli_real_escape_string($GLOBALS["___mysqli_ston"],  $name ) : ((trigger_error("[MySQLConverterToo] Fix the mysql_escape_string() call! This code does not work.", E_USER_ERROR)) ? "" : ""));
    $name = htmlspecialchars( $name );

    // Update database
    $data = $db->prepare( 'INSERT INTO guestbook ( comment, name ) VALUES ( :message, :name );' );
    $data->bindParam( ':message', $message, PDO::PARAM_STR );
    $data->bindParam( ':name', $name, PDO::PARAM_STR );
    $data->execute();
}

// Generate Anti-CSRF token
generateSessionToken();

?> 

    可以看到对两个参数name和message都进行了html实体转义,无法利用xss漏洞。

    本站所有文章均为原创,欢迎转载,请注明文章出处: https://blog.csdn.net/weixin_43847838/article/details/110428828.。百度和各类采集站皆不可信,搜索请谨慎鉴别。技术类文章一般都有时效性,本人习惯不定期对自己的博文进行修正和更新,因此请访问出处以查看本文的最新版本。

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/weixin_43847838/article/details/110428828

获取Webshell的常用方法(二)-爱代码爱编程

实战中获取Webshell过程会面临各种困难:WAF封堵、AV查杀、权限低等等,本文主要介绍Webshell免杀绕过和提升权限,其中一些方法对于高版本服务器语言和查杀工具已经失效,但文章重在提供基本思路,毕竟攻防博弈,技术动态发展,方法和思路也要随之变化。 文章目录 一、免杀绕过1.字符串变形2.自定义函数3.自定义类4.回调函数5.编

前端跨域-爱代码爱编程

跨域概念 同源策略: 协议(http://www.baidu.com & https://www.baidu.com) 域名(https://www.aliyun.com & https://developer.aliyun.com) 端口(localhost:8080 & localhost:8000) 什么是跨域

等保测评--网络安全等级保护工作流程-爱代码爱编程

网络安全等级保护工作流程 运营单位确定要开展信息系统等级保护工作后,应按照以下步骤逐步推进工作: 1、确定信息系统的个数、每个信息系统的等保级别、信息系统的资产数量(主机、网络设备、安全设备等)、机房的模式(自建、云平台、托管等)等。 2、对每个目标系统,按照《信息安全技术 网络安全等级保护定级指南》的要求和标准,分别进行等级保护的定级工作,填写《系

万字实录 | 张韧做客 Zero Knowledge 播客,畅聊共识协议安全性和 NC-Max 那些事-爱代码爱编程

Zero Knowledge 是业内著名的专注于零知识证明的英文播客,深入探讨新兴 Web 3 技术,与正在构建它的社区成员们。该播客的听众为同行开发者和希望了解该区块链内部运作的人们。播客的创建者 Fredrik Harrysson 与 Anna Rose 表示,他们不投机,不多谈交易,更多专注于技术本身。 最近的播客邀请到了 Nervos 研究员张韧

等保测评--工业控制系统安全扩展要求-爱代码爱编程

信息安全等级保护,是对信息和信息载体按照重要性等级分级别进行保护的一种工作,在中国、美国等很多国家都存在的一种信息安全领域的工作。在中国,信息安全等级保护广义上为涉及到该工作的标准、产品、系统、信息等均依据等级保护思想的安全工作;狭义上一般指信息系统安全等级保护。 工业控制系统安全扩展要求 室外控制设备物理防护 室外控制设备应放置于采用铁板或其他防火

行业认证标准:UL 2900网络安全标准保护物联网(IoT)的安全-爱代码爱编程

什么是UL 2900? UL 2900是用于网络可连接产品的网络安全标准,有助于保护物联网(IoT)的安全,尤其是与功能安全有关的标准。随着连接设备的增长,确保这些设备即使在受到攻击时也能正常运行比以往任何时候都更为重要。该标准的某些版本专门针对医疗设备和核电进行了调整。 FDA认可该医疗版本适用于医疗设备和软件的安全性。UL 2900依赖于CWE和OW

获取Webshell的常用方法(二)-爱代码爱编程

实战中获取Webshell过程会面临各种困难:WAF封堵、AV查杀、权限低等等,本文主要介绍Webshell免杀绕过和提升权限,其中一些方法对于高版本服务器语言和查杀工具已经失效,但文章重在提供基本思路,毕竟攻防博弈,技术动态发展,方法和思路也要随之变化。 文章目录 一、免杀绕过1.字符串变形2.自定义函数3.自定义类4.回调函数5.编

渗透技巧——Windows下NTFS文件的时间属性总结-爱代码爱编程

工具:NewFileTime  SetMace     命令: #先创建文件new-item gh.txt   #powershell显示文件的创建、最后修改、最后访问时间 属性 PS D:\godhat> (ls gh.txt).CreationTimeUtc PS D:\godhat> (ls gh.txt).LastWrite

渗透测试:代码注入漏洞的三三两两-爱代码爱编程

什么是远程文件包含漏洞 程序开发人员通常会把可重复使用的函数写到单个文件中,在使用某些函数时,直接调用此文件,而无需再次编写,这种调用文件的过程一般被称为包含。在通过PHP的函数引入文件时,由于传入 的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。如果PHP的配置选项allow_url_include为ON的话

利用badusb对用户进行木马远控-爱代码爱编程

文章首发先知社区:https://xz.aliyun.com/t/6386 最近接触到利用badsub进行攻击的方法,于是自己研究了一波,先给出一个badusb木马远控案例。 badusb简介 badusb是一种类似于U盘,插入后就会自动执行里面的恶意代码进行恶意操作,由于恶意代码是存在badusb存放固件的区域中,所以杀毒软件和U盘格式化都不能防御b

Potato家族本地提权分析-爱代码爱编程

0x00 前言 在实际渗透中,我们用到最多的就是Potato家族的提权。本文着重研究Potato家族的提权原理以及本地提权细节 0x01 原理讲解 1.利用Potato提权的是前提是拥有SeImpersonatePrivilege或SeAssignPrimaryTokenPrivilege权限,以下用户拥有SeImpersonatePrivilege

DC-1靶机渗透实战-爱代码爱编程

下载地址: https://www.vulnhub.com/entry/dc-1-1,292/ 主机渗透系统: kali linux 渗透过程: nmap全扫存活主机及端口 nmap -sV 192.168.1.1/24 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-02IpjkFX-1606813457741)