XSS(跨站脚本漏洞)——皮卡丘练习(小白随笔)

环境准备:小皮(phpstudy)、皮卡丘(pikachu)、burpsuite、火狐浏览器

概念理解:

  XSS(跨站脚本攻击,Cross-site scripting,简称并不是 CSS,因为 CSS是 层叠样式表)是一种常见的 web 安全问题。XSS 攻击手段是允许恶意web用户将代码植入到提供给其它用户使用的页面中。从而达到攻击的目的。如,盗取用户Cookie、破坏页面结构、重定向到其它网站等。

操作步骤:

1、新建txt文档,后缀改为php

<html>  <body>  :静态页面

<?php> 后端代码:在服务器先做计算,在再把计算结果返回到页面

1 <html>
2  <title>XSS TEST</title>
3  <body>
4     <div>这是一个测试页面</div>
5     keyword:<?php echo $_GET['keyword'];?><br>
6  </body>
7 </html>

echo $_GET['k'];   

echo $_POST['keyword'];       // get和post都为变量值,通过k值写入1234567890123

访问结果:

输入:在链接后添加数值

* 也支持运算:

 keyword:<?php echo $_GET['k']+1111;?><br>

 

  如果访问有乱码,将文件另存为其它编码

 

 

 2、在静态代码中增加一条 动态

<html>
 <title>XSS TEST</title>
 <body>
    <div>这是一个测试页面</div>
    <script>alert('XSS!')</script>
    keyword:<?php echo $_GET['k']+1111;?><br>
 </body>
</html>

访问结果:弹窗(此语句在前端执行)

 

3、当传输参数时没有任何过滤,并且参数还能返回到页面,此时可注入js代码

*网站链接注入代码,也可弹窗

获取cookie值:扩展——搜索:安装插件cookie Editor(可看到当前页cookie信息)

(cookie插件)

(cookie信息)

或者链接获取cookie信息:

http://127.0.0.1/1.php?k=<script>alert(document.cookie)</script>

 


 

XSS跨站脚本攻击过程:

1、恶意攻击者通过Email或HITP将构造好的URL发送给普通用户

2、普通用户在浏览器中浏览该URL

3、汶览器执行脚本后,返回数据

4、在普通用户毫不知情的情况下,脚本将其cookie等信息发送给攻击者

5、攻击者使用盗取来的cookie等敏感信息用来伪造用户

 

恶意脚本形式:

1、利用XSS弹警告窗:

<script>alert('XSS!')</script>

2、嵌入其他网站:

<iframe src=http://www.163.com width=1000 height=1000></iframe>

3、获取cookie值:

<script>alert(document.cookie)</script>

4、XSS输入也可能是HTML代码段,如使网页不停刷新:

<meta http-equiv='refresh' content="1;">

 

XSS的危害:

  • 网络钓鱼,包括盗取各类用户账号
  • 窃取用户cookie资料,从而获取用户隐私信息,或利用用户身份进一步对网站执行操作
  • 劫持用户(浏览器)会话,从而执行任意操作,例如进行非法转账,强制发表日志,发送电子邮件强制弹出广告页面,刷流量等
  • 浏览器挖矿
  • 网页挂马
  • 进行恶意操作,例如篡改页面信息,删除文章等
  • 进行大量客户端攻击,如DDOS攻击
  • 获取客户端信息,如用户浏览历史,真实IP,开放端口等控制受害者及其向其他网站发起攻击
  • 结合其他漏洞进一步扩大攻击
  • 传播XSS跨站脚本蠕虫等
  • ......

隐藏的危害:通过网上的 “短链接生成” 等工具将恶意代码藏到短链接,或者生成二维码

 

常见的三种攻击类型:

1、反射型(非持久性):
  一般来说这种类型的XSS,需要攻击者提前构造一个恶意链接,来诱使客户点击,比如这样的一段链接: www.abc.com/?params= <script>alert(/xss/)</script>。

2、存储型(持久型):
  这种类型的XSS,危害比前一种大得多。比如一个攻击者在论坛的楼层中包含了一段JavaScript代码,并且服务器没有正确进行过滤输出,那就会造成浏览这个页面的用户执行这段JavaScript代码。


3、DOM-XSS:
  DOM—based XSS漏洞是基于文档对象模型Document Object Model,DOM)的一种漏洞。客户端的脚本程序可以通过DOM动态地检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM—basedXSS漏洞。

  

  利用代码注入的方法,造成浏览器执行了恶意代码,XSS漏洞是借助服务器漏洞对用户浏览器进行攻击的—种方法;不同浏览器呈现的结果不一样。

  形成XSS漏洞的主要原因是程序对输入和输出没有做合适的处理,导致“精心构造”的字符输出在前端时被浏览器当作有效代码解析执行从而产生危害。

因此在XSS漏洞的防范上,一般会采用“对输入进行过滤”和“输出进行转义”的方式进行处理:
  输入过滤:对输入进行过滤,不允许可能导致XSS攻击的字符输入;
  输出转义:根据输出点的位置对输出到前端的内容进行适当转义。

 


 

pikachu平台测试:

1、反射型(get)

若显示不全,可将字符限制“20”改为“50”,即可解决

访问链接结果:

 

burpsuite抓包分析:

 1 GET /pikachu/vul/xss/xss_reflected_get.php?message=
 2    %3Cscript%3Ealert%28%27XSS%EF%BC%81%27&submit=submit HTTP/1.1
 3 Host: 127.0.0.1
 4 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:105.0) Gecko/20100101 Firefox/105.0
 5 Accept: */*
 6 Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
 7 Accept-Encoding: gzip, deflate
 8 Connection: close
 9 Sec-Fetch-Dest: empty
10 Sec-Fetch-Mode: no-cors
11 Sec-Fetch-Site: same-origin

对应代码:(位置:根据网址找到对应路径下的文本文件)

 1 <?php
 2 /**
 3  * Created by runner.han
 4  * There is nothing new under the sun
 5  */
 6 
 7 
 8 $SELF_PAGE = substr($_SERVER['PHP_SELF'],strrpos($_SERVER['PHP_SELF'],'/')+1);
 9 
10 if ($SELF_PAGE = "xss_reflected_get.php"){
11     $ACTIVE = array('','','','','','','','active open','','active','','','','','','','','','',
12   '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
13   '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
14   '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
15   '','','','','','','','','','','','','','','','','','','','','','','','','','','','','','',
16   '','','','','');
17 
18 }
19 
20 $PIKA_ROOT_DIR =  "../../";
21 include_once $PIKA_ROOT_DIR.'header.php';
22 
23 
24 $html='';
25 if(isset($_GET['submit'])){
26     if(empty($_GET['message'])){
27         $html.="<p class='notice'>输入'kobe'试试-_-</p>";
28     }else{
29         if($_GET['message']=='kobe'){
30             $html.="<p class='notice'>愿你和{$_GET['message']}一样,永远年轻,永远热血沸腾!</p>
31             <img src='{$PIKA_ROOT_DIR}assets/images/nbaplayer/kobe.png' />";
32         }else{
33             $html.="<p class='notice'>who is {$_GET['message']},i don't care!</p>";
34         }
35     }
36 }
37 ?>

 

 2、反射型(post)

   若忘记登录密码:查看他的数据库——小皮

(点击管理——>打开)

 

(百度搜索此值,即可获得密码)

登陆后返回页面结果:

访问后出现弹窗表示成功;抓包制作发送页(post)

制作单独跳转页:

复制链接并访问(在代理环境下)

  点击后又弹出弹窗。

 

3、存储型XSS

输入字符串并加入干扰项元素123:

出现弹窗并存储干扰项123:

(并且再次访问此链接还会出现弹窗)

分析源码:高危风险

1 $link=connect();
2 $html='';
3 if(array_key_exists("message",$_POST) && $_POST['message']!=null){    //校验POST中是否有“massage”键值
4     $message=escape($link, $_POST['message']);
5     $query="insert into message(content,time) values('$message',now())";  //将massage值写入数据库
6     $result=execute($link, $query);
7     if(mysqli_affected_rows($link)!=1){
8         $html.="<p>数据库出现异常,提交失败!</p>";

 

 4、DOM型XSS

 输入语句:aaa'onclick="alert('xss')"

并点击,出现弹窗;点击确定跳转到一个不存在的页面。

出现一个情况:在此操作期间并没有抓到包,直到跳转到其他页面才抓到包。

解释:因为在输入语句进行传参的时候并没有给到服务器,查看源码发现造成此原因是因为DOM型默认有此语句,所以在前端就已经校验 

源码分析: 

1 <script>
2         function domxss(){
3           var str = document.getElementById("text").value;    //从前端直接获取
4           document.getElementById("dom").innerHTML = "<a href='"+str+"'>what do you see?</a>";
        //
"<a href='aaa'onclick="alert('xss')"'>>what do you see?</a>" —— 拼凑 触发原理
5 </script>

 当输入语句:<a href='aaa'onclick="alert('xss')"'>点这里~</a><a style="display:none出现:

 

 5、DOM型XSS-X

(1)输入脚本语句 '><img src="#" onmouseover="alert('xss')">

(2)构造语句 '><img src="a" onerror="alert('xss')">   ——  (会直接弹出告警)

第一种情况的运行结果: 

代码分析:

<script>
     function domxss(){
         var str = window.location.search;
         var txss = decodeURIComponent(str.split("text=")[1]);
         var xss = txss.replace(/\+/g,' ');
//          alert(xss);

         document.getElementById("dom").innerHTML = "<a href=' '><img src="#" onmouseover="alert('xss')"></a><a'>就让往事都随风,都随风吧</a>";
         }                                                          // 引入一个图片“#”,当鼠标划过的时候告警
         //试试:'><img src="#" onmouseover="alert('xss')">
         //试试:' onclick="alert('xss')">,闭合掉就行
</script>

 

 

结束。

posted @ 2022-09-26 18:05  DUDU-  阅读(367)  评论(1编辑  收藏  举报