Web安全:XSS

0x00 浏览器解析网页的过程:

0x01如何检测是否存在xss?

从开发的角度去理解:xss = echo + $_GET/$_POST/$_REQUEST

所以凡是页面存在用户可以提交数据,并且数据可以回显的功能模块。开发者就有可能忘记在回显前过滤,使得功能模块存在xss漏洞。可以通过提交 <script>alert('xss');</script>来进行检测;

 

0x02xss类型:

 1.反射XSS :

你提交的数据成功的实现了XSS,但是仅仅是对你这次访问产生了影响,是非持久型攻击

反射型xss的利用比较困难,需要和社工结合才能实现利用,一般就是社工网站管理员的cookie。

例如:一个网站存在xss漏洞,假设可以通过$_GET方式可以提交的js恶意代码,那么攻击者将构造好的url发给网站管理员

让网站管理员去点击链接,在管理员的主机上触发js代码,取得管理员本地的cookie(后台的身份认证不论是cookie还是session都要基于cookie,管理员如果用无痕浏览模式的话就打不到cookie了),然后发送给攻击者。

因此,很多src平台不接受反射型xss;

可能出现反射型xss的业务功能:

(1) 个性化的欢迎界面:比如欢迎用户xxx,这个xxx就是一个echo点,很可能是用GET或者POST或者COOKIE传过去的。

(2)搜索框:搜索框在没有找到某条信息的时候,开发者可能会设置一个回显:例如没有找到与xxx相关的的信息。这个xxx就是你搜索的内容,这个回显就是一个echo点。

其次,搜索框可能会这样写<input type="text" name="xxx" value="<?php echo $_POST['xxx']">>

为什么要这样写呢?比如说要填一个很长的表单,但是提交后,因为一些数据不规范又跳转到提交页面了,如果没有像上面这样设置value值的话,用户好不容易填好的表单就需要全部重填。

但是为了用户体验,这样写如果忘记在echo 前htmlspecailchars的话,就引入了一个xss漏洞的echo点。

发现方法:F12查看对应代码,选中对应代码,然后右键编辑html,可以查看xss注入后的形状

开发对两个echo点分别做的过滤:

开发对一个echo一定是用了htmlspecailchars()进行了过滤

 

后端对input的echo点完全没有过滤的情况:

<?php
if(isset($_POST['conntent'])){
    echo $_POST['content'];
}
if(isset($_POST['scan'])){
    $scan = $_POST['scan'];
}
?>
<form action="xss.php" method="post">
    输入:<input type="text" name="scan" value=<?php echo isset($scan)?$scan:'' ?>>
    <input type="submit" name="submit" value="submit">
</form>

通过尝试可以构造语句:

""<script>alert('xss');</script><br/

效果如下:

后端如果给input 中的echo点加了过滤:

$scan =htmlspecialchars($_POST['scan']);

输入同样的语句:

其实这就说明htmlspecailchars这个函数本身过滤就存在缺陷

以下是文档中的写法:

但是,经过实践证明:htmlspecialchars 会将单引号转化为双引号的字符实体,并且可能不对<>进行转化

所以,即便是input框中echo点通过htmlspecialchars过滤了,也可能存在xss漏洞

例如:可以如此构造语句:

'' oninput=alert('xss');//

原理:两个''被htmlspecailchars转义成"",oninput的值会被自动加上双引号作为js代码解析.

插入结果:

这样当下次向输入框输入时就会触发oninput事件。

(3)添加友情链接功能:虽然我也不知道为什么要弄这么一个功能,貌似没有必要。

这种实现方法,一般是用 用户在input框中提交的url来替换a标签的url

一般认为echo + 传参=xss 但是添加友情链接 是 href=+传参=xss ,因为用户可以传javascript:alert('xss');

总而言之,要形成xss漏洞,首先js代码要能注入,其次,注入后的js代码必须能执行(不论是echo还是事件触发)

 2.存储XSS:

你提交的数据成功的实现了XSS,存入了数据库,别人访问这个页面的时候就会自动触发

可能出现存储型xss的业务功能:

(1)留言板功能:因为留言板的后台实现,必须是将前台用户提交的数据接收,然后存入数据库中,然后从数据库中搜索,然后显示到留言板页面,用户提交数据必然用到$_GET/$_POST/$_REQUEST来接受,而前台显示留言必然要将数据echo,如果在echo的时候没有过滤,就存在存储型xss;

(2) 用户注册功能:因为用户注册后,注册信息势必要存入数据库,存入数据库的用户信息势必要回显

(3) 上传文件的文件名部分

(4) 管理员界面“显示报错日志” 功能:即管理员界面会echo 用户访问的不存在的网址。那么如果网址就是script代码。就会被echo出来

例如:FineCMS v5.3.0 存储型XSS漏洞的利用,https://www.jianshu.com/p/b114d4220971

3.DOM型XSS

  DOMXSS:

凡是js的dom操作能触发的xss代码的漏洞都算dom型xss。除此之外dom型xss和反射性xss没有任何区别,只不过反射性xss=echo+可控参数,更加容易发现,而dom型xss更为隐蔽。

常见的dom型xss组合例如:domcument.write() + 可控参数 = DOM型xss

相关知识点:

document.write() 可以接受unicode编码值http://tool.chinaz.com/Tools/Unicode.aspx

js中的document.wirte()就相当于php中的echo,可以将输入的值转化为html代码输出,

例如:

<script>document.write('<h1>hello world</h1>');</script>

用于xss:

<script>document.write("<a href=javascript:alert('hello');>test</a>")</script>

<script>document.write("<script>alert('xss');</script>");</script>这种写法是不行的,因为前两个script标签闭合了。

可以将内容转化为unicode编码来解决这个问题。

也可以通过双写来解决这个问题:

<script>document.write("<script>alert('xss');</script><script>alert('hello');</script>");</script>

在一些业务逻辑中,反射性xss/dom型xss也能不用社工而达到管理员的cookie:

例如靶场的这道题目:

https://hack.zkaq.cn/battle/target?id=5af6bd4e332164e7

这道题业务逻辑是这样的:

聊天室首页index.php中存在一个可以get控制参数的dom型xss,但是只有一个dom型xss 攻击者不能干什么

但是这个聊天室有这样一个功能模块:管理员通过dom.php?url=来提交错误页面的功能,提交的错误页面会被以iframe的形式显示在log.html中,那么如果将首页中的构造好的url提交给log.html,(有同源策略的限制),那么就可以打到管理员的cookie

这相当于开发写了一个功能,天然诱骗管理员点击连接。

 

 

0x03 xss注入方法总结:

1.<script>alert('xss');</script>

2.<a href=javascript:alert('xss')>test</a>

javascript是一个伪协议(虽然我开发的时候没有用过,但是见过别人用过)声明了url值是js代码。

3.<img src="h" οnerrοr=alert('xss')> 故意写一个连接错误的图片连接,然后设置当图片加载错误时执行alert语句

onerror:加载失败时触发

onload:加载成功时触发

oninput:有输入框,输入的时候触发

例如:

" οninput=alert('xss');//

"><iframe οnlοad=alert('xss');>

注意:

  1. 多抓包,很多xss注入点,可能前端会效验,但是后端不会效验。
  2. 其次,可能有一些input[type=hidden]存在xss,通过抓包才能发现
  3. 例如:选择头像的功能,看似没有可以插入的地方,但是通过抓包该包或许可以xss注入

如何使用xss平台?

xss平台:http://xss.fbisb.com/xss.php

可以自己写xss的payload代码也可以直接使用xss平台上写好的xss代码

也可以自己搭建xss平台

什么时候使用xss平台?

当发现网站存在存储型xss漏洞的时候,就可以使用xss平台上写好的xss利用代码,将xss代码注入。如果打到了网站管理员的cookie,就可以通过抓包改包使用cookie,伪装成管理员,进入网站后台。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值