前
喜欢就去追寻
互联网本来是安全的。自从有了研究安全的人之后,互联网就变得不安全了。
简介
- 书名:白帽子讲WEB安全
- 作者:吴翰清
- ISBN:9787121160721
WEB 安全相关的入门书籍,范围很广,每个类型的威胁,都有相应的案例。
作为一本较为系统的拾遗书籍,加深自己对 WEB 安全的理解
浏览器(用户)安全
浏览器的同源策略
如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。
浏览器自身用于保证安全的策略
CSRF
Cross-site request forgery,
XSS
Cross-site scripting
ClickJacking 点击劫持
点击劫持,拖拽劫持,经典的例子是 把球放在 海豹的头上。
作用机理是使用 看不见的 iframe
AUTH and Session 会话劫持
Cookies被窃取,被盗取了登陆状态 , SessionID 存在。
当把 Session 放在 URL 里面存在更大的问题,比如有个 邮件里的地址,用户点击之后,这个请求会在 referer 里面带上上一个站点的信息,很容易的泄露了sessionID。
Cookie 保持:使用一个慢速的固定请求保持 cookie 的过期时间。
WEB服务器安全
SQL Injection
这个注入老问题了,后面补充把
Upload 上传点
-
00 截断
这部分是寻找上传点,并且绕过类型检测,以及正确解析。对于 php页面的上传点,如果文件名没有被修改,可以尝试 \00 进行截断。
-
MIME Sniff
如果通过对 文件头的魔数来识别类型的话,我们可以给 php 文件伪造一个 合法jpg的文件头,
-
文件解析
当然,上传了一个文件之后,要对其进行解析,否则只是个图片
又想到之前的 一句话图马
- Apache 文件解析(特性)
apache 的 1.x 2.x 版本中,对文件后缀是 白名单设置 ,如果有文件文件名如下:
a.php.qwe.qwe.qwe.qwe
由于qwe 类型不在其白名单内,所以他不断遍历,直至第一个 php ,这样就把这个文件作为 php 进行解析了。所以 ,我可以伪造 jpg 后缀名绕过类型上传检测,之后使用该解析漏洞使得其进行执行。mine.type
- IIS6
IIS 作为 win下的web 服务器,也是存在着解析漏洞,和 00 截断类似这里是
;
截断:a.asp;asdasd.jpg
显然上面的是一个合法的 文件名,不过IIS 在进行进行的时候,就出现了截断为
a.asp
且另外的一个漏洞是 如果可以新建文件夹, IIS 会把
/*.asp/
文件夹下面所有的 文件都作为 asp 文件进行执行。- nginx
Nginx 这个 官方称为特性的东西,存在于
cgi.fix_pathinfo = 1
这个选项中。实现这样的效果:http://www.example.com/test.jpg/test.php #本身这个文件不存在
在这里,test.jpg 将会作为 php 文件进行解析,问题存在于 nginx 的特性里面,由于是 fast-cgi 的特性导致,由于是 php 结尾的 url 所以是被分发到了 fast-cgi。其按路径进行解析,就会找到 这个jpg 文件执行了。
弱伪随机数/密码学安全
比较有意思,在后面对 加密算法 和加密模式做个总结
Deny of Service
正如其名 拒绝服务攻击,使WEB 服务器失去原有的服务能力,比如选课 XD
协议层
经典方法直接想到的 就是进行疯狂的请求这种方法就称之为 泛洪 flood
- SYN flood
- UDP flood
- UDP flood
- ICMP flood # ping
可见 除了第一种,后面的都是完整的协议。使用最低的资源,得到最高的性能,这个当然是 DOS 所需要的。这里的 SYN 便是,SYN 很熟悉的出现在 网络中的 TCP 协议中,syn syn/ack ack
这样的一个三次握手的协议,SYN 不是一个完整的协议,所以其对发起攻击的要求更低了。
SYN flood 算的上是利用了 TPC 协议的漏洞。我们发起了 SYN 包之后,主机进行应答,我们不做任何回复,主机将进行重复的 3~5 次应答,直至 连接超时被施放。所以,可见 不应答的方法得到了更多的收益(资源占用)。所以SYN 泛洪是很常用的 DOS 的方法。对应方法,可以对 SYN 的发起地址 分配 Cookies 统计气质访问频率, 丢弃过多的请求。
应用层 = CC 攻击
CC 攻击 起源 与对 绿盟的 反DOS 的设备(collaoasar黑洞)的挑战(challenge)所以简并 CC
其攻击原理不同于上面的网络层次。这里是对应用层次的请求进行泛洪,尽可能的消耗服务器的资源,比如 :
数据库的增删查改。HTTP
在应用层产生的攻击其主要的解决方案,是配置服务器,对连接数进行限制,或者进行请求的分发
Slowloris 攻击
这个也是应用层次的攻击, 可以说是利用了 HTTP 协议的漏洞。原理也好理解,我们的 请求中设置 Keep-Alive。而且我们发送畸形的请求头。正常的请求头是 以 \r\n\r\n 结束的。我们使用只有一个 \r\n 的请求头,这样服务器认为 没有有结束或者接收完整,便保持连接,客户端,再以缓慢的速度发送不完整数据,来保持连接。这样的进行数个 连接的保持,就可以很快占用了所有的连接数 导致 DOS。
Server Limie DOS
这个比较有意思,实际上进行DOS 的对象是用户本身,不是服务器。利用了 HTTP 报头的长度限制这一属性。HTTP 中对 请求头的长度限制是 8192Bytes 如果我们使用恶意脚本,在用户的Cookies里面,添加大量的无用信息。导致 请求被 远程服务器 丢弃。
这个可以直接在 浏览器 的Cookies 进行修改,
document.cookie = 'exp1=' + 'a' * 8192
PHP安全
PHP 由于其天生的 特性,所以在WEB 开发上得到了广泛的应用,PHP 作为动态 ,弱类型的语言在方便的同时的确带来了 许多的隐患。
文件包含漏洞
这里的文件包含,在实际上指的是 代码注入, 使得用户代码在远程主机上非法执行。
本地文件包含 LFI
Local File inclusion 正如 python 的 import 一样,PHP 中用于 包含文件使用的 函数是:
- include() / include_once()
- require() / require_once()
在使用上面的函数对文件本身进行引入的时候,解释器会自动的执行引入文件所包含代码。
<? php
include($_GET[test])
?>
上面是示例代码,使用
curl "http://localhost:8000/test.php?test=../a.php“ -v
这样会导致远程主机上的a.php 的非法执行,
TIPS: PHP 内河使用 C 艰辛编写所以在处理字符串的时候,会出现 00 截断,用于绕过不少的文件格式判断。
这里提到了一个很有意思的远程文件包含的方法,WEB 服务器的日志注入。基于 SessionID 的注入。我们本地进行的恶意 Session内容 的构建 (如果可以),之后提交请求,服务器会将我们的 Session的内容进行保存。所以我们可以远程的 include 包含我们注入代码的 session 文件,从而导致了远程的代码包含的复现。
<? php
<?php eval($_POST[test]);?>
?>
如果有拿过站的,就一定知道,功夫再高也怕菜刀这句话。中国菜刀这样的东西,带来了一句话木马的浪潮,这里的一句话木马,就是典型的代码注入,使用这一句话,我们可以实现在远程主机上进行的代码执行
curl "http://localhost:8000/test.php?test=<?php phpinfo();?>“ -v
Web Server 安全
这部分的问题,出在Web 服务器的 漏洞 , 或者说 ummmmm 特性。
Apache 的问题,多数出现在核心模块里面,都是由于其他的模块可能引起的漏洞,但是存在 root 运行的问题,一道被getshell 就是root。Nginx 在不断进化 漏洞还是不少。JBoss 有8080 的默认后台 同 Tomcat 有 8080 的默认管理
后
发现了同样的一篇 WEB 安全的,
随手 PICK 一下