《11招玩转网络安全》之第四招:low级别的DVWA SQL注入

简介: PHP + MySQL、ASP + MSSQL、JSP + PostgreSQL各种组合层出不穷,最终LAMP占了绝对的上风。这种动态页面和数据库结合的方式好处在于可以快速地更换关键位置的参数,坏处则是有可能带来SQL注入漏洞。

以DVWA为例,进行手工注入,帮助读者了解注入原理和过程。

1、启动docker,并在终端中执行命令:

docker ps -a

docker start LocalDVWA

docker ps

执行结果如图4-19所示。
195

图4-19  启动DVWA

2、在浏览器地址栏输入127.0.0.1后回车,浏览器打开了DVWA页面(DVWA在前面的章节中已建立完毕)。先点击左侧栏的DVWA Security,将难度调整至Low级别。单击左侧栏的SQL Injection,进入SQL注入页面,如图4-20所示。
image196
图4-20  DVWA SQL注入

3、按照提示在文本框中填入用户ID(这里填入1),单击Submit按钮,执行结果如图4-21 所示。
image197
图4-21  DVWA返回数据

4、返回了两个字段First name和Sumame。先看一下服务器对用户提交的数据User ID是如何处理的。单击页面右下角的View Source按钮,如图4-22所示。
image198
图4-22  Low级别SQL注入代码

从图中可以看出服务器对用户输入的数据id未做任何处理,直接用于SQL语句了。手工注入首先要确定页面到底使用了数据库中多少个字段。再确定各个字段的位置。最后在字段的位置构建SQL语句,进行注入。
5、先确定使用的字段数目,在文本框中输入1’ order by 2#。此时服务器接受数据,$query= “SELECT first_name, last_name From Users WHERE user_id=’1’ order by 2# ”。后面的构建方法大致都是如此,相当于自行输入一个合法的SQL语句的后半截,加入到服务器的SQL语句中去。单击Submit按钮,得到结果如图4-23所示。
image199
图4-23  测试数据库字段1

6、能正常返回页面,说明至少引用了两个字段(因为该页面使用get方式提交数据,所以也可以在地址栏中构建SQL语句进行注入。但需要注意一下,将空格、分号转换成ascii代码格式)。继续在文本框中输入1’ order by 3#,单击Submit按钮,得到的结果如图4-24所示。
image200
图4-24  测试数据库字段2

7、不能返回正常页面,说明页面中应用的数据库字段不超过3。结合前面一次的测试。可以得出结论,该页面引用了数据库中的2个字段。下一步来查看数据库引用字段存放的位置。在文本框中输入1’ union select 1,2#。单击Submit按钮。得到的结果如图4-25所示。
image201
图4-25  测试字段位置

从上图中可以看出,first name后面显示的是第一个字段,Sumame后面显示的是第二个字段。现在可以自行构建SQL语句,进行SQL注入。目前有2个位置可以注入,任选一个都可以,这里选择的是第二个位置。在文本框中输入1’ union select 1,version()#,返回数据库版本,如图4-26所示。
image202
图4-26  返回数据库版本

8、在文本框个输入1’ union select database(),2#。这次选择第一个字段位置注入,返回了数据库名字,如图4-27所示。
image203
图4-27  返回数据库名字

9、已知数据库名字,可以通过查询MySQL的information_schema数据库中的tables表,得到DVWA数据库中的所有表。在文本框中输入1' union select 1,group_concat(table_name) from information_schema.tables where table_schema='dvwa'#,返回DVWA数据库中所有的表,如图4-28所示。
image204
图4-28  返回数据库中的表

10、上图中可以看出,DVWA中的表有guestbook和users,这里需要user表的内容。先获取users表中的字段。在文本框中输入1' union select 1,group_concat(column_name) from information_schema.columns where table_name='user'#,返回获取表users中的所有字段,如图4-29所示。
image205
图4-29  返回表字段

11、这里返回了很多字段,Host,User,Password,Select_priv,Insert_priv,Update_priv,Delete_priv,Create_priv,Drop_priv,Reload_priv,Shutdown_priv,Process_priv,File_priv,Grant_priv,References_priv,Index_priv,Alter_priv,Show_db_priv,Super_priv,Create_tmp_table_priv,Lock_tables_priv,Execute_priv,Repl_slave_priv,Repl_client_priv,Create_view_priv,Show_view_priv,Create_routine_priv,Alter_routine_priv,Create_user_priv,Event_priv,Trigger_priv,Create_tablespace_priv,ssl_type,ssl_cipher,x509_issuer,x509_subject,max_questions,max_updates,max_connections,max_user_connections,plugin,authentication_string,password_expired,is_role,default_role,max_statement_time。但实际上DVWA数据库中的表users中并没有这么多的字段,多出的字段是MariaDB其他数据库中users中的字段。现在要做的是将DVWA数据库中表users的字段分离出来。在文本框中输入1' and exists(select host from users)#,测试user字段是否属于表users。返回结果如图4-30所示。
image206
图4-30  测试host字段

12、返回了错误信息,说明host字段并不是DVWA数据库表users中的字段。继续测试user字段,在文本框中输入1' and exists(select user from users)#,返回结果如图4-31所示。
image207
图4-31  测试user字段

13、能够正常返回,说明user字段是DVWA数据库表users中的字段。继续这个一个个的测试下去。最后得到了数据库DVWA中表users的所有字段,user_id,first_name,last_name,user,password,avatar,last_login,failed_login。

14、已知数据库DVWA中表users的所有字段。现在可以下载表中的数据了。在文本框中输入1' union select 1,group_concat(user_id, first_name, last_name, password, avatar, last_login, failed_login) from users#,返回的结果如图4-32所示。
image208
图4-32  获取表数据

如果需要处理其他的表,按照这个顺序重新处理一遍就可以了。

有兴趣的欢迎一起读这本书《11招玩转网络安全——用Python,更安全》
11

相关文章
|
3月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
135 5
|
3月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
71 5
|
3月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
123 1
|
3月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
48 1
|
7天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术和安全意识等方面的知识,并提供一些实用的技巧和建议,帮助读者更好地保护自己的网络安全和信息安全。
|
7天前
|
安全 算法 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在当今数字化时代,网络安全和信息安全已经成为了全球关注的焦点。随着技术的发展,网络攻击手段日益狡猾,而防范措施也必须不断更新以应对新的挑战。本文将深入探讨网络安全的常见漏洞,介绍加密技术的基本概念和应用,并强调培养良好安全意识的重要性。通过这些知识的分享,旨在提升公众对网络安全的认识,共同构建更加安全的网络环境。
|
10天前
|
存储 安全 算法
网络安全与信息安全:漏洞、加密与意识的三重防线
在数字时代的浪潮中,网络安全与信息安全成为维护数据完整性、确保个人隐私和企业资产安全的基石。本文将深入探讨网络漏洞的成因、加密技术的应用以及安全意识的培养,旨在通过技术与教育的结合,构建起一道坚固的防御体系。我们将从实际案例出发,分析常见的网络安全威胁,揭示如何通过加密算法保护数据安全,并强调提升个人和组织的安全意识在防范网络攻击中的重要性。
|
7天前
|
监控 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全已成为全球关注的焦点。本文将探讨网络安全漏洞、加密技术以及安全意识的重要性,并提供一些实用的建议来保护个人和组织的数据安全。我们将从网络安全漏洞的识别和防范开始,然后介绍加密技术的原理和应用,最后强调安全意识在维护网络安全中的关键作用。无论你是个人用户还是企业管理者,这篇文章都将为你提供有价值的信息和指导。
|
7天前
|
安全 网络安全 数据安全/隐私保护
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
在数字化时代,网络安全和信息安全成为了我们生活中不可或缺的一部分。本文将介绍网络安全漏洞、加密技术以及安全意识等方面的内容,帮助读者更好地了解网络安全和信息安全的重要性,并提供一些实用的技巧和方法来保护个人信息和数据安全。
16 2
|
11天前
|
SQL 安全 网络安全
网络安全与信息安全:关于网络安全漏洞、加密技术、安全意识等方面的知识分享
【10月更文挑战第43天】在数字化时代,网络安全和信息安全已成为我们日常生活中不可或缺的一部分。本文将探讨网络安全的重要性,介绍常见的网络安全漏洞,以及如何通过加密技术和提高安全意识来保护我们的信息。我们将通过实际案例和代码示例来深入理解这些概念。无论你是IT专业人士还是普通用户,这篇文章都将为你提供有价值的知识和技能。