low
利用
![](DVWA之SQL Injection Snort规则提取\1.png)
判断是否存在注入,注入是字符型还是数字型
输入1,查询成功
输入1’and ‘1’ =’2,查询失败,返回结果为空:
输入1’or ‘1234 ’=’1234,查询成功:
返回了多个结果,说明存在字符型注入
2.猜解SQL查询语句中的字段数
输入1′ or 1=1 order by 1 #,查询成功:
源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56
| <?php
if( isset( $_REQUEST[ 'Submit' ] ) ) { $id = $_REQUEST[ 'id' ];
switch ($_DVWA['SQLI_DB']) { case MYSQL: $query = "SELECT first_name, last_name FROM users WHERE user_id = '$id';"; $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( '<pre>' . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . '</pre>' );
while( $row = mysqli_fetch_assoc( $result ) ) { $first = $row["first_name"]; $last = $row["last_name"];
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>"; }
mysqli_close($GLOBALS["___mysqli_ston"]); 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); } catch (Exception $e) { echo 'Caught exception: ' . $e->getMessage(); exit(); }
if ($results) { while ($row = $results->fetchArray()) { $first = $row["first_name"]; $last = $row["last_name"];
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>"; } } else { echo "Error in fetch ".$sqlite_db->lastErrorMsg(); } break; } }
?>
|
不用担心,让我为您解释一下 “admin’ or ‘1’=’1” 这个字符串的含义。
这个字符串是一个典型的 SQL 注入攻击的示例。在 SQL 注入攻击中,攻击者试图通过在应用程序的输入字段中注入恶意的 SQL 代码来操纵应用程序的数据库查询。目标是绕过身份验证机制、提取敏感数据、修改数据库记录或执行未经授权的操作。
让我们逐步解析这个 SQL 注入攻击的字符串 “admin’ or ‘1’=’1”:
admin'
: 攻击者输入的用户名或值为 “admin’”,在这里添加了一个单引号 '
。单引号是用来终止 SQL 查询中的值,并创建一个不完整的 SQL 语句。
or
: 这是 SQL 的逻辑运算符 “OR”。攻击者使用它来向 SQL 查询添加额外的条件。
'1'='1'
: 这是攻击者添加的条件,目的是使整个 SQL 语句评估为 “true”(真)。在 SQL 中,将一个值与它自己进行比较将始终返回真。所以,'1'='1'
将会是真。
通过将这个字符串注入到一个易受攻击的 web 应用程序的输入字段中,攻击者可以试图操纵应用程序的 SQL 查询,返回比预期更多的数据,绕过登录检查,或获得未经授权的访问权限。
SQL 注入攻击是严重的安全风险,如果成功执行,可能会造成严重的后果。对于 web 开发人员来说,实施正确的输入验证并使用参数化查询(或预处理语句)来防止应用程序中的 SQL 注入漏洞非常重要。此外,进行 web 应用程序安全测试和定期进行安全审计也是必要的,以发现并修复潜在的漏洞。
middle
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 jaytp@qq.com