【PHP代码审计】 那些年我们一起挖掘SQL注入 - 6.全局防护Bypass之一些函数的错误使用
0x01 背景
PHP程序员在开发过程中难免会使用一些字符替换函数(str_replace)、反转义函数(stripslashes),但这些函数使用位置不当就会绕过全局的防护造成SQL注入漏洞。
0x03 漏洞分析
str_replace函数的错误使用
第一种情况是写程序时会使用str_replace函数将参数中的单引号、括号等字符替换为空,这样在一些双条件查询的情况就会引发注入问题。缺陷代码如下:
<?php
|
浏览器输入”http://localhost/sqltest/streplace.php?id=1'&title=news title”,发现报错了,我们直接打印出执行的sql语句如下图:
发现参数id右边的单引号被反斜杠转义成字符了,说明又可以注入了。
简单分析下上面id参数的执行过程,-1’经过addslashes函数转义后变成了-1\’,然后再经过str_replace函数干掉了单引号变成了-1\,最后带入查询的语句才是下面这样:
SELECT * FROM news WHERE id='1\' and title='news title'
反斜杠转义了sql查询语句里id后面那个单引号,导致title参数可以构造sql注入语句了,我们直接构造获取管理员账户密码的语句”http://localhost/sqltest/streplace.php?id=-1'&title=unionselect 1,2,concat(name,0x23,pass) from admin%23”
第二种情况是str_replace函数是用户可控的,就是说用户想把啥替换成空就可以将什么替换为空。
首先我们先看看addslashes函数对%00-%ff的转义情况,经过fuzz发现%00会被转义为\0,如下:
那么注入的时候我们提交%00’,经过addlashes就会变为\0\’,这时候我们用replace函数替换0为空就变成了\‘,成功转义了转义字符让单引号逃逸出来,从而造成注入漏洞。
stripslashes函数的错误使用
这个函数的定义是删除由 addslashes() 函数添加的反斜杠,所以很明显使用不当的话就会引发SQL注入。缺陷代码如下:
<?php
|
浏览器输入”http://localhost/sqltest/stripslashes.php?id=-1'",发现报错了,echo出执行的sql语句如下图:
分析下参数id的执行过程,-1’经过addslashes函数转义后变成了-1\’,然后再经过stripslashes函数干掉了反斜杠变成了-1’,所以又可以愉快的注入了。
获取管理员账户密码的语句”http://localhost/sqltest/stripslashes.php?id=-1‘ union select 1,2,concat(name,0x23,pass) from admin%23”
原文链接:http://www.cnbraid.com/2016/04/29/sql5/,如需转载请联系作者。
相关文章
- Php.ini 文件位置在哪里,怎么找到 php.ini
- Can't find PHP headers in /usr/include/php
- php循环,die/exit脚本执行控制,文件载入及错误控制
- Android-68-Tomcat各种启动错误的解决的方法,如:Exception in thread "Thread-6" NoClassDefFoundError,Document base E:
- nmake错误:VCbincl.EXE: 返回代码“0xc0000135“
- 【Vue3】Vite打包发布错误若干问题解决方案,新手遇到的问题都在这里。
- iOS7 下使用SVPullToRefresh 下拉刷新导航栏位置错误
- 微信网页开发之配置说明与常见错误(二)
- 微服务轮子项目(49) -常见JVM内存错误及解决方案
- 线程池运用实例——一次错误的多线程程序设计以及修复过程
- PHP 编程中 10 个最常见的错误,你犯过几个?
- PHP 之 FastCGI 与 mod_php 详解
- C# 程序的错误与调试
- PHP 错误与异常 笔记与总结(6)将错误日志保存在系统日志中
- PHP 错误与异常 笔记与总结(2)错误(Fatal)
- 《精通Spring MVC 4》——1.7 错误与转码配置
- spring参数类型异常输出,SpringMvc参数类型转换错误输出
- net view 提示6118错误 解决方法。
- PHP 小tip .(@)符号和 php if 赋值
- Office Web Apps 错误
- php 在服务器端开启错误日志记录方法
- php base64不能解码_PHP base64编码后解码乱码的解决办法
- PHP百分号转小数,php 小数转换百分数函数
- php模板原理PHP模板引擎smarty模板原理浅谈
- 深入理解php内核 编写扩展 I:介绍PHP和Zend
- php面试题之三——PHP语言基础(基础部分)
- Python中enum误用逗号引发的错误
- 无法访问网页:多是域名或ip地址错误。
- PHP输入流php://input介绍
- linux下无法执行PHP命令,错误 php: command not found
- 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。未找到或无法访问服务器。请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接。
- 致命错误:ext/standard/php_smart_str.h:没有那个文件或目录
- 在win7上安装visual c++ 2008 redistributable 发生错误error 1935