前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何手动利用 SQL 注入?

如何手动利用 SQL 注入?

作者头像
Khan安全团队
发布2022-03-14 08:33:50
8550
发布2022-03-14 08:33:50
举报
文章被收录于专栏:Khan安全团队

什么是 SQL 注入?

SQL 注入,也称为 SQLI,是一种常见的攻击,它使用恶意 SQL 代码进行后端数据库操作,以访问不打算显示的信息。

它通常允许攻击者查看他们通常无法检索的数据。这可能包括属于其他用户的数据,或应用程序本身能够访问的任何其他数据。在许多情况下,攻击者可以修改或删除这些数据,从而导致应用程序的内容或行为发生持续变化。

通常,您可以使用 SQLMAP 工具来利用 SQL 注入。但在某些情况下,例如,可能会实施 WAF 或防火墙来阻止自动攻击。在这种情况下,您可以手动利用 SQLI。

因此,让我们开始了解如何手动利用 SQL 注入。

所以这个特定的网站有一个下拉菜单来选择一个州和城市,它在请求中传递了一个 ID 参数,如下面的快照所示:

请注意上面快照中的内容长度为808现在,通过使用有效负载或 1=1 —来确认应用程序是否具有 SQLI 。注意使用有效负载后的内容长度更改为77709。该网站显示州和城市的所有数据。

现在可以说该网站容易受到 SQL 注入攻击。

现在我运行order by子句,通过增加 1 来查找列数。在这种情况下,有2列,因为在3上,网站不返回任何内容,如下面的快照所示:

注意:如果你觉得有更多的列,你可以使用 Burp Intruder 来快速处理这个过程。

您可以交替使用 Union Select 而不是 Order By 子句,如下面的快照所示:

现在,我们可以使用union select @@version, database() - payload 来检查版本和数据库名称。如下面的快照所示,数据库版本和名称会显示出来。

我们还可以检查主机名和用户。

现在,使用 information_schema,我们可以通过使用这个 payload union select table_name,2 from information_schema.tables where table_schema=database()查看数据库中的表名。包括这个用户表。

现在我们可以使用以下有效负载union select count(column_name),column_name from information_schema.columns where table_name='tablename'查看计数列。在这种情况下,有 60 列。

现在我们可以使用limit子句一一检查列。在这里,我们可以看到第一列名称是ID,第二列名称是user_login,第三列名称是user_pass,如下面的快照所示:

现在使用列名,我们可以使用此有效负载联合从 wp_users 中选择 user_login,user_pass来转储列中的数据。如下面的快照所示,以哈希格式显示用户名和密码。

通过进行这样的迭代,我们可以进一步转储数据库。

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档