DVWA--全等级XSS反射型(Reflected)

在练习之前我们来讲一讲XSS的基本知识吧!

什么是XSS攻击:
XSS是一种经常出现在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中。比如这些代码包括HTML代码和客户端脚本。攻击者利用XSS漏洞旁路掉访问控制–例如同源策略(same origin policy)。这种类型的漏洞由于被黑客用来编写危害性更大的网络钓鱼(Phishing)攻击而变得广为人知。

XSS分类:
类型A,DOM型,本地利用漏洞,这种漏洞存在于页面中客户端脚本自身。
(也就是web开发人员在编写网页脚本时无意间造成的错误)
类型B,反射式漏洞,这种漏洞和类型A有些类似,不同的是Web客户端使用Server端脚本生成页面为用户提供数据时,如果未经验证的用户数据被包含在页面中而未经HTML实体编码,客户端代码便能够注入到动态页面中。
(简单解释一下大致意思,当用户在网站的地址栏输入URL,从服务器端获取到数据时,网站页面会根据返回的信息而呈现不同的返回页面,如果这个时候恶意用户在页面中输入的数据不经过验证且不经过超文本标记语言的编码就录入到脚本中,就会产生漏洞)
类型C,存储式漏洞,该类型是应用最为广泛而且有可能影响到Web服务器自身安全的漏洞,骇客将攻击脚本上传到Web服务器上,使得所有访问该页面的用户都面临信息泄漏的可能,其中也包括了Web服务器的管理员。这种类型的漏洞 可以使恶意用户将javascrip永久性的存储在数据库中。

XSS攻击流程大致如下:
1,发现存在webXSS漏洞web,
2,恶意用户通过该漏洞将javascrip插入到该web的脚本中,等待或欺骗新用户去访问。当用户打开此含有XSS漏洞的页面,脚本运行。如果这个代码是用来获取用户的个人信息,就返回一个信息输入页面,当用户将个人用户信息输入后,当窃取到用户信息后,将该信息发送到恶意用户自行搭建的获取信息的接口。
在这里插入图片描述

介绍完了XSS漏洞的基本含义。作为测试漏洞是否存在的一方,当然要知道如何去寻找漏洞。
1。首先寻找漏洞输入点,一般在客户端界面显示为留言板或查询接口等。
2。当找到这样类似的漏洞输入点后,并不急于去构造相应的payload,而是通过输入一组字符外加一个特殊的识别符(可以是数字组合),提交后查看返回的源码,看是否服务器端做出了上述所说的处理即是否从客户端提交的数据有做相应的过滤或对返回的数据做相应的代码转译。而特殊的识别符就是观察点。如果输入的识别符被原封不动的返回,就说明有很大的几率存在XSS漏洞。
3。最后,根据输出点所在的html译文或者javascrip代码的上下文去构造闭合,最后构造payload

反射型XSS漏洞:
如果一个应用程序使用动态页面向用户显示错误消息,就会造成一种常见的XSS漏洞。通常,该页面会使用一个包含消息文本的参数,并在响应中将这个文 本返回给用户。对于开发者而言,使用这种机制非常方便,因为它允许他们从应用程序中调用一个定制的错误页面,而不需要对错误页面中的消息分别进行硬编码。

Low

我们还是先来看一下源码吧!

 1 <?php
 2
 3 header ("X-XSS-Protection: 0");
 4
 5 // Is there any input?
 6 if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
 7     // Feedback for end user
 8     $html .= ‘<pre>Hello ‘ . $_GET[ ‘name‘ ] . ‘</pre>‘;
 9 }
10
11 ?>

从代码我们知道并没有有对参数name做任何过滤,知识单纯的判断是否为空,所以很明显存在XSS漏洞注入。

array_key_exists() 函数检查某个数组中是否存在指定的键名,如果键名存在则返回 true,如果键名不存在则返回 false。

所以当我们输入指令时,会很容易的执行:

<script>alert(‘我是谁‘)</script> 直接就执行了我们的 js 代码

Medium

源码:

 1 <?php
 2
 3 header ("X-XSS-Protection: 0");
 4
 5 // Is there any input?
 6 if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
 7     // Get input
 8     $name = str_replace( ‘<script>‘, ‘‘, $_GET[ ‘name‘ ] );
 9
10     // Feedback for end user
11     $html .= "<pre>Hello ${name}</pre>";
12 }
13
14 ?>

从源码可以看出,这里的str_replace()函数$name = str_replace( ‘<script>‘, ‘‘, $_GET[ ‘name‘ ] )只把“<script>”做了一次过滤,那我们就对其进行饶过:

1、我们常见的双写饶过:因为只过滤了一次,所以我们搞成双写的完整的过滤了,可是不完整的拼好了,嘻嘻。

<s<script>cript>alert("我拼好了")</script>

2、我们还可以来进行大小写混合,全是大写过滤,只要不全是小写就可以。

<SCRIPT>alert("我变大了")</SCRIPT>

好了,就先这样啊吧!

High

源码:

 1 <?php
 2
 3 header ("X-XSS-Protection: 0");
 4
 5 // Is there any input?
 6 if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
 7     // Get input
 8     $name = preg_replace( ‘/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i‘, ‘‘, $_GET[ ‘name‘ ] );
 9
10     // Feedback for end user
11     $html .= "<pre>Hello ${name}</pre>";
12 }
13
14 ?>

我们可以看到,

$name = preg_replace( ‘/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i‘, ‘‘, $_GET[ ‘name‘ ] );

这个级别的把sccript里面的单个字母都给过滤了,并且不区分大小写,那就是说不能用这个标签了。

但是我们可以通过img、body、i等标签的事件或者iframe等标签的src注入恶意的js代码。

Img标签:

<img src=1 onerror=alert("我试试额")>  这句话的意思是scr=1错误就执行alert("我试试额"),显而易见:

 

iframe标签:

<iframe onload=alert(1)>

Impossible

查看源码:

 1 <?php
 2
 3 // Is there any input?
 4 if( array_key_exists( "name", $_GET ) && $_GET[ ‘name‘ ] != NULL ) {
 5     // Check Anti-CSRF token
 6     checkToken( $_REQUEST[ ‘user_token‘ ], $_SESSION[ ‘session_token‘ ], ‘index.php‘ );
 7
 8     // Get input
 9     $name = htmlspecialchars( $_GET[ ‘name‘ ] );
10
11     // Feedback for end user
12     $html .= "<pre>Hello ${name}</pre>";
13 }
14
15 // Generate Anti-CSRF token
16 generateSessionToken();
17
18 ?>

以看到,Impossible级别的代码使用htmlspecialchars函数把预定义的字符&、”、 ’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素。可以看出,impossible级别的代码先判断name是否为空,不为空的话然后验证其token,来防范CSRF攻击。然后再用htmlspecialchars函数将name中的预定义字符转换成html实体,这样就防止了我们填入标签.

原文地址:https://www.cnblogs.com/li2019/p/12629074.html

时间: 2024-08-30 02:01:37

DVWA--全等级XSS反射型(Reflected)的相关文章

DVWA篇之XSS反射型

1.什么是XSS XSS攻击全称跨站脚本攻击,XSS是一种在web应用中的计算机安全漏洞,它允许恶意web用户将代码植入到提供给其它用户使用的页面中. XSS攻击分成两类: (1).一类是来自内部的攻击,主要指的是利用程序自身的漏洞,构造跨站语句.(2).另一类则是来自外部的攻击,主要指的自己构造XSS跨站漏洞网页或者寻找非目标机以外的有跨站漏洞的网页.如当我们要渗透一个站点,我们自己构造一个有跨站漏洞的网页,然后构造跨站语句,通过结合其它技术,如社会工程学等,欺骗目标服务器的管理员打开. XS

dvwa全等级命令行注入

1.LOW等级命令行注入 在低等级的命令行注入没有任何的过滤,通过查看源码可以得知, step1:使用ping 127.0.0.1&&dir可以得出如下结果 step2:使用 ping127.0.0.1&net user可以得到如下运行结果 step3:使用ping 127.0.0.1|dir可以得到如下结果 ps:在这里有必要说一下逻辑运算符“&”和“|”都是什么意思 &&:代表首先执行命令a在执行命令b,但是前提条件是命令a执行正确才会执行命令b,在a执

代码审计中的XSS反射型漏洞

XSS反射型漏洞 一 XSS漏洞总共分三总 XSS反射型漏洞,XSS保存型漏洞,基于DOM的XSS漏洞 这次主要分享XSS反射型漏洞 基本原理:就是通过给别人发送带有恶意脚本代码参数的URL,当URL地址被打开时,特定的代码参数会被HTML解析,执行,如此就可以获取用户的COOIKE,进而盗号登陆. 特点是:非持久化,必须用户点击带有特定参数的链接才能引起. 比如hack甲构造好修改密码的URL并把密码修改成123,但是修改密码只有在登陆方乙才能修改,乙在登陆的情况下点击甲构造好的url将直接在

DVWA 黑客攻防实战(十)反射型 XSS 攻击 Reflected Cross Site Scripting

XSS (Cross-site scripting) 攻击,为和 CSS 有所区分,所以叫 XSS.又是一种防不胜防的攻击,应该算是一种 "HTML注入攻击",原本开发者想的是显示数据,然而攻击者输入却是有破坏性的代码,而且能被解析执行.Symantec在2007年报告更是指出跨站脚本漏洞大概占所有网站漏洞的84%. XSS 大致分成三种类型(白帽子说安全): 反射型,就是本文的内容. 存储型,在这篇文章会介绍. DOM 型,如果用是否会存储在服务器上区分的话,DOM型也是反射型.但比

DVWA篇五:反射型XSS

1      测试环境介绍 测试环境为OWASP环境中的DVWA模块 2      测试说明 XSS又叫CSS (CrossSite Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览该页之时,嵌入其中Web里面的html代码会被执行,从而达到恶意攻击用户的特殊目的,比如获取用户的cookie,导航到恶意网站,携带木马等等.利用该漏洞,攻击者可以劫持已通过验证的用户的会话.劫持到已验证的会话后,攻击发起者拥有该授权用户的所有权限. 3      测试

DVWA(三):SQL injection 全等级SQL注入

(本文不定期更新) 一.所需环境: 1.DVWA 2.web环境 phpstudy/wamp 3.burp suite 二.SQL注入产生的原因: 程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患 用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据或进行数据库操作. 三.关于SQL注入需要注意的几个点: 1.SQL注入的攻击流程: (1)判断注入点:一般分为三大类 GET.POST参数触发SQL注入,Cookie触发注入 (2)判断注入类

DVWA全级别之CSRF(跨站请求伪造)

CSRF(Cross-site request forgery)  CSRF,全称Cross-site request forgery,翻译过来就是跨站请求伪造,是指利用受害者尚未失效的身份认证信息(cookie.会话等),诱骗其点击恶意链接或者访问包含攻击代码的页面,在受害人不知情的情况下以受害者的身份向(身份认证信息所对应的)服务器发送请求,从而完成非法操作(如转账.改密等).CSRF与XSS最大的区别就在于,CSRF并没有盗取cookie而是直接利用 Low 查看服务器端核心代码 可以看到

DVWA篇之XSS存储型

Low级别 当我们在表格中输入名字和内容就会存储到数据库,并在页面显示出来 同样的我们输入一个名字,然后在内容中输入我们的payload语句,分析是否能攻击成功. 攻击成功.这时我们的语句被存储在数据库中. 我们查看一下是否真的被存储在数据库中可以看到在第三行的记录就是我们的payload语句,没有被任何过滤,完完整整的存储在数据库中.因为是存储性的,当我们再次访问的时候肯定会直接出现弹框,这个可以刷新测试. 接下来分析一下造成这个结果的原因,我们查看源代码.trim()函数,用于去除字符串左右

dvwa下利用xss获取cookie并利用

原文地址:https://www.cnblogs.com/zhangyukui/p/11751430.html