PHP、MySQL 注入

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 官方网站提供了以下几个示例数据库:Sakila、Employees、world、world_x 以及 menagerie。这些数据库既可以用于日常学习和测试,也可以作为我们设计时数据库的一个参考。

启动 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 : 
		<?php
		if(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

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值