XSS跨站脚本漏洞学习笔记

0x00 前言

​ XSS攻击通常指的是通过利用网页开发时留下的漏洞,通过巧妙的方法注入恶意指令代码到网页,使用户加载并执行攻击者恶意制造的网页程序。这些恶意网页程序通常是JavaScript,但实际上也可以包括Java、 VBScript、ActiveX、 Flash 或者甚至是普通的HTML。攻击成功后,攻击者可能得到包括但不限于更高的权限(如执行一些操作)、私密网页内容、会话和cookie等各种内容。

0x01 XSS类型

  • 反射型XSS

    反射型XSS也被称为非持久性XSS,是最容易出现的一种XSS漏洞。当用户访问一个带有XSS代码的url请求时,服务器端接受数据后处理,然后把带有XSS代码的数据发送到浏览器,浏览器解析这段代码数据后,造成XSS漏洞。

    <?php
    	$username = $_GET['username'];
    	echo $username;
    ?>
    

    在这段代码中,程序接受username值后再输出,如果恶意用户输入

    username=<script>xss恶意代码</script>	//造成反射型xss
    
  • 存储型XSS

    存储型XSS又被称为持久性XSS,是最危险的一种跨站脚本,出现在允许用户存储数据的各种web应用程序中。当攻击者提交一段XSS代码,服务器端接受并存储,当攻击者再次访问某个页面时,这段代码被程序响应给浏览器,造成XSS跨站攻击。

    测试时,首先要确定输入点与输出点,再根据相应标签构造HTML代码来闭合。

    <script>alert(document.cookie)</script>				//普通注入
    "/><script>alert(document.cookie)</script>			//闭合标签注入
    </textarea>'"><script>alert(document.cookie)</script>//闭合标签注入
    
  • DOM XSS

    DOM通常用于代表在HTML、XHTML、XML中的对象,使用DOM可以允许程序和脚本动态地访问和更新文档的内容、结构和样式。
    在这里插入图片描述
    DOM型XSS不需要与服务器端交互,只发生在客户端处理数据阶段。实例:

    获取URL中content参数的值,并输出。

    <script>
    	var temp = document.URL;				//获取URL
    	var index = document.URL.indexOf("content")+4;
    	var par = temp.substring(index);
    	document.write(decodeURI(par));			//输入获取内容
    </script>
    

    Payload:

    扫描二维码关注公众号,回复: 8983110 查看本文章
    http://www.xxx.org/dom.html?content=<script>alert(/xss/)</script>
    

0x02 检测XSS

  • 手工检测XSS

    1.可得知输出位置时:输入一些敏感字符如"<"、">"、"()"等,在提交请求后查看HTML源代码,查看这些输入的字符是否被转义。
    
    2.无法得知输出位置时:在<div>标签中,<div>xss test</div>;在<input>标签中,
    <input type="text" name="content" value="xss test" />输入 "/>xss test来测试。
    
  • 全自动检测XSS

    1.APPSCAN、AWVS、burp suite等工具。

    2.专业XSS扫描工具:XSSER、XSSF。

0x03 XSS平台搭建

  • 下载xsser.me的源码,解压缩到相应的目录xss。
  • 使用phpMyAdmin在mysql中新建一个数据库xss,将该目录下的“xss.sql”文件导入该数据库。点击执行后,可以看到已经创建好了表。
  • 执行下面的sql语句,改为自己的域名,这里我用的是本地主机搭建的环境。所以直接使用了ip地址“192.168.1.9”。
UPDATE oc_module SET code=REPLACE(code,'http://xss.alisec.cn','http://192.168.1.9/xss')
  • 修该网站目录下面的config.php文件,根据具体情况和注释。
    主机:‘localhost’。
    用户:‘root’
    密码’’
    数据库名’xss’
    表名前缀oc_
    注册normal
    起始url为http://192.168.1.9/xss

  • 访问网站测试一下,然后注册一个新的帐号。因为上面设置了normal模式,所以这里邀请码随便填。

  • 在这里提交注册时旧的版本点击提交注册后会没反应,查看源码,会发现‘type=“button”’,要改为“submit”才能提交。
    注意:如果登陆成功后网站是一片空白的话,则需要编辑php.ini
    打开php.ini文件, 找到output_buffering = 改为on或者任何数字。

  • 进行xss的时候还需要做一件事情,就是url重写。只需要在网站目录下创建一个“.htaccess”文件即可。(仅针对Apache)
    注意:最好将是否启用url rewrite改成true。

  • 如果需要给自己点权限,然后可以发放邀请码。修改user表里相应用户的的adminLevel项的值为“1”即可。phpmyadmin里直接双击修改即可。或者执行sql语句

UPDATE `xss`.`oc_user` SET `adminLevel` = '1' WHERE `oc_user`.`id` =1 LIMIT 1 ;

10、修改config.php文件,经注册配置为只允许邀请注册。然后重新登录。
11、访问“http://192.168.1.9/xss/index.php?do=user&act=invite”页面,发放邀请码。

0x04 XSS高级利用

  • XSS会话劫持
  • XSS Framework
  • XSS GetShell
  • XSS 蠕虫

0x05 修复XSS跨站漏洞

  • 检查输入输出

    php中提供了htmlspecialchars()、htmlentities()函数,可以把一些预定义的字符转换为HTML实体。代码如下:

    <?php
    	@$html = $_GET['xss'];
    	if($html)
    	{
            echo htmlspecialchars($html);
    	}
    ?>
    

    当字符串经过这类函数处理后,敏感字符将会被一一转义。

  • HttpOnly

    HttpOnly是微软公司的Intemnet Explorer 6 SP1引入的-项新特性。这个特性为Cookie提供了一个新属性,用以阻止客户端脚本访问Cookie.至今已经成为一个标准,几乎所有的浏览器都会支持HttpOnly。

发布了22 篇原创文章 · 获赞 24 · 访问量 1984

猜你喜欢

转载自blog.csdn.net/weixin_43872099/article/details/98585335