最近把之前所学的一些知识进行一些总结,在课题组呆了这么久,接触比较多的还是Web安全方面的知识,关于系统安全,软件安全确实还不太了解。翻看到以前保存的一些文章,觉得有必要自己做一个总结梳理一下。
Web安全的重点
来课题组之前,为了应付和老师的第一次见面,我在网络上搜索了很多关于网络安全的问题,在知乎零基础如何学习web安全这个问题下面余弦的回答中提到,Web安全的重点在于数据流,也就是要弄清楚数据从何而来,到哪里去,在整个网络状态中数据的流向和过程是怎么样的。当时我觉得有道理,所以在和老师的第一次会面当中提到了这个观点,但是老师并没有什么反应,和我预想中“这个小伙子牛逼啊”的反应不太一样,只是以一种似是而非高深莫测的表情对我微笑。
过了这近两年的时间,我越发地觉得“数据流”这个观点很精髓,我也慢慢明白老师之所以没有表现出非常认可可能是因为这个观点对他来说是理所应当的。不管是sql注入还是xss跨站脚本攻击,还是ftp文件上传漏洞,系统漏洞等等,都是因为不良的数据可以通过这或那的方式到达一些本不应该到达的地方,这些不良的数据可以是一小段代码,或者是一个木马病毒。这里再引用下余弦在回答中引用的栗子:
- 如果在操作系统层上没处理好,比如Linux的Bash环境把“特殊数据”当做指令执行时,就产生了OS命令执行的安全问题,这段“特殊数据”可能长得如下这般:; rm -rf /;
- 如果在存储层的数据库中没处理好,数据库的SQL解析引擎把这个“特殊数据”当做指令执行时,就产生SQL注入这样的安全问题,这段“特殊数据”可能长得如下这般:' union select user, pwd, 1, 2, 3, 4 from users--
- 如果在Web容器层如nginx中没处理好,nginx把“特殊数据”当做指令执行时,可能会产生远程溢出、DoS等各种安全问题,这段“特殊数据”可能长得如下这般:%c0.%c0./%c0.%c0./%c0.%c0./%c0.%c0./%20
- 如果在Web开发框架或Web应用层中没处理好,把“特殊数据”当做指令执行时,可能会产生远程命令执行的安全问题,这段“特殊数据”可能长得如下这般:eval($_REQUEST['x']);
- 如果在Web前端层中没处理好,浏览器的JS引擎把“特殊数据”当做指令执行时,可能会产生XSS跨站脚本的安全问题,这段“特殊数据”可能长得如下这般:'">
web安全常见的几种攻击
就我平常所接触到并且尝试过的攻击中,包括sql注入,xss,缓冲区溢出,弱口令,ftp上传漏洞等,但是在这篇文章HOW TOSuccessfully Hack a Website in 2016!中,我对攻击的类型有了更多的认识,它的重点在于“怎样做”,与其说是常见的几种攻击,不如说一些常见的攻击思路。
侦查目标
一次好的侦查一般包含知道目标运行什么服务,开放哪些端口,提供服务的软件版本,去寻找可利用的漏洞,或者自己去挖掘漏洞。
了解服务的脚本是否是他们自己写的,如果是,关注脚本中让用户输入的那些部分,扫描文件目录,检查源代码,观察服务对不正常的输入的反应。常见的sql注入命令比如:
' OR '1'='1' --
' OR '1'='1' ({
' OR '1'='1' /*
然后构造一些sql语句让服务返回一些信息,去了解目标服务是如何过滤数据的,并尝试绕过这些数据。
如果这些脚本不是他们自己写的,而是利用现成的开源代码,那么好好研究这些代码,利用现成的漏洞或者自己找出可利用的漏洞。
寻找文件目录
寻找后台的文件目录,可以尝试下以下的索引去寻找:
website.com/logs/
website.com/files/
website.com/sql/
website.com/secret/
也可以利用自动化工具像‘dirbsuter ’。当然还有需要重点关注的robots.txt文件,它往往包含了一些重要的路径信息。
远程文件入侵
远程文件入侵允许攻击者将自己的文件,脚本放入到目标服务器中执行,这是服务没有对用户的输入做出足够的检查而导致的。
空字节问题
这个攻击方式好像还蛮流行的,举个例子来说,某一个文件是以".txt"为结尾的文件类型,所以程序员们规定只有以".txt"为结尾的文件可以被打开。但是如果出现这样的文件呢:phppage.php%00.txt 。它会打开phppage.php%00.txt 吗?不会的,实际上fopen函数在遇到null bytes(%00)就会停止,即只会打开phppage.php文件。
事实上,这样的话,其实任何文件都可以通过这种方式被打开。
sql注入问题
通过构造sql注入语句,利用服务漏洞执行构造的语句来达到绕过,得到返回数据的目的。
csrf(Cross-Site Request Forgeries )跨站请求伪造攻击
看了一片文章的介绍,csrf ,引用下其中评论的一段总结:
CSRF(Cross Site Request Forgery)即跨站请求伪造。就是利用后台有规律的接口,例如 localhost/deleteAriticle.php?id=3&username=xiaoxiao,攻击者在被攻击的网站页面嵌入这样的代码,当用户xiaoxiao访问该网站的时候,会发起这条请求。服务器会删除id为3的数据。
客户端防范:对于数据库的修改请求,全部使用POST提交,禁止使用GET请求。
服务器端防范:一般的做法是在表单里面添加一段隐藏的唯一的token(请求令牌)。
暴力破解
简单来说就是一个个试。
缓冲区溢出攻击
利用缓冲区溢出漏洞使得代码溢出执行设置好的而已代码,具体可以看缓冲区溢出,这个不知道算不算web安全了。
总结
总结了一下发现自己不懂的又多了一点,WTF。