《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

相关文章
|
1月前
|
SQL 安全 前端开发
Web学习_SQL注入_联合查询注入
联合查询注入是一种强大的SQL注入攻击方式,攻击者可以通过 `UNION`语句合并多个查询的结果,从而获取敏感信息。防御SQL注入需要多层次的措施,包括使用预处理语句和参数化查询、输入验证和过滤、最小权限原则、隐藏错误信息以及使用Web应用防火墙。通过这些措施,可以有效地提高Web应用程序的安全性,防止SQL注入攻击。
54 2
|
3月前
|
SQL 安全 数据库
惊!Python Web安全黑洞大曝光:SQL注入、XSS、CSRF,你中招了吗?
在数字化时代,Web应用的安全性至关重要。许多Python开发者在追求功能时,常忽视SQL注入、XSS和CSRF等安全威胁。本文将深入剖析这些风险并提供最佳实践:使用参数化查询预防SQL注入;通过HTML转义阻止XSS攻击;在表单中加入CSRF令牌增强安全性。遵循这些方法,可有效提升Web应用的安全防护水平,保护用户数据与隐私。安全需持续关注与改进,每个细节都至关重要。
142 5
|
3月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,却也面临着SQL注入、XSS与CSRF等安全威胁。本文将剖析这些常见攻击手段,并提供示例代码,展示如何利用参数化查询、HTML转义及CSRF令牌等技术构建坚固防线,确保Python Web应用的安全性。安全之路永无止境,唯有不断改进方能应对挑战。
86 5
|
3月前
|
SQL 安全 数据安全/隐私保护
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
在构建Python Web应用时,安全性至关重要。本文通过三个真实案例,探讨了如何防范SQL注入、XSS和CSRF攻击。首先,通过参数化查询替代字符串拼接,防止SQL注入;其次,利用HTML转义机制,避免XSS攻击;最后,采用CSRF令牌验证,保护用户免受CSRF攻击。这些策略能显著增强应用的安全性,帮助开发者应对复杂的网络威胁。安全是一个持续的过程,需不断学习新知识以抵御不断变化的威胁。
128 1
|
3月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
在Python Web开发中,构建安全应用至关重要。本文通过问答形式,详细解析了三种常见Web安全威胁——SQL注入、XSS和CSRF,并提供了实用的防御策略及示例代码。针对SQL注入,建议使用参数化查询;对于XSS,需对输出进行HTML编码;而防范CSRF,则应利用CSRF令牌。通过这些措施,帮助开发者有效提升应用安全性,确保网站稳定运行。
61 1
|
3月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
在Web开发领域,Python虽强大灵活,但安全挑战不容小觑。本文剖析Python Web应用中的三大安全威胁:SQL注入、XSS及CSRF,并提供防御策略。通过示例代码展示如何利用参数化查询、HTML转义与CSRF令牌构建安全防线,助您打造更安全的应用。安全是一场持久战,需不断改进优化。
58 3
|
3月前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【9月更文挑战第13天】在开发Python Web应用时,安全性至关重要。本文通过问答形式,详细介绍如何防范SQL注入、XSS及CSRF等常见威胁。通过使用参数化查询、HTML转义和CSRF令牌等技术,确保应用安全。附带示例代码,帮助读者从入门到精通Python Web安全。
96 6
|
3月前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【9月更文挑战第12天】在Web开发中,安全漏洞如同暗礁,尤其对初学者而言,SQL注入、跨站脚本(XSS)和跨站请求伪造(CSRF)是常见挑战。本文通过实战案例,展示如何利用Python应对这些威胁。首先,通过参数化查询防止SQL注入;其次,借助Jinja2模板引擎自动转义机制抵御XSS攻击;最后,使用Flask-WTF库生成和验证CSRF令牌,确保转账功能安全。掌握这些技巧,助你构建更安全的Web应用。
71 5
|
5月前
|
SQL 安全 数据库
Python Web开发者必看!SQL注入、XSS、CSRF全面解析,守护你的网站安全!
【7月更文挑战第27天】在 Python Web 开发中, 安全至关重要。
79 0
|
5月前
|
SQL 安全 JavaScript
告别Web安全小白!Python实战指南:抵御SQL注入、XSS、CSRF的秘密武器!
【7月更文挑战第27天】在 Web 开发中,安全漏洞如同暗礁,其中 SQL 注入、XSS 和 CSRF 尤为棘手。本文通过实战案例展示如何使用 Python 抵御这些威胁。
67 0

热门文章

最新文章