《反射型XSS》学习

1167 1
小菜鸟一枚 2021-10-30 19:07:54 | 显示全部楼层 |阅读模式
本帖最后由 小菜鸟一枚 于 2021-10-30 19:13 编辑

0x1 XSS扫盲
  1.其实我也不知道啥是XSS,尽管网上说明一大堆,当做一种漏洞就行了,然后利用这种漏洞获取我们需要的信息。
  2.因为未经授权的测试是违法的,所以我们需要一个靶场,下载PHPstudy傻瓜式部署,然后去下载DVWA靶场:https://github.com/digininja/DVWA,按照百度上的教程安装部署:https://jingyan.baidu.com/article/a3a3f81117e5f18da2eb8a09.html
  3.安装好之后的界面如图所示,下面箭头指向的就是今天学习的反射型XSS:
  4.学习环境准备好了接下来就可以试试XSS,DVWA Security记得设置low,先从最简单的来。
0x2 低安全等级
  1.在文本框中输入1,看看有什么反应:

  2.可以看到我输入的字符串会回显在这里,试试js脚本<script>alert("小菜鸟一枚")</script>,看会不会执行:

  3.可以看到可以直接执行js脚本,说明存在XSS漏洞,点击页面右下角的View Source看一看低等级下的PHP源码:
Reflected XSS Sourcevulnerabilities/xss_r/source/low.php<?phpheader ("X-XSS-Protection: 0");// Is there any input?if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {    // Feedback for end user    echo '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';}?>
  4.没有任何防护,获取name后直接echo打印输出了。
0x3 中安全等级
  1.将DVWA Security设置成medium,再来试试刚刚的js脚本<script>alert("小菜鸟一枚")</script>

  2.发现js脚本没有执行,好像去掉了script标签进行输出,那我们怎么办呢?看看中等级下的源码:
<?phpheader ("X-XSS-Protection: 0");// Is there any input?if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {    // Get input    $name = str_replace( '<script>', '', $_GET[ 'name' ] );    // Feedback for end user    echo "<pre>Hello ${name}</pre>";}?>
发现与低安全等级相比,执行了这样一个函数,str_replace,百度一下知道是替换script用的,那我们怎么办呢?
1)让替换后的字符串是<script>alert("小菜鸟一枚")</script>
2)利用html标签不区分大小写的特性,改变标签大小写绕过防护。
  3.试试第一种办法,在脚本标签中插入script,利用只过滤一次的特点,保持脚本的完好,例如:<scr<script>ipt>alert("小菜鸟一枚")</script>,成功。
  4.再试试第二种办法,输入<Script>alert("小菜鸟一枚")</Script>,成功。

0x4 高安全等级
  1.再试试中安全等级下的方法,发现也不行了。

  2.看看源码:
Reflected XSS Sourcevulnerabilities/xss_r/source/high.php<?phpheader ("X-XSS-Protection: 0");// Is there any input?if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {    // Get input    $name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );    // Feedback for end user    echo "<pre>Hello ${name}</pre>";}?>
  3.好家伙,过滤函数从str_replace变成了preg_replace,还用上了正则表达式,于是小菜鸟查阅下资料,这是贪婪匹配script而且加了/i不区分大小写,一下子杜绝了前面的两种方法。
  4.我们想想,平时点击一个按钮就注册了,这不是触发了函数吗?那么我们能不能植入别的标签,利用标签事件触发XSS呢?
多媒体事件(Media Events)通过视频(videos),图像(images)或者音频(audio) 触发该事件,多应用于 HTML 媒体元素比如 <audio>, <embed>, <img>, <object>, 和<video>:onerror    script    当在元素加载期间发生错误时运行脚本
  5.利用多媒体加载错误的事件触发onerror函数执行XSS,例如img标签:<img src=52 onerror=alert("小菜鸟一枚") />,成功触发XSS:
0x5 总结
  1.在网站留言,搜索等地方可以输入:<script>alert("小菜鸟一枚")</script>测试有无XSS
  2.要根据不同的过滤方式,采取不同的攻击手法,例如大小写,多媒体标签等等。
  3.可以alert("不同的内容,例如document.cookie,获取cookie");发挥不同的作用
0x6 参考资料

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

中国红客联盟公众号

联系站长QQ:5520533

admin@chnhonker.com
Copyright © 2001-2026 Discuz Team. Powered by Discuz! X3.5 ( 粤ICP备13060014号 )|天天打卡 本站已运行