Welcome to the NetSPI SQL Injection Wiki:https://sqlwiki.netspi.com/

因为需要了解下 SQL 注入,就使用 PHP 自己写了一个只有一个网页的网站测试下,现在记录下过程。。。

直接使用的 KALI系统 (KALI官网:Kali Linux | Penetration Testing and Ethical Hacking Linux Distribution)。KALI 是一个渗透测试的神器。集成了好多黑客工具,当然也就集成了许多开发所需的环境。

这里只涉及 MySQL 和 apache

启动 MySQL :

root@kali:~# systemctl start mysql      //启动 mysql 服务
root@kali:~# systemctl status mysql     //查看 mysql 状态

SQL 建表脚本(添加一些测试数据):

MySQL样例数据库脚本:MySQL样例数据库脚本_数据库脚本-MySQL代码类资源-CSDN下载

DROP SCHEMA IF EXISTS world;
CREATE SCHEMA world;
USE world;
SET AUTOCOMMIT=0;--
-- Table structure for table `City`
--DROP TABLE IF EXISTS `City`;CREATE TABLE `City` (`ID` int(11) NOT NULL AUTO_INCREMENT,`Name` char(35) NOT NULL DEFAULT '',`CountryCode` char(3) NOT NULL DEFAULT '',`District` char(20) NOT NULL DEFAULT '',`Population` int(11) NOT NULL DEFAULT '0',PRIMARY KEY (`ID`),KEY `CountryCode` (`CountryCode`),CONSTRAINT `city_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `Country` (`Code`)
) ENGINE=InnoDB AUTO_INCREMENT=4080 DEFAULT CHARSET=latin1;--
-- Dumping data for table `City`
--
-- ORDER BY:  `ID`INSERT INTO `City` VALUES (1,'Kabul','AFG','Kabol',1780000);
INSERT INTO `City` VALUES (2,'Qandahar','AFG','Qandahar',237500);
INSERT INTO `City` VALUES (3,'Herat','AFG','Herat',186800);
INSERT INTO `City` VALUES (4,'Mazar-e-Sharif','AFG','Balkh',127800);
INSERT INTO `City` VALUES (5,'Amsterdam','NLD','Noord-Holland',731200);
INSERT INTO `City` VALUES (6,'Rotterdam','NLD','Zuid-Holland',593321);
INSERT INTO `City` VALUES (7,'Haag','NLD','Zuid-Holland',440900);
INSERT INTO `City` VALUES (8,'Utrecht','NLD','Utrecht',234323);
INSERT INTO `City` VALUES (9,'Eindhoven','NLD','Noord-Brabant',201843);
INSERT INTO `City` VALUES (10,'Tilburg','NLD','Noord-Brabant',193238);
COMMIT;
--
-- Table structure for table `Country`
--DROP TABLE IF EXISTS `Country`;CREATE TABLE `Country` (`Code` char(3) NOT NULL DEFAULT '',`Name` char(52) NOT NULL DEFAULT '',`Continent` enum('Asia','Europe','North America','Africa','Oceania','Antarctica','South America') NOT NULL DEFAULT 'Asia',`Region` char(26) NOT NULL DEFAULT '',`SurfaceArea` float(10,2) NOT NULL DEFAULT '0.00',`IndepYear` smallint(6) DEFAULT NULL,`Population` int(11) NOT NULL DEFAULT '0',`LifeExpectancy` float(3,1) DEFAULT NULL,`GNP` float(10,2) DEFAULT NULL,`GNPOld` float(10,2) DEFAULT NULL,`LocalName` char(45) NOT NULL DEFAULT '',`GovernmentForm` char(45) NOT NULL DEFAULT '',`HeadOfState` char(60) DEFAULT NULL,`Capital` int(11) DEFAULT NULL,`Code2` char(2) NOT NULL DEFAULT '',PRIMARY KEY (`Code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;--
-- Dumping data for table `Country`
--
-- ORDER BY:  `Code`INSERT INTO `Country` VALUES ('ABW','Aruba','North America','Caribbean',193.00,NULL,103000,78.4,828.00,793.00,'Aruba','Nonmetropolitan Territory of The Netherlands','Beatrix',129,'AW');
INSERT INTO `Country` VALUES ('AFG','Afghanistan','Asia','Southern and Central Asia',652090.00,1919,22720000,45.9,5976.00,NULL,'Afganistan/Afqanestan','Islamic Emirate','Mohammad Omar',1,'AF');
INSERT INTO `Country` VALUES ('AGO','Angola','Africa','Central Africa',1246700.00,1975,12878000,38.3,6648.00,7984.00,'Angola','Republic','Jos?Eduardo dos Santos',56,'AO');
INSERT INTO `Country` VALUES ('AIA','Anguilla','North America','Caribbean',96.00,NULL,8000,76.1,63.20,NULL,'Anguilla','Dependent Territory of the UK','Elisabeth II',62,'AI');
INSERT INTO `Country` VALUES ('ALB','Albania','Europe','Southern Europe',28748.00,1912,3401200,71.6,3205.00,2500.00,'Shqip雛ia','Republic','Rexhep Mejdani',34,'AL');
INSERT INTO `Country` VALUES ('AND','Andorra','Europe','Southern Europe',468.00,1278,78000,83.5,1630.00,NULL,'Andorra','Parliamentary Coprincipality','',55,'AD');
INSERT INTO `Country` VALUES ('ANT','Netherlands Antilles','North America','Caribbean',800.00,NULL,217000,74.7,1941.00,NULL,'Nederlandse Antillen','Nonmetropolitan Territory of The Netherlands','Beatrix',33,'AN');
INSERT INTO `Country` VALUES ('ARE','United Arab Emirates','Asia','Middle East',83600.00,1971,2441000,74.1,37966.00,36846.00,'Al-Imarat al-碅rabiya al-Muttahida','Emirate Federation','Zayid bin Sultan al-Nahayan',65,'AE');
INSERT INTO `Country` VALUES ('ARG','Argentina','South America','South America',2780400.00,1816,37032000,75.1,340238.00,323310.00,'Argentina','Federal Republic','Fernando de la R鷄',69,'AR');
INSERT INTO `Country` VALUES ('ARM','Armenia','Asia','Middle East',29800.00,1991,3520000,66.4,1813.00,1627.00,'Hajastan','Republic','Robert Kot歛rjan',126,'AM');
INSERT INTO `Country` VALUES ('ASM','American Samoa','Oceania','Polynesia',199.00,NULL,68000,75.1,334.00,NULL,'Amerika Samoa','US Territory','George W. Bush',54,'AS');
COMMIT;
--
-- Table structure for table `CountryLanguage`
--DROP TABLE IF EXISTS `CountryLanguage`;CREATE TABLE `CountryLanguage` (`CountryCode` char(3) NOT NULL DEFAULT '',`Language` char(30) NOT NULL DEFAULT '',`IsOfficial` enum('T','F') NOT NULL DEFAULT 'F',`Percentage` float(4,1) NOT NULL DEFAULT '0.0',PRIMARY KEY (`CountryCode`,`Language`),KEY `CountryCode` (`CountryCode`),CONSTRAINT `countryLanguage_ibfk_1` FOREIGN KEY (`CountryCode`) REFERENCES `Country` (`Code`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;--
-- Dumping data for table `CountryLanguage`
--
-- ORDER BY:  `CountryCode`,`Language`INSERT INTO `CountryLanguage` VALUES ('ABW','Dutch','T',5.3);
INSERT INTO `CountryLanguage` VALUES ('ABW','English','F',9.5);
INSERT INTO `CountryLanguage` VALUES ('ABW','Papiamento','F',76.7);
INSERT INTO `CountryLanguage` VALUES ('ABW','Spanish','F',7.4);
INSERT INTO `CountryLanguage` VALUES ('AFG','Balochi','F',0.9);
INSERT INTO `CountryLanguage` VALUES ('AFG','Dari','T',32.1);
INSERT INTO `CountryLanguage` VALUES ('AFG','Pashto','T',52.4);
INSERT INTO `CountryLanguage` VALUES ('AFG','Turkmenian','F',1.9);
INSERT INTO `CountryLanguage` VALUES ('AFG','Uzbek','F',8.8);
INSERT INTO `CountryLanguage` VALUES ('AGO','Ambo','F',2.4);
INSERT INTO `CountryLanguage` VALUES ('AGO','Chokwe','F',4.2);
COMMIT;SET AUTOCOMMIT=1;

启动 apache

root@kali:~# systemctl start apache2
root@kali:~# systemctl status apache2

apache 的默认主页是  /var/www/html/index.html。直接访问 http://localhost/index.html

修改 index.html 为 index.php

index.php 内容如下: (数据库连接部分参考:https://www.runoob.com/php/php-pdo.html)

<?php
ini_set("display_errors", "On");
error_reporting(E_ALL | E_STRICT);print('Hello '); // 输出 "Hello " 并且没有换行符
echo "World\n";  // 输出 "World" 并且换行
echo "<br />";
echo "<hr />";
echo '<p align="center">DataBase connect test</p>';$dbms='mysql';      //数据库类型
$host='127.0.0.1';  //数据库主机名
$dbName='world';    //使用的数据库
$user='root';       //数据库连接用户名
$pass='';           //对应的密码
$dsn="$dbms:host=$host;dbname=$dbName";try {// 连接到数据库$dbh = new PDO($dsn, $user, $pass);  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  $dbh->exec('set names utf8'); echo "连接成功<br/>";// sql 语句$strsql="SELECT id,name,countrycode FROM `City` LIMIT 5";//你还可以进行一次搜索操作foreach ($dbh->query($strsql) as $row) {//print_r($row); //你可以用 echo($GLOBAL); 来看到这些值echo "id: {$row['id']}        ";echo "name: {$row['name']}        ";echo "countrycode: {$row['countrycode']}        ";echo "<br />";}$dbh = null;
} catch (PDOException $e) {die ("Error!: " . $e->getMessage() . "<br/>");
}
?><br />
<hr />
<p align="center">input test</p>
<form><div>Input Query ID:<input type="text" name="search" style="width:60%;" ><input type="submit" name="submit" value="Search" ><br /><br />SQL Query String : <?phpif(isset($_GET['submit'])) {$val = $_GET['search'];$str_sql = "SELECT id,name,countrycode FROM City where id = $val";echo "<b>$str_sql</b>";echo "<br />";$dbms='mysql';      //数据库类型$host='127.0.0.1';  //数据库主机名$dbName='world';    //使用的数据库$user='root';       //数据库连接用户名$pass='';           //对应的密码$dsn="$dbms:host=$host;dbname=$dbName";try {// 连接到数据库$dbh = new PDO($dsn, $user, $pass);  $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);  $dbh->exec('set names utf8');        echo "<br /><br />";// 遍历foreach ($dbh->query($str_sql) as $row) {//print_r($row);           //你可以用 echo($GLOBAL); 来看到这些值echo '<table border="1">';echo "<tr>";echo "<td>";echo "id: {$row['id']}        ";echo "</td>";echo "<td>";echo "name: {$row['name']}        ";echo "</td>";echo "<td>";echo "countrycode: {$row['countrycode']}        ";echo "</td>";echo "</tr>";echo "</table>";}$dbh = null;} catch (PDOException $e) {die ("Error!: " . $e->getMessage() . "<br/>");}}else{echo "please input the number ID !!!";}               ?></div>
</form>

浏览器直接访问:http://localhost/index.php

mysql 数据库中结果

到此,我的第一个 php 程序结束。。。。。

一个 简单的 SQL 注入验证

输入要查询的 ID (数字),点击 search 按钮,注意 浏览器 url 变化,传递一个参数 search=1 。然后下面显示查询结果。

现在修改 URL 传递的参数。

修改后的 URL 为 :http://localhost/index.php?search=1 or '1'='1'&submit=Search

再来一个复杂点的 SQL 注入验证:

URL:http://localhost/index.php?search=1 union select code,name,region from Country LIMIT 5;&submit=Search

一个读取文件的 SQL 注入

至此,一个简单的 SQL 注入验证完成。SQL 注入不止这些东西,以后慢慢学习研究。。。

SQL注入攻击与防御 第二版:http://download.csdn.net/detail/hx0_0_8/9284595

PHP、MySQL 注入相关推荐

  1. concat mysql sql注入_sql注入-mysql注入基础及常用注入语句

    最近在教学中,关于SQL注入,总发现学生理解起来有些难度,其实主要的原因是对各类数据库以及SQL语句不熟悉,今天先介绍mysql注入需要掌握的基础, Mysql内置information_schema ...

  2. MySQL注入中报错的利用

    MySQL注入中报错的利用 在很多的情况 下我们不能直接方便的进行注入,于是有了BENCHMARK延迟注射,如果能得到MySQL的错误信息的话,现在又有了更方便的方法. 网上流传了两三种方法,以前我在 ...

  3. mysql内置变量_详解MySQL注入利用的变量

    MySQL注入数据库时,我们可以利用内置的变量来得到更多的mysql信息,下面就让我们一起来了解MySQL注入利用的变量. 当我们注射mysql库的输入点的时候,可以通过version()/user( ...

  4. mysql注入语句解释,MYSQL注入语句实用精解

    MYSQL注入语句实用精解 只讲字符型. order by XX Union select ..... 1' UNION SELECT 1,CONCAT(user(),0x3a,database(), ...

  5. mysql注入提取邮件_【sql注入教程】mysql注入直接getshell

    Mysql注入直接getshell的条件相对来说比较苛刻点把 1:要知道网站绝对路径,可以通过报错,phpinfo界面,404界面等一些方式知道 2:gpc没有开启,开启了单引号被转义了,语句就不能正 ...

  6. jsp mysql 注入_由Jsp+Mysql注入到root权限的全程展 【好久没有安全类文章了,转一篇看看】...

    由Jsp+Mysql注入到root权限的全程展 最近有点空闲,所以写点垃圾文章来消磨一下时间.文中没有什么技术含量,如果要转载,请注明作者并保持文章的完整. 很多人可能都知道asp,php的编程要防止 ...

  7. php爆数据库,php+MySql注入非暴力爆数据库表段

    某群主发了一篇<php+MySql注入非暴力爆数据库表段>的科普,那样的都可以发,我只好也一起发科普了. Author:Juliet 科普: <php+MySql注入非暴力爆数据库表 ...

  8. php+mysql实例注入,PHP+MYSQL注入实例与防范措施总结

    实例 以下是我在服务器测试并成功注入的例子,大家看一下注入实例中的所有参数,有经验的程序员一看便知,如果不太明白可以自己实践一下,或者看一下注入原理(Php+Mysql注入专题教学),有任何疑问请联系 ...

  9. mysql注入扫描网站漏洞工具_sql注入点扫描工具下载-PHP+MYSQL网站注入扫描工具免费版 - 维维软件园...

    你想进行SQL网站注入扫描吗,那么你肯定需要使用专门的注入扫描工具了,请来下载PHP+MYSQL网站注入扫描工具试试吧,本工具是专门针对PHP网站所编写的一款小工具,软件界面是仿教程的hdsi中的PH ...

  10. mysql注入天书(一)Basic Challenges

    [独家连载]mysql注入天书(一)Basic Challenges lcamry / 2016-11-11 06:16:00 / 浏览数 19798 <span class="con ...

最新文章

  1. LeetCode - 15. 3Sum
  2. MaCfee导致Asp.net无法发送邮件的解决办法
  3. bzoj3110 [Zjoi2013]K大数查询
  4. openJDK之如何下载各个版本的openJDK源码
  5. 别被数据分析师骗了!用数据说谎的三种办法
  6. QQ去水印小程序源码全新系统
  7. python糖尿病数据挖掘
  8. jsonrpc(jsonrpc4j)demo
  9. 运算符之前加加后加加的运算规则
  10. 微信小程序消息推送至微信公众平台总结
  11. Duplicate Symbols for Architecture解决办法
  12. Syste类 及常用方法
  13. 2020年 IOS 逆向 反编译 注入修改游戏或APP的调用参数新手系列教程——使用theos tweak 注入hook修改游戏执行代码上传动态头像
  14. 吉米_王:浅谈链表和顺序表
  15. c语言中一般命名方式,C语言常见命名规则
  16. SQLserver的Always On 可用性组
  17. Matlab产生正交矩阵
  18. Unity3D-UI--Layout组件
  19. IOS6 _内置字体库下载,轻松实现字体主体变换
  20. 2020年秋招面试记录——爱奇艺笔试

热门文章

  1. Web安全 PHP反序列化漏洞的 测试.(可以 防止恶意用户利用漏洞)
  2. 基于RK3399ESP8285自动售货柜项目—MP08开发板端代码详解
  3. 基于Html的NBA篮球主题网页设计
  4. gpa2.8申请美国计算机硕士,低GPA去美国留学:GPA2.8,托福低,能申请前50商业分析专业吗...
  5. 基于J2EE的高校毕业生就业信息管理系统
  6. Windows命令行删除文件和文件夹
  7. ETS3/ETS4/ETS5/ETS6软件
  8. 【从零开始游戏开发】MVC 、 ECS 、MMVM模式 | 全面总结 |建议收藏
  9. 前缀和【超详细讲解前缀和】
  10. Vue.js动态改变样式