1.理论知识
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。
SQL盲注和SQL注入的区别就是盲注它不会有完整的回显,这里分为两种,一种是布尔盲注,另一种是时间盲注。
布尔盲注:会根据我们输入的信息返回true和fales,不会有我们之前SQL注入的报错信息。
时间盲注:没有任何回显,无论输入任何值,返回情况都会按正常的来处理
针对以上两种情况我们会用不同的方法进行处理,具体操作下面会进行讲解。
2.低级
先查看源码
<?php
if( isset( $_GET[ 'Submit' ] ) ) {
// Get input
$id = $_GET[ 'id' ];
$exists = false;
switch ($_DVWA['SQLI_DB']) {
case MYSQL:
// Check database
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
$result = mysqli_query($GLOBALS["___mysqli_ston"], $query ); // Removed 'or die' to suppress mysql errors
$exists = false;
if ($result !== false) {
try {
$exists = (mysqli_num_rows( $result ) > 0);
} catch(Exception $e) {
$exists = false;
}
}
((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res);
break;
case SQLITE:
global $sqlite_db_connection;
$query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';";
try {
$results = $sqlite_db_connection->query($query);
$row = $results->fetchArray();
$exists = $row !== false;
} catch(Exception $e) {
$exists = false;
}
break;
}
if ($exists) {
// Feedback for end user
echo '<pre>User ID exists in the database.</pre>';
} else {
// User wasn't found, so the page wasn't!
header( $_SERVER[ 'SERVER_PROTOCOL' ] . ' 404 Not Found' );
// Feedback for end user
echo '<pre>User ID is MISSING from the database.</pre>';
}
}
?>
通过 query="SELECTfirstname,lastnameFROMusersWHEREuserid=′query = "SELECT first_name, last_name FROM users WHERE user_id = 'query

文章详细介绍了SQL注入的概念,包括如何通过输入恶意SQL命令欺骗服务器执行非预期操作。讨论了两种盲注类型——布尔盲注和时间盲注,并提供了针对这两种情况的不同处理方法。通过实例展示了如何利用注入技术探测数据库信息,如数据库名、表名和字段名,以及如何通过时间延迟判断查询是否成功。
最低0.47元/天 解锁文章
586

被折叠的 条评论
为什么被折叠?



