2017.4.10 学习记录与感想 (xss、ctf、学习感想)

什么是xss

跨站脚本攻击?

跨站??


xss能做什么?

js能做的一切,xss都能做。

可是我好像对Js还不是很了解


csrf与xss的本质区别?

角度一:

工作原理:

  • XSS:
    攻击者发现XSS漏洞——构造代码——发送给受害人——受害人打开——攻击者获取受害人的cookie——完成攻击
  • CSRF:
    攻击者发现CSRF漏洞——构造代码——发送给受害人——受害人打开——受害人执行代码——完成攻击

而且XSS容易发现,因为攻击者需要登录后台完成攻击。管理员可以看日志发现攻击者。

而CSRF则不同,他的攻击一直是管理员自己实现的,攻击者只负责了构造代码。
CSRF借助受害者的cookie骗取服务器的信任,但是并不能获取到cookie,也看不到cookie的内容。

角度二:

有的,XSS是获取信息,不需要提前知道其他用户页面的代码和数据包。

CSRF是代替用户完成指定的动作,需要知道其他用户页面的代码和数据包。


xss的分类

反射型xss

反射XSS原理

反射XSS是XSS分类中最多的,他们原理是下面这样:

Hacker——发现存在反射XSS的URL——根据输出点的环境构造XSS代码——进行编码、缩短(可有可无,是为了增加迷惑性)——发送给受害人——受害打开后,执行XSS代码——完成hacker想要的功能(获取cookies、url、浏览器信息、IP等等)

感想

在做xss(1-10)题的时候,就是看输入的变量出现在那些语句中,那些标签中,这个就是这个输入变量的所处环境。

然后看过滤了什么,由于黑盒测试、又是手工挖掘的时候,不知道它怎么过滤了,那么就要有自己的fuzzing list,一开始做的很慢就是没有相关的list。然后也不知道怎么过滤。

有一些过滤方法是 跟sql注入中过滤方法是相同或有相似之处的。

本质就是:变量+函数

这道题看距过滤左什么参数就不要用,并且看距源代码当前所处位置是否已经闭合了,看是否插入关键代码就可以

存储型xss

DOM型xss

这个还不是很肯定

区别:

反射型xss和存储型xss的区别?

有无存储在数据库中。


xss的模型

一。

  • <HTML 标签></HTML 标签> [输出] <HTML 标签></HTML 标签>
  • <HTML 标签>[输出]</HTML 标签>

二。

  • <script>...[输出]...</script>
  • <style>...[输出]...</script>

三。

输出在 HTML 属性里的情况


挖掘xss

怎么手工挖掘xss

手工的话,记住一句话“见框就插、改数据包不可见部分、改URL参数、js分析


xss的原理

dvwa xss (low)

源代码:

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Feedback for end user
    $html .= '<pre>Hello ' . $_GET[ 'name' ] . '</pre>';
}

?>

分析:

在输入框中输入语句后,先检查input是否为空,如果不为空,会将input语句放在一个HTML <pre>标签
里面。

浏览器在解析的时候,HTML解码->js解码,解析到<script>标签后,将之后的这段代码交给js解析器去解析,执行alert()语句实行弹框。

漏洞利用:

input = <script>alert(/xss/)</script>


dvwa xss (medium)

源代码:

$name = str_replace( '<script>', '', $_GET[ 'name' ] );

分析:

相比low级别,medium多了将input中的值过滤了<script>,过滤的方法是用str_replace搜索替换掉。

因此要绕过,绕过的方法有

漏洞利用:

  • 双写绕过

input = <scr<script>ipt>alert(/xss/)</scr<script>ipt>
由于只匹配了一次,所以过滤后剩下<script>alert(/xss/)</script>,可成功弹窗

  • 大小写混淆绕过

input = <Script>alert(/xss/)</Script>
直接绕过过滤,可直接弹窗

  • 编码绕过

dvwa xss (high)

源代码:

$name = preg_replace( '/<(.*)s(.*)c(.*)r(.*)i(.*)p(.*)t/i', '', $_GET[ 'name' ] );

. : 匹配除“\n”之外的任何单个字符。
* : 匹配前面的子表达式零次或多次。

分析:

换了个函数,用的是preg_replace(),str_replace()只能替换一次,而preg_replace()可以无限次匹配,由尖括号开始的script标签,不区分大小写。

无法使用<script>标签注入XSS代码,但是可以通过img、body等标签的事件或者iframe等标签的src注入恶意的js代码。

漏洞利用:

输入<img src=1 onerror=alert(/xss/)>,成功弹框:


dvwa xss(Impossible)

源代码

<?php

// Is there any input?
if( array_key_exists( "name", $_GET ) && $_GET[ 'name' ] != NULL ) {
    // Check Anti-CSRF token
    checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );

    // Get input
    $name = htmlspecialchars( $_GET[ 'name' ] );



    // Feedback for end user
    $html .= "<pre>Hello ${name}</pre>";
}

// Generate Anti-CSRF token
generateSessionToken();

?>

分析:

  • PHP htmlspecialchars() 函数
    把预定义的字符 “<” (小于)和 “>” (大于)转换为 HTML 实体:

可以看到,Impossible级别的代码使用htmlspecialchars函数把预定义的字符&、”、’、<、>转换为 HTML 实体,防止浏览器将其作为HTML元素。

  • HTMLSpecialChars重要性

如果不用HTMLSpecialChars,就会导致读取时,要把" <script>"之类的HTML标签“原本”的输出,而这一输出就有漏洞了,万一那个插入数据库的人是黑客,插入的不是一般的字符串,而是 “ <script> <b> <body>”等等之类的东西,读取后,就是一个HTML文档之类的东西,这样,他可以利用这个漏洞欺骗其他人,或者借这个漏洞攻击别人等等,搞个框架跳转到某一网站等等操作。

简言之,用户输入的如何东西都不当标签。

漏洞利用:

None


xss绕过方式

编码绕过原理

绕过方法:

双写绕过

  • 替代函数
    直接基于黑名单思想替换掉某些字符串,如果只是替换了一次的话,那么就双写该字符串,就可以达到绕过的目的。

大小写混淆绕过

  • 替代函数
    直接基于黑名单思想替换掉某些字符串,如果区分大小写的话,那么只要大小写绕过即可。

原因不是语言的原因,没查资料之前我还以为js不区分大小写呢。。。。

JavaScript中的变量是区分大小写的 JavaScript语言是区分大小写的。

换别的标签

  • 正则表达式替换

如果用不了某个标签比如<script>,那么这个时候我们就可以选择别的标签。

那么除了<script>,还有啥标签可以用呢?


最近的感想


ctf&靶机

多精练点好的ctf的题,如果是看过答案再做出来的话,之后要再做一次,巩固一下。

刚开始做ctf会比较难,但是坚持下去就会好很多。

感觉自己现在是有点排斥ctf的,之所以排斥ctf可能是因为一开始做ctf的题时的体验不太好,哈哈哈。
多半是因为自己的基础太薄弱了,在做ctf 题目的时候,就算知道了提示之后,也不知道从何下手。

接下来可以找一些高质量的ctf题目去做做。

选择题目的标准

  • 有源码
  • 有write up

这个标准的本质:从黑盒(做题)和白盒(看源码)的角度去做一遍。

然后再理清一下自己的思路,看看别人的write up ,借鉴一下别人的思路。

然后积累一下。

还有一个必要就是 用mind map将做过的题目分门别类的放入其中,日后看起来就知道自己练习哪些attack face


做练习

3个角度:

  • 黑盒
  • 白盒
  • fuzzing灰盒测试

这3个的思路都是不一样的。

黑盒:

需要步骤list&testing list

白盒:

看代码就是:函数+变量
每一句都看懂即可

还可以调试

灰盒:

工具?


attack face

接触面要光,多积累攻击面,知道在拿到一个站点之后应该从何下手,有哪些步骤。

在做过一个点之后,精练过后就算是积累了一个attack face。

然后之后碰到类似相关的点,应该更多的是经验能够唤起记忆。
又或者自己需要多整理出一些锚点

从两个角度去看待这个attack face问题

  • 技巧:
    多做几次,练熟之后,会利用一些基本的工具。
    但是不要反反复复做同质化的工作

  • 道:
    要有一个research者的心态,多看一些好的paper。
    要有更广的攻击面,积累更多知识。

比如

  • 密码学(应用密码学)
  • 浏览器相关的知识(如何编码解码、如何解析html、js代码)

交流

多跟行内人员交流。


代码审计:

  • 找一些简单的cms来看代码(从开发者的角度出发)
  • 如果在mac上环境搭建不ok,直接用虚拟机跟着教程做一遍吧

tips:

  • 白盒测试和黑盒测试的思路是完全不一样的。
  • XSS 的存在,一定是伴随着输入,与输出 2 个概念的。
  • 要想过滤掉 XSS,你可以在输入层面过滤,也可以在输出层面过滤。
  • 如果输入和输出都没过滤。 那么漏洞将是显而易见的。

资源:

玩转Google的XSS游戏

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值