SQL注入
2018年7月15日
2 min read
网络安全数据库
注入测试
- 数字型:
- 字符型:
- 搜索型:
http://www.sql.com/xxx.php?id=1 假设ID为存在注入的参数
http://www.sql.com/xxx.php?id=1‘ 语句报错
http://www.sql.com/xxx.php?id=1 and 1=1 页面正常返回结果
http://www.sql.com/xxx.php?id=1 and 1=2 页面返回错误
实例:
low级别的代码:
<?php
if( isset( $_REQUEST[ 'Submit' ] ) ) {
// Get input
$id = $_REQUEST[ 'id' ];
// Check database
$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>' );
// Get results
while( $row = mysqli_fetch_assoc( $result ) ) {
// Get values
$first = $row["first_name"];
$last = $row["last_name"];
// Feedback for end user
echo "<pre>ID: {$id}<br />First name: {$first}<br />Surname: {$last}</pre>";
}
mysqli_close($GLOBALS["___mysqli_ston"]);
}
?>
可以看出,id为存在sql注入的参数。 不过现实中是看不到后台代码的,要通过测试来判断注入类型。
测试过程:
- 判断注入是字符型还是数字型
输入1,正常返回查询结果
使用数字型语句测试 1 or 1=1;#
- 查询列数
- 判断字段显示顺序
- 查询当前用户与数据库名
- 查询数据库中的表
- 查询users表中的字段名
- 爆破数据