环境为PHP+mysqli
sqltest.php PHP部分代码----可以实现地址栏改变x值访问,以及and,or输出全部
<?php
//fendo数据库root用户连接mysql数据库,操作user表
//$id=1;
$id= $_GET['x'];//接受get传递的参数名x的值并赋值给变量id
$conn=mysqli_connect("localhost","root","","fendo",3306);
//$conn = mysql_connect('localhost','root','',"fendo",3306);//连接mysql数据库
//mysql_select_db('fendo',$conn);//选择$conn连接请求下的test数据库名
$sql = "select * from user where id=$id";//定义sql语句并组合变量id
$result = mysqli_query($conn,$sql);//执行sql语句并返回给变量result
while($row = mysqli_fetch_array($result)){//遍历数组数据并显示
echo "ID".$row['id']."</br>";
echo "用户名".$row['username']."</br>";
echo "密码".$row['password']."</br>";
}
mysqli_close($conn);//关闭数据库连接
echo "<hr>";
echo "当前语句:";
echo $sql
?>
HTML部分代码,可以实现x,无法实现and,or,
<html>
<head>
<meta charset="utf-8" />
<title>sql注入测试</title>
<style>
body{text-align:center}
</style>
</head>
<body>
<br>
<?php
include "php/conn.php";
$id=@$_GET['id'];//id未经过滤
$conn=mysqli_connect("localhost","root","","fendo",3306);
if($id==null){
$id="1";
}
mysqli_query($conn,"set names utf8");
$sql = "SELECT * FROM user WHERE id='$id'";
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_array($result);
echo $row['username'];
?>
<font size="10" face="Times">sql注入测试</font>
<table border='2' align="center">
<tr>
<td>id:<?php echo $id;?></td>
</tr>
<tr>
<td>标题:<?php echo $row['username'];?></td>
</tr>
<tr>
<td>内容:<?php echo $row['password'];?></td>
</tr>
<tr>
<td>sql内容: <?php echo $sql;?></td>
</tr>
</table>
<a href='./admin.php'>点我进入后台</a>
<a href='http://pmd5.com/'>md5解密可以点我</a>
</body>
</html>
1.判断sql注入---and or判断是可以连接的
加减法 %2b 这里可以转换成+号,也能成功运算以及输出,减号不需要转义直接写;
2.数据库权限判断---and ord(mid(user(),1,1))=114 加入到PHP地址末尾可以,HTML末尾似乎也行;
and (select count(*) from mysql.user)>0 这个应该成功了,当大于5时返回错误,没有任何报错
3.判断字段数 and 1=1 union select 1,2 在PHP里面返回了错误,后面加3,返回正确,这个是行数,就是字段数;
union select null,null,null 几个null就代表几个字段数,正确可以返回,错了什么都没有
order by 1,2,3 一样的效果
4.查询库名---union select 1,database(),3 limit 1,1
union select null,schema_name,null from information_schema.schemata
6.查字段
7.查数据