pikachu -Xss

跨站脚本漏洞常见类型 危害:存储型>反射型> DOM型
1.反射型 交互的数据一般不会被存在在数据库里面,一次性,所见即所得,一般出现在查询类页面等。
2.存储型 交互的数据会被存在在数据库里面,永久性存储,一般出现在留言板,注册等页面。
3.DOM型 不与后台服务器产生数据交互,是一种通过DOM操作前端代码输出的时候产生的问题,一次性也属于反射型。
xss漏洞形成的原因:
形成XSS漏洞的主要原因是程序对输入和输出的控制不够严格,导致“精心构造"的脚本输入后,在输到前端时被浏览器当作有效代码解析执行从而产生危害。
跨站脚本漏洞测试流程:
1.在目标站点上找到输入点,比如查询接口,留言板等;
2.输入一组”特殊字符+唯一识别字符”, 点击提交后,查看返回的源码,是否有做对应的处理;
3.通过搜索定位到唯一字符,结合唯一字符前后语法确认是否可以构造执行js的条件 (构造闭合) ;
4.提交构造的脚本代码(以及各种绕过姿势),看是否可以成功执行,如果成功执行则说明存在XSS漏洞;
提示:
1.一般查询接口容易出现反射型XSS ,留言板容易出现存储型XSS ;
2.由于后台可能存在过滤措施,构造的script可能会被过滤掉,而无法生效或者环境限制了执行(浏览器) ;
3.通过变化不同的script ,尝试绕过后台过滤机制;
  • 反射型xss(get)

  在输入kobe和其他敏感字符后,按照输入输出,判断出没有对字符进行过滤

 

   输入JavaScript语句后发现不能显示完全,查看源码更改输入字符限制

<input class="xssr_in" type="text" maxlength="20" name="message">

  • 反射型xss(post)

  和get差不多,参数传递为post

<script>alert('Hello')</script>

GET和POST典型区别:
GET是以url方式提交数据;
POST是以表单方式在请求体里面提交;

GET方式的XSS漏洞更加容易被利用, 一般利用的方式是将带有跨站脚本的URL伪装后发送给目标,而POST方式由于是以表单方式提交,无法直接使用URL方式进行攻击,

  • 存储型xss

  存储型xss又名永久性xss,每一次刷新页面都会弹出窗口。输入敏感符号没有被过滤。

  •  DOM型xss

在输入框输入字符以后发现输入的字符被放入一个href中,利用""构造闭合

输入#' onclick="alert('Hello')">
将其拼接成<a href="#" onclick="alert('Hello')">'>what do you see?</a>

  

 

 

 

  •  DOM型xss-x

他的输入从url中获得,构造闭合
#' onclick="alert('Hello')">

  

 

  •  xss之盲打

输入框一般是前端数据交互的地方。在输入框输入语句,然后在后端发现语句没有被过滤。这样在其插入语句,当管理员打开的时候就会执行插入的语句。

这不会立马得到结果,一般尝试输入后管理员执行相应操作才会有结果。

 

 

  •  xss之过滤

在本题中输入<script>时只有>说明script被过滤了,再尝试大小写,并没有被过滤。
然后通过oneerror事件属性(报错)也成功<img src=x onerror= " alert%28%27xss%27%29" />
也可使用其他方式对其编码

 

 

  •  xss之htmlspecialchars

htmlspecialchars()函数把预定义的字符转换为HTML实体。
&(和号)成为&
"(双引号)成为"
'(单引号)成为'
<(小于)成为<
‘>’(大于)成为>

可用的引号类型:
ENT_ COMPAT -默认。仅编码双引号。
ENT QUOTES -编码双引号和单引号。
ENT NOQUOTES -不编码任何引号。
在输入1'1'1"1<1>1&后发现只有'没有被过滤。

<a href="1" 1'1"1<1>1&'="">1'1'1"1<1>1&</a>

输入#' onclick='alert(666)'得到结果

 

  •  xss之href输出

输入Javascript:alert('Hello')
alert被执行,出现弹窗。在这里我们可以做出相应防范,只允许http,https,其次在进行htmlspecialchars处理。

  •  xss之js输出

查看源码后对$ms进行闭合
输入:x'</script><script>alert('xss')</script>'
$ms='tmac';
if($ms.length != 0){
        if($ms == 'tmac'){
            $('#fromjs').text('tmac确实厉害,看那小眼神..')
        }else {
//            alert($ms);
            $('#fromjs').text('无论如何不要放弃心中所爱..')
        }
执行
alert($ms);

  

posted @ 2023-03-18 17:10  Bin_Go  阅读(42)  评论(0编辑  收藏  举报