前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >PHP渗透基础入门其一

PHP渗透基础入门其一

作者头像
乔千
发布2020-05-01 09:55:53
4460
发布2020-05-01 09:55:53
举报
文章被收录于专栏:用户4667108的专栏

登录注入实例

提示:了解Mysql和php可能更容易理解 构造Mysql语句时利用一些方法使某些不应该返回的数据返回或者执行某种不该执行的命令 这个过程就叫注入 那我们来举个例子:

代码语言:javascript
复制
 $sql='select * from users where userName='$userName' and password='$password'; 

逻辑来源

代码逻辑(建议阅读)来自: https://blog.csdn.net/qq_39630587/article/details/79768838

假如我们想登录username为1的用户 我们应该怎么构建的sql语句??? 如下例子

代码语言:javascript
复制
 select * from users where userName=1 and password=正确密码 

   select * from users where userName=1

当然我们不知道正确密码我们可以试试第二种怎么实现(屏蔽 and password=xxx mysql怎么实现注释屏蔽那?? 答案就是#号就是注释号 # 后面的内容都被注释 yes!! 我们找到了 现在开始构造语句

代码语言:javascript
复制
 select * from users where userName=1 # and password=xxx 

这个语句等效于

代码语言:javascript
复制
  select * from users where userName=1 

那么我们怎么又不是去提交sql语句给后端 我们看看后端代码

代码语言:javascript
复制
    <?php include_once("function/database.php"); 

// $userName = $_POST['userName']; // $password = $_POST['password']; $userName = addslashes($_POST['userName']); $password = addslashes($_POST['password']); getConnect(); $loginSQL = "select * from users where userName='$userName' and password='$password'"; ..... (省略 )我们提交的账户就是变量 userName 密码就是变量 password 但是这里使用addslashes函数(函数过滤了 单引号(’)双引号(")反斜杠()) 呵???这就刚刚好没屏蔽#号我们你像推理可以得出 账户应该是 1 密码可以随便填(因为被#号注释了 导致这个逻辑始终成立

加强方案

1.替换参数各种敏感字符(# ’ or and 等) 仅仅用addslashes函数是不安全的 保证参数的安全

2.使用pdo分两次发生sql语句 99.9%的安全 其中不安全原因来自于配置问题进行编码边缘操作 提示

现在程序的php sql注入几率很小,加上如果使用pdo 就基本不可能了

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020-04-30 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 逻辑来源
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档