如何寻找WEB程序漏洞,及如何利用和防范
|
日期:2007年7月28日 作者: 查看:[大字体
中字体 小字体]
|
作者:小花 QQ:56111981(小华)http://xiaohuar.blogchina.com
转载必须注明出处
文章本打算发到杂志,因为我懒得写了,写了一办就发到自己的BLOG上了。
网络安全是一个非常流行的话题,不论是这方面的专家还是一个普通人,都或多或少涉及其中。 在此环境下,入侵也变得前所未有的活跃。每个人都想成为这领域的高手。 入侵分几个方面,现在以SQL注入和溢出最为流行。我在此浅谈一下SQL注入的相关问题。
其实SQL注入和溢出有异曲同工之妙,都是利用不按正常思维来达到入侵的目的。简单的说就是程序作者想得没有入侵者想得全面,不乏有些作者水平很高,但想投机取巧。 SQL注入简单的理解就是构造特殊的SQL语句,让数据库执行,数据库可以是任何一种。现今注入漏洞层出不穷,似乎没有一个安全的WEB系统。不论国内和国外,隔三岔五报道类似文章。 小菜惊叹作者思路巧妙的同时,心中充满敬畏和感慨。要是我也能公布几个漏洞该多好! 本人就把自己的一些心得写出来分享一下,希望能促成大家快速由菜鸟变成苍鹰。
一 如何寻找漏洞 这个是大家最关心的。大家寻找漏洞只能寻找能读到源代码码的,没有源代码但有注入漏洞的系统只能猜,具有特殊性。网上很多主机用的是成品,它的系统源代码可以从网上下到。至于如何判断主机用的是哪个系统,就需要大家有一定的积累了。这也没法用语言描述,我举个简单的例子。 以动网6为例,看到某个论坛界面酷似动网,9成是动网论坛,再看看下面的版本就知道是动网6了。这个时候就可以去Chinaz下个动网6来读一下,不会ASP的就没办法了。当然漏洞早就公布,我只是告诉大家如何判断主机用哪个WEB系统。 漏洞是如何被发现的呢?其实也没什么诀窍,主要是扎实的基础知识,要是连HTTP协议不懂,不会抓包,也别找漏洞了,找到也不会用,这样最好先补基础知识。有了基础知识,剩下的就是毅力和耐心。论能力,现在好多系统漏洞,张三找的到,李四也找的到。 主要是看谁先找,谁下的工夫深。有的漏洞读一遍源码是找不到的。 找漏洞的过程也是熟悉这个WEB系统的过程,首先要了解它的数据库结构,这是最基本的。接下来就得一个文件一个文件的读。先读不需要权限的。 有的页面开头就来个SESSION判断,就算下面有漏洞都没用。 找漏洞的过程其实就是一个文件一个文件读的过程。下面以一个页面为例。
首先把握系统流程。所谓系统的流程就是系统到底如何执行。一般系统为 开头——中间——结尾 模式。开头一般是输出HTML中<HEAD></HEAD>之间内容,对我们找漏洞没有影响。 一般文件开头都会包含很多头文件,大家看了感到头晕,其实头文件都没什么用。主要是数据库连接文件,全局配置文件,和函数库。我们大可不理会这些东西,再找漏洞时用到了回头再看也不迟。 但是函数库里面关于输入串过滤的函数要重点看一下。 结尾是输出系统版权信息,有的用到SQL查询,不过这里用处也不大,我们可以很粗略的看一下。 中间部分是我们重点关注的地方。
其次重点关注输入变量。因为这些变量是我们控制的,没有外来输入变量也不用谈注入了。 大家要有这样一种概念,不管是GET,POST,还是COOKIE方法,只有是从用户提交的变量都可以由我们指定,我们想让它是多少就是多少。 至于系统取得变量后做了什么过滤是另外一回事。 在输入变量中要重点关注能参与SQL执行的变量,有的变量比如action或者page都是控制流程的,根本就没用,就算改了值也没什么意思。
再者就要深刻了解数据库了,没有对数据库全面的把握,很可能错失很多注入点,这也是高手和菜鸟最大的差别所在。 我们常见的数据库有Access、Mysql和SQLServer,至少要对他们有很深的了解才能找出漏洞。
二 分三个方面并举实例讲解注入点的寻找及利用 1 注入点很容易发现,利用也很简单 这种漏洞相信已经很少了,除非程序作者根本就不关心程序的安全才会有此漏洞。以前经典的 ' or '1=1就属于此类 典型的类似(模型,以下类同) select * from tablename where user='request("user")', select * from tablename where id=request("id") 有的程序对这些变量做了过滤,但不全,也可以归结为这一类。 相信这样的漏洞大家都能发现而且也很容易利用,更不用说防范了。这种漏洞容易找,也很少。我给大家截了几个有漏洞的图,是几个系统存在的类似漏洞。 图一 动网某插件更改密码注入漏洞 图二 某PHP插件ftpid 变量未过滤漏洞 2 注入点容易发现,但利用相对困难 这种漏洞是注入需要很高技巧的,作者也基本不可能避免。 典型的类似
select * from tablename where user='FilterFunc(request("user"))' select * from tablename where id=FilterFunc(request("id"))
也就是把输入的变量做了过滤,但未过滤全,有一线生机。尤其是没过滤引号。这种利用确实存在,大家不要看着简单。 有个程序只过滤了空格,比如以前的BBSXP系统。尤其当用户提交的数据是用COOKIE的时候,作者更有恃无恐,做了简单的过滤。
首先谈如何防范,我给大家一个PHP例子。 function getRequestVariables()
上一篇:北大官方站点被黑
下一篇:入侵DVBBS论坛=入侵传奇服务器,90%的成功率
|
| 如何寻找WEB程序漏洞,及如何利用和防范 相关文章: |
|
|
|
| 如何寻找WEB程序漏洞,及如何利用和防范 相关软件: |
|
|
|