当前位置:   article > 正文

白帽子讲web安全读后感

白帽子讲web安全读后感

书分四部分:第一部分世界安全观:第一章;第二部分客户端脚本安全:2~6章;第三部分服务端应用安全:7-15章;第四部分互联网公司安全运营:16-18章

这本书,我看了很多遍,第一没接触过web安全时,其实对待很多名词和所谓的原理不是很懂,看的云里雾里,大概就记住些名词,然后就去学习了一些web安全方面的教学视频(B站大学),做了一些相关的实验啊练习啊,在学习交流群里面学习,然后就会对概念有更深的概念,然后再来读这本书,在实验中加深概念,通过概念和实验再去理解原理

第一章 我的安全世界观

安全问题本质就是信任问题【你总要制定一个基准以此判断是否安全,这个基准怎么理解呢,比方上传文件,做的限制和过滤就是一个基准,通过这个基准你去信任自己是否是安全的】

安全是一个持续的过程【攻防都在进步,道高一尺魔高一丈,不断出现的漏洞和对应补丁就是很好的例子去理解为什么持续的安全】

白帽子兵法:

Secure by Default(默认的安全)一方面是白名单思想【黑名单存在被各种可能的绕过】,一方面是最小权限原则(最差的情况即使被攻克了,拿到的权限也不高)

纵深防御原则:一方面是木桶原则【多层次,多方面的去处理安全方面的问题,也就是说各个安全方面都要考虑,比如从代码层面,中间件,数据库,操作系统】,另一方面是在对的地方安全的事【要根据需求进行正确的安全策略,比方在用户富文本提交时过滤不能就单单考虑过滤<script>的< 因为用户也会输入<,怎么理解呢,大概就是我也讲不出来,抽象出灵魂的醍醐灌顶,大概是现在阶段对安全的理解不足,不急,以后懂了回来改好叭╮(╯-╰)╭】

数据和代码分离原则:【这个顾名思义咯,好处也很多,防止数据和程序代码拼接混合,将数据也当成了代码执行(缓冲区溢出也可以理解成一种把数据去改变了程序本身代码,然后一起被执行了),就像sql注入,xss等都是】

不可预测原则:【俗话“最好的防御就是进攻”,对于防御而言,我们一心心思不能只放在自身的防御建设,如果让对手难以攻击也算是一个好的安全策略】

第二章 浏览器安全

同源策略:限制了不同源的“document”和脚本,对当前“document”的读取和设置某些属性【不是和我一伙的人,我不能信任你,万一你揍我呢,这就是害人之心不可有,防人之心不可无的意思叭,对于DOM,Cookie,XMLHttpRequest,第三方软件都存在这个源的问题,就是信任不信任,我知道到对源的策略的一个文件是crossdomain.xml,还有一个SPF协议是DNS里面可以限制ip访问的,书上的例子是讲了一个css引入然后被注入的例子还要flash的crossdomain.xml,道理上其实就是对于不信任的人,就是要做安全过滤和限制】,如何认为是同源【域名(子域名),协议,端口】

浏览器沙箱:多进程浏览器:分为浏览器进程,渲染进程,插件进程,扩展进程,彼此相互隔离【一种分离思想,就是隔离大伙,让大伙不打架,或者不让别人偷偷打我】

恶意网站拦截:基于浏览器厂商推送的恶意网站黑名单来提醒用户

第三章跨站脚本攻击(XSS)

XSS攻击:黑客通过HTML注入的方式,植入脚本,篡改网页,控制浏览器的一种攻击

XSS的类型:反射型【简单的点击然后,反馈,脚本执行在前端,非持久】,储存型(脚本执行,且恶意代码被保存在服务端,导致只要有用户访问改页面就执行改脚本,一般来说用户发生交互的地方容易存在储存型XSS,比如用户个人资料设置,留言等),DOM型(DOM渲染过程中的脚本植入,发生在前端浏览器)

XSS危害和攻击:盗取cookie,通过JavaScript构造GET或POST请求服务器执行一些操作,钓鱼

XSS构造技巧:利用字符编码【像宽字节注入一样的手法,加入%c1构成新的Unicode字符,去吧过滤字符吃掉】绕过长度限制【方法一利用注释,方法二把代码藏在location.hash然后利用Event来攻击,具体没试过就是啦】<base>标签【这个有点狠,作用是定义页面使用的相对路径,这样存在借你之手去揍你朋友的可能】Windows.name不受同源策略限制

XSS防御:禁止JavaScript访问带有HttpOnly的 cookie HtmlEncode【转义除了数字和字母的字符】输入检测,输出检测【这里就要体现前面的在正确的地方干正确的事了,以不同的过滤去对待,HTML CSS URL <Scripte> 事件,富文本】

第四章跨站点请求伪造(CSRF)

俩种cookie,一种是Third-party(本地cookie)只有Expire过期才过期,一种是session cookie关闭页面就结束

CSRF原理:利用的就是session cookie来用户的身份去请求服务器【形象一点就是我给你发你一封带有恶意代码的邮件,你(以你的身份)打开你的qq邮箱,然后点开了我发的“邮件”,然后就中招了】

CSRF的本质:用户的重要的参数都被攻击者给猜到了,也就是黑客知晓了一切然后构造了一条URL去请求【GET抓包修改参数咯,事实上POST也不是绝对安全的】

CSRF的防御:验证码【用户一般是在无意的情况下,黑客的构造的请求,若发生请求时需要用户输入验证码,那就必需与用户交互了,用户就知道了,但是这也做会给用户的体验很差】

Referer Check:对Referer的检查【你从哪里来~我要检查检查!】

CSRF token:这个就是对应不可预测原则,就是把参数和某个随机token参数放一起然后加密,让黑客无法构造URL请求(看CSRF本质来理解),但是要注意的是如果存在XSS的话,token就没意义,因为可以通过XSS得到token这样黑客一样可以构造。【要我说token的原理其实就是哈希来确定参数没被篡改的校验,因此token是关键的,如果被知道了,那哈希就没意义】

第五章点击劫持

点击劫持:视觉上的欺骗手段,在网页上用透明的不可见的iframe覆盖在网页上,让用户点击

手段:半透明,透明,图片覆盖,拖拽

本质:其实和CSRF一样的操作,不同的是这个利用就是和用户的交互

防御:禁止iframe,X-Frame-Option禁止加载iframe

第七章注入攻击

注入攻击的本质:用户的输入和程序代码拼接且被执行

防御sql注入:预编译【先编译一次,大概就是根据查询语句找出对应的语句模板,然后编译成OPT叭好像,然后在和输入的部分组成语句,去最后执行,思路就是让攻击者无法改变sql语句结构和数据代码分离思想叭】,使用全程存储过程【大概先将查询语句放入数据库,然后在直接调用,避免动态的语句生成和执行】,检查数据类型【白名单,我都说了只能放integer了你还想放别的,你是不是尔龙啊】,使用安全函数【各种web语言的编译函数】

第八章问文件上传漏洞:

文件上传:用户上传了一个脚本且这个脚本在服务端被执行

技巧:0x00截断 xx.php0x00.jpg

Apache 文件解析问题(版本1.x 2.x)xx.php.rar.rar.rar 后缀从后往前直到能识别执行

IIS解析问题 (版本 6.0) xx.asp;xx.jpg 分号截断

文件扩展名出错导致改目录文件下的文件都被当作asp执行,  /path/xx.asp;xx.jpg 

PUT,如果开启了WebDav就会出现可以提交PUT方法,那就可以上传奇怪”的东西到服务端了

防御:限制web容器目录,设置为不可解析【事实上还是有些目录一定是要执行脚本的啦】,判断文件类型【就是过滤咯】,随机数修改文件和上传路径【不可预测原则,然后就是让文件能上传,但访问不到】,单独的管理文件上传服务器

第14章PHP数据安全

文件包含漏洞:用户通过函数(include(),require(),include_once(),require_once())上传文件时,不管文件内容都把它当成php来执行

本地文件包含漏洞(LFI):include ‘home/wwwrun/'. $file.'.php';【我感觉就是根据对方服务的目录结构,然后通过函数上传文件,然后让服务器“自爆”家门,需要知晓对方的目录才能构造好文件】

$file文件用户可以控制,当$file为/../etc/passwor\0(零字节截断后面的.php  也可以用缓冲区溢出去截断)然后就include home/wwwrun/../etc/password,这步就相当于你能看到对方本地的文件

需要注意的是,目录其实是未知的,所有对于黑客来说就是要构造和猜解目录,所幸windows目录不多,可以暴力破解。

目录遍历:文件包含,根据上面的来理解,那其实$file可以是../,../../这样就能遍历目录漏洞了,利用这个漏洞时可能../会被过滤,所以就想到编码绕过就行

PHP配置open_basedir可以避免目录遍历,这个配置的文件就是写了限制特定目录的php打开的文件

远程文件包含(RFI):php如果设置的allow_include为ON的话,include/require是可以远程加载文件的【和前者不同的是,这里允许加载远程文件,那就可以让对方去访问我们预先准备好的带有恶意代码的服务器,加载上面的恶意代码文件,以此来达到攻击】

变量覆盖:【俩方面要注意,一方面是存在未初始化的变量,且能被用户影响到(比如GET,POST时提交的参数),最后被执行的时候,可以被影响到】

register_globals例子:

<?php>

echo "Register_globals:".int_get("register_globals")."<br/>"

if($auth){ echo "private"}

<?>

当提交的请求为 www.a.com/test.php?auth=1【事实上,这个参数来自很多地方,比如cookie,POSt,GET等等】

就会时得上面的if判断成立,从而导致意外的执行

这里在php4.2之前是非常泛滥的,因为4.2之前对register_globasl默认ON,之后默认OFF了

extract()函数可以将变量从数组导入符号表【可以方面处理URL中的参数】

Extract()变量覆盖【import_request_variables变量覆盖,parse_str变量覆盖和这个大同小异】

<?php>

$auth='0';

extrace($_GET);

if($auth=1) echo "private!" else echo "public";

<?>

当URL为 www.a.com/test.php?auth=1,问题和上面一致

 代码执行漏洞:【我感觉嗷,就是输入可被修改,最后会影响到正常的代码执行的期望,比方本来是变量A是xxx,然后是从session中读取的,然后另一个函数建立session到销毁session间,又将session储存在服务端,那就说明A读取session时是从服务端内存里面读的,那就出现我们可能可以通过函数建立session的过程,更改session的内容,然后让A读的也是错】

危险函数:

直接执行代码的函数【就是能直接执行php代码的函数】eval(),assert(),system(),exec(),shell_exec(),passthru(),escapesheelcmd(),pcntl_exce()等

文件包含的函数:【能够导入,包含其他文件,并且把该文件当成php来解析的】include(),include_once(),require(),require_once()

本地文件写入的函数【能够写入本地的php代码】:preg_replace()

用户自定义的动态函数执行【用户自定义就是蛮危险的】

回调函数执行代码:【就是A函数去调用B函数的结果,然后那个函数的结果是可能被影响然后修改的,导致的间接篡改A的结果】ob_start(),unserialize()

第四部分就暂不细看,对于目前的我感觉过一遍就行,以后再回来细看。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/代码探险家/article/detail/754622
推荐阅读
相关标签
  

闽ICP备14008679号