技术标签: 安全测试 安全测试工具和靶场实战
XSS攻击,是指攻击者在Web页面中输入恶意的JavaScript脚本,而Web应用程序没有对用户的输入进行过滤或处理就直接执行,将结果输出在网页中。如果恶意JavaScript脚本被存储到后端服务器中,用户打开该Web页面时,恶意脚本则可能在浏览器中自动执行。XSS攻击依赖于JavaScript脚本的执行。一般,攻击者插入恶意脚本后,需要将脚本执行结果显示出来,因此,XSS攻击常见于网站中有用户输入且能够显示的地方,如文章发表、评论回复、留言板等。
以一种或另一种方式,窃取登录用户的cookie。
反射型XSS,是指攻击者在页面中插入恶意JavaScript脚本,当合法用户正常请求页面时,该恶意脚本会随着Web页面请求一并提交给服务器,服务器处理后进行响应,响应由浏览器解析后将JavaScript脚本的执行结果显示在页面中。整个过程就像是一次“客户端—服务器—客户端”的反射过程,恶意脚本没有经过服务器的过滤或处理,就被反射回客户端直接执行并显示相应的结果。反射型XSS需要攻击者将带有恶意脚本的链接发送给其他用户,并诱惑用户点击该链接后才会发生。反射型XSS只有在用户点击时才会触发,且只执行一次,恶意代码不会在服务器中存储,因此也被称为“非持久型XSS”。
利用XSS漏洞时,首先寻找输入点。输入点一般是页面与用户交互之处,用户在输入点输入的数据会被提交到服务器,如URL、表单等。
其次,寻找输出点,确定Web应用程序是否将用户输入的数据显示在网页中。有的业务场景是用户输入数据后,在页面中立刻就能找到输出点,如留言板、评论等。但是,也有不在前端页面中显示的,如私信、意见反馈等,需要人工处理的,则会给XSS攻击增加难度。
最后,进行恶意代码测试。一旦知道了输入点、输出点,就可以构造含有恶意JavaScript脚本的输入,测试页面的输出。
XSS漏洞经常被用来窃取用户的Cookie,用于实施进一步的攻击,如篡改数据、盗取用户、修改用户设置等;也被用于网络钓鱼,使用短信、邮件群发恶意链接,诱导用户点击以获取用户输入敏感信息;甚至可以结合其他漏洞,对服务器发起攻击、植入木马等。在满足具体的业务场景需求时,对XSS攻击的防护较为困难,XSS漏洞范围广、引起的社会影响大,现已受到越来越多的关注。
查找输入输出点,输入内容会直接显示在页面和URL中
构造恶意脚本
Spoiler: ?name=<script>alert("XSS");</script>.
在输入框输入<script>alert("XSS");</script> 点击submit,显示了alert
弹窗显示cookie <script>alert(document.cookie)</script>,发现已获取cookie。
在将请求的输入包含在输出文本中之前,低级别没有对输入进行检查。
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Feedback for end user
echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}
?>
中级反射型XSS渗透测试环境增加了一个“Get input”部分实现对输入参数的过滤
“$name=str_replace(′<script>′,′′,$_GET[′name′]);”语句将name参数值中的所有“<script>”字符串替换为空字符串,过滤该JavaScript标签。
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = str_replace( '<script>', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello {$name}</pre>";
}
?>
使用 `str_replace()` 函数来清除 `<script>` 标记是不足以解决XSS漏洞的。应该使用适当的净化方法和输出编码方法,如 `htmlspecialchars()` 函数或使用模板引擎来生成JavaScript。
因此,建议对用户的输入数据进行彻底的验证和净化,包括过滤特殊字符、将HTML标签转义为它们的HTML实体等。此外,推荐使用先进的Web应用程序防火墙(WAF)和安全性别扫描程序来保护您的Web应用程序免受此类攻击。
由中级的脚本可见,该程序只把<script>替换成了空字符串。
输入低水平攻击,显示了alert("XSS")
但是可以使用大小写绕过,大小写绕过,就是将“<script>”字符串中的部分字符改成大写,使改写后的字符串不与原字符串完全一致,如“<sCrIpT>”,从而绕过防护。在DVWA平台的中级反射型XSS渗透测试页面的文本框中输入“<sCrIpT>alert(document.cookie)</script>”
双写绕过,就是利用“<script>”替换成空字符串的机制,使用“<script>”将“<script>”字符串分隔,如“<scr<script>ipt>”,该字符串中的“<script>”字符串被替换成空字符串后,剩余的字符又组成了“<script>”字符串,从而绕过防护。
在DVWA平台的中级反射型XSS渗透测试页面的文本框中输入“<scr<script>ipt>alert(document.cookie)</script>”,将页面Cookie显示在弹窗中
<?php
header ("X-XSS-Protection: 0");
// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
// Get input
$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );
// Feedback for end user
echo "<pre>Hello {$name}</pre>";
}
?>
高级反射型XSS渗透测试源代码不再是简单地将“<script>”字符串进行替换,而是使用“$name=preg_replace(′/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i′,′′,$_GET[′name′]);”语句中的preg_replace()函数,基于正则表达式进行替换,且添加“i”修饰符,不区分大小写,以防止发生大小写绕过和双写绕过的XSS攻击。
输入低水平脚本,只显示了一个Hello >
过滤了script标签,可以标签绕过,就是将使用<script>以外的其他HTML标签插入JavaScript脚本,从而绕过防护。
“<img src=#οnerrοr=alert(document.cookie)>”,使用<img>标签绕过,成功将页面Cookie显示在弹窗中
用其他标签绕过,比如常用的<body>标签,输入“<body οnlοad=alert(document.cookie)>”
使用内置的PHP函数(如“htmlspecialchars()”), 可以转义任何会改变输入行为的值。
// Get input
$name = htmlspecialchars( $_GET[ 'name' ] );
htmlspecialchars()
是一个PHP函数,它的主要作用是将特殊字符转换为HTML实体。这样做的目的是为了防止这些特殊字符被浏览器误解释为HTML代码的一部分,从而避免了潜在的安全问题。
例如,如果你的用户输入包含 <
、>
、"
、'
和 &
等字符,并且你需要在网页上显示这些输入,但不希望浏览器将这些字符解释为HTML标记或实体,那么你可以使用 htmlspecialchars()
函数来转义这些字符。
$input = "<html>Hello, world!</html>";
$output = htmlspecialchars($input);
echo $output;
输出将是:<html>Hello, world!</html>
。
这样,浏览器会正确地显示文本,而不是尝试将其解释为HTML代码。这样可以防止潜在的跨站脚本攻击(XSS)。
请注意,尽管 htmlspecialchars()
有助于防止XSS攻击,但它并不提供完全的保护。为了实现更高级的安全性,应该使用其他方法,如内容安全策略(CSP)或输出编码函数(例如 htmlspecialchars()
)与输入验证和清理的组合。
文章浏览阅读7.5k次,点赞6次,收藏47次。基于百度文心一言语言大模型的智能文本对话AI机器人API,支持聊天对话、行业咨询、语言学习、代码编写等功能.您的AppKey和uid是重要信息,请务必妥善保存,避免泄漏!您的AppKey和uid是重要信息,请务必妥善保存,避免泄漏!您的AppKey和uid是重要信息,请务必妥善保存,避免泄漏!AppKey申请通过后,登录。请求方式: POST。_文言一心api
文章浏览阅读488次。前言在每个公司的系统中,总有一些拥有复杂业务逻辑的系统,这些系统承载着核心业务逻辑,几乎每个需求都和这些核心业务有关,这些核心业务业务逻辑冗长,涉及内部逻辑运算,缓存操作,持久化操作,外部..._什么业务场景要用到编排工具
文章浏览阅读297次。题目描述若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。例如:给定一个十进制数5656,将5656加6565(即把5656从右向左读),得到121121是一个回文数。又如:对于十进制数8787:STEP1:8787+7878=165165STEP2:165165+561561=726726STEP3:726726+627627=13531..._1、若一个5位数字从左向右读与从右向左读都一样,我们就将其称之为回文串。小申编
文章浏览阅读389次。[font=courier new]86. xdrx_getinters功能:1.求两个AcDbCurve(曲线)实体的交点.2.求一个AcDbCurve(曲线)实体和一个选择集中所有AcDbCurve(曲线)的交点。3.求一个选择集中所有AcDbCurve(曲线)实体的交点.4.求一个选择集SS1中的所有AcDbCurve实体和另个选择集SS2所有AcDbCurve实体的交点。调用格式: 1. ..._lisp inters
文章浏览阅读44次。Problem DescriptionBenny has a spacious farm land to irrigate. The farm land is a rectangle, and is divided into a lot of samll squares. Water pipes are placed in these squares. Different square has...
文章浏览阅读45次。3.获取Java现在正调用的方法名String methodName = Thread.currentThread().getStackTrace()[1] .getMethodName();_java string methodname = thread.currentthread().getstacktrace()[3].getmethod
文章浏览阅读145次。官网文档: http://axis.apache.org/axis2/c/core/docs/axis2c_manual.html从文档中可以总结出:1. Axis2/C是一个用C语言实现的Web Service引擎。Axis2/C基于Axis2架构,支持SOAP1.1和SOAP1.2协议,并且支持RESTful风格的Web Service。基于Axis2/C的Web Service可以..._axis2/c服务端调用axis2_get_instance
文章浏览阅读3k次。目前主要的两种架构方法(准确的说是方法论),具体的方法也是有的,也有可实际操作层面的东西,那要看很多的各个细分专业层面的东西。比如画流程图,业务流程图、数据流程图、系统交互流程图等等。togafzachmanzachman业务建模分析框架,相比于togaf,直观上直接提供了可操作的东西,可能大家更容易接受一些。这里推荐一个架构设计的专业工具,是免费的,即ArchMateArchi – Open Source ArchiMate Modelling (archim..._企业架构方法论
文章浏览阅读123次。堆栈与队列具体的方法区分_判断是栈还是队列还是优先队列
文章浏览阅读352次,点赞8次,收藏8次。小爱老师可以购买两份双拼花束后,将他重新组合成一束百合花+一束郁金香。已知布置会场需要用到x束百合花与y束郁金香,请问小爱老师购买花朵最少花费需多少元?输出共一行,一个正整数,表示小爱老师购买花朵最少花费需多少元。直接购买8束百合+6束郁金香,共计8*8+6*10=124元。内存限制: 256 Mb时间限制: 1000 ms。先购买12束双拼花朵,花费12*8=96元,第一行:两个正整数表示需要的花束数量x,y。第二行:三个正整数表示花束费用a,b,c。再购买2束百合花,花费2*8=16元,
文章浏览阅读518次。使用Python方法比用各种命令方便,可以设置超时时间,到底通不通,端口是否开放一眼能看出来。命令和返回完整权限,可以ping通,端口开放,结果如下:无root权限(省略了ping),端口开放,结果如下:完整权限,可以ping通,远端端口关闭,结果如下:完整权限,可以ping通,本地端口关闭,结果如下:完整权限,不能ping通(端口自然也无法访问),结果如下:pnp.py代码#!/usr/bin/..._python ping ip无管理员权限
文章浏览阅读738次。零极点与系统稳定性的关系 4.状态方程含义 5.使用 zplane 函数 [实验原理] 该实验用 MATLAB 中库函数,如 tf2zp(b,a),ss2zp(A,B,C,D),zplane(z,p),......MATLAB 中相关命令 aa abs 绝对值、模、字符的 ascii 码值 a...零极点与系统稳定性的关系 4.状态方程含义 5.使用 zplane 函数 [实验原理] 该实验用 M..._matlabcla。m文件