本文主要是介绍《白帽子讲Web安全》读后感笔记,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
1、前言
公众号我停更了3周时间,主要是家里老人住院因而产生的一些家里琐事较多,由于自己没有存稿所以没有办法及时更新。另外一方面自己花了一些时间在复习Java相关知识点,也在看《白帽子讲Web安全》这本书,作者:吴翰清,这本书在年初时就看了一些,但是没坚持看下去,这次我前后花了3~4天左右,累计有效时间约25小时看完。
2、《白帽子讲Web安全》读后感
我摘抄一些自己觉得有意思的部分做了笔记,第一篇 《我的安全世界观》对我于理解网络安全帮助是比较大了,从2023年9月份开始接触学习网络安全,自己发布学习笔记和一些漏洞复现。说实话自己一直是懵懂的状态,挖教育SRC的漏洞提交被拒说危害不大,有参与培训机构提供的一些项目挖了几个漏洞有包含高危等级,但都是业务逻辑漏洞。
《白帽子讲Web安全》虽然是2012年出版,但我认为它对于网络安全从业人员或对网络安全感兴趣的人很有帮助,是一本比较系统、全面讲Web安全的书,有理论也有代码(虽然有些源码无法用了)。一个主题是由浅到深,层层递进,比如《第2章 浏览器安全》的同源策略、浏览器沙箱等。
看完这本书后我还百度作者:吴翰清,真的好厉害,他自己也付出很多努力,再次印证了兴趣是最好的老师。还有关联得知美国的一位天才:凯文·米特尼克。
生活会有很多不如意、不顺,但是不要放弃,多看书、学习,要努力,总会那么一天可以让自己顺心些。要相信风雨过后会有彩虹。
3、《白帽子讲Web安全》摘抄笔记
3.1、XSS攻击绕过相关
3.1.1、利用字符编码
%c1\
组成一个新的Unicode字符,%c1
把转义符号 \
吃掉,从而绕过系统的安全检查。
3.1.2、绕过长度限制
利用事件Event 缩短需要的字节数
<input type=text value="$var" />$var 内容为: "onclick=alert(1)//
组合后: <input type=text value=""onclick=alert(1)// " />
3.2、注入攻击相关
3.2.0、总括
注入攻击的本质: 把用户输入的数据当做代码执行。
1、用户能够控制输入;
2、原本程序要执行的代码,拼接了用户输入的数据。
盲注: 服务器没有错误回显时完成的注入攻击。
常见盲注验证方法(工作原理): 构造简单的条件语句,根据返回页面是否发生变化,来判断SQL语句是否得到执行。
比如:参数:id = 1 ,加了 and 1=2 页面不能正常,但条件变 and 1=1时,页面能正常,可判断参数 id 存在SQL注入漏洞。
还可用延时函数sleep()方式来确认。
3.2.1、攻击存在过程
MS SQL Server
存储过程:xp_cmdshell 可执行系统命令
可操作注册表的存储过程:
xp_regaddmultistring
xp_regdeletevalue
xp_regnumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite
其他可攻击的存储过程:
xp_servicecontrol # 允许用户启动、停止服务
xp_availablemedia # 显示机器上有用的驱动器
xp_dirtree # 允许获得一个目录树
xp_enumdsn # 列举服务器上的ODBC数据源
xp_loginconfig # 获取服务器安全信息
xp_makecab # 允许用户在服务器上创建一个压缩文件
xp_ntsec_enumdomains # 列举服务器可以进入的域
xp_terminate_process # 提供进程的进程ID,终止些进程
3.2.2、编码问题
当数据库使用”宽字符集“时可能会产生一些意想不到的漏洞,比如当MySQL使用GBK编码时,0xbf27 和 0xbf5c 都会被认为是一个字符(双字节字符)。
(图片来源《白帽子讲Web安全》书中插图)
原因是在进入数据库之前,在Web语句中没有考虑到双字节字符问题,双字节字符会被 认为是两个字节。在php中addslashes()
函数或当magic_quotes_gpc
开启时,会在特殊字符前增加一个转义字符\
。
攻击举例:
0xbf27 or 1=1
(图片来源《白帽子讲Web安全》书中插图)
经过转义后会变成 0xbf5c27 ,由于\
的ASCII码为0x5c,0xbf5c 又是一个字符,所以原本会存在的转义字符 \
在数据库中被吃掉变成:
(图片来源《白帽子讲Web安全》书中插图)
3.2.3、解决方案
统一数据库、操作系统、Web应用所使用的字符集,避免各层对字符的理解存在差异。统一设置为UTF-8是一个很好的方法。
3.2.4、正确防御SQL注入
可以使用:预编译语句、存储过程、安全函数和检查数据类型等,但存储过程也可能存在注入问题。
3.2.5、其他注入攻击
其他注入攻击有:XML注入、代码注入和CRLF注入等。CRLF是两个字符,CR是Carriage Return (ASCII 13, \r
),LF 是Line Feed (ASCII 10,\n
)。\r\n
表示换行,十六进制编码分别为 0x0d 、0x0a。
**CRLF注入:**CRLF常用于不同语义之间的分隔符,注入CRLF字符可能改变原有的语义。注入场景:log、HTTP头。防御方法: 处理好 \r
\n
两个保留字,尤其是使用 换行符 作为分割符的应用。
3.3、文件上传漏洞
需要条件:
1、上传 的文件能够被Web容器解释执行
2、用户能从Web上访问这个文件。
3.3.1、设计安全的文件上传功能
1、文件上传的目录设置为不可执行
2、判断文件类型:结合使用MIME Type、后缀检查等方式,推荐使用白名单的方式。
3、使用随机数改写文件名和文件路径
4、单独设置文件服务器的域名
3.4、PHP安全
目录遍历漏洞是一种跨越目录读取文件的方法,PHP配置open_basedir可很好保护服务器,使攻击无效。
PHP上传文件会创建临时文件,目录在php.ini
的 upload_tmp_dir
定义,值默认空,linux默认使用/tmp
,windows默认使用C:\windows\temp
。
可直接执行代码的函数: eval()、assert()、system()、exec()、shell_exec()、passthru()、escapeshellcmd()、pcntl_exec()等。
文件包含函数: include()、include_once()、require()、require_once()。
本地文件写入: file_put_contents()、fwrite()、fputs()等。
3.5、安全开发流程(SDL)
安全开发流程:能够帮助企业以最小的成本提高产品的安全性,战略思想: Secure at the Source。
SDL 全称: Security Development Lifecycle,安全开发生命周期,最早由微软件提出,在软件工程中实施,帮助解决软件安全问题的办法。SDL是一个安全保证的过程,重点是是软件开发,是在开发的所有阶段都引入了安全和隐私的原则。
4、资料获取&我的公众号
如需要《白帽子讲Web安全》PDF版本,请关注公众号:大象只为你,后台回复:白帽子。
敬请关注我的公众号:大象只为你,持续更新网安相关知识中…
这篇关于《白帽子讲Web安全》读后感笔记的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!