任意文件写入

寻找可以控制写入的内容点
fwrite()
size_t fwrite(const void *ptr, size_t size, size_t nmemb, FILE *stream) 把 ptr 所指向的数组中的数据写入到给定流 stream 中。
如果成功,该函数返回一个 size_t 对象,表示元素的总数,该对象是一个整型数据类型。如果该数字与 nmemb 参数不同,则会显示一个错误。
file_put_contents()
把一个字符串写入文件中
file_put_contents(file,data,mode,context)
file 必需。规定要写入数据的文件。如果文件不存在,则创建一个新文件。
data 可选。规定要写入文件的数据。可以是字符串、数组或数据流。
mode 可选。规定如何打开/写入文件。可能的值:
FILE_USE_INCLUDE_PATH
FILE_APPEND
LOCK_EX
context 可选。规定文件句柄的环境。

工具:

代码审计工具
74ms

漏洞点

admin/admin_templates.php
的113到未行

elseif ($act == 'do_edit')
{
    check_permissions($_SESSION['admin_purview'],"tpl_edit");
    $tpl_name = !empty($_POST['tpl_name']) ? trim($_POST['tpl_name']) : '';
    $tpl_content = !empty($_POST['tpl_content']) ? deep_stripslashes($_POST['tpl_content']) : '';
        if(empty($tpl_name)){
    adminmsg('����ģ���ļ�����', 0);
        }
        $file_dir='../templates/'.$_POST['tpl_dir'].'/'.$tpl_name;
        if(!$handle = @fopen($file_dir, 'wb')){
        adminmsg("��Ŀ��ģ���ļ� $tpl_name ʧ�ܣ�����ģ��Ŀ¼��Ȩ��",0);
        }
        if(fwrite($handle, $tpl_content) === false){
            adminmsg('д��Ŀ�� $tpl_name ʧ��,�����дȨ��',0);
        }
        fclose($handle);
        $link[0]['text'] = "�����༭���ļ�";
        $link[0]['href'] =$_SERVER['HTTP_REFERER'];
        $link[1]['text'] = "����ģ���ļ��б�";
        $link[1]['href'] ="?act=edit&tpl_dir=".$_POST['tpl_dir'];
        adminmsg('�༭ģ��ɹ�',2,$link);
}

漏洞利用点

$file_dir='../templates/'.$_POST['tpl_dir'].'/'.$tpl_name;
fopen()打开一个文件或url
fopen($file_dir, ‘wb’))以wb权限打开
“r” (只读方式打开,将文件指针指向文件头)

“r+” (读写方式打开,将文件指针指向文件头)

“w” (写入方式打开,清除文件内容,如果文件不存在则尝试创建之)

“w+” (读写方式打开,清除文件内容,如果文件不存在则尝试创建之)

“a” (写入方式打开,将文件指针指向文件末尾进行写入,如果文件不存在则尝试创建之)

“a+” (读写方式打开,通过将文件指针指向文件末尾进行写入来保存文件内容)

“x” (创建一个新的文件并以写入方式打开,如果文件已存在则返回 FALSE 和一个错误)

“x+” (创建一个新的文件并以读写方式打开,如果文件已存在则返回 FALSE 和一个错误)

include_path 可选。如果您还想在 include_path(在 php.ini 中)中搜索文件的话,请设置该参数为 ‘1’。

context 可选。规定文件句柄的环境。context 是一套可以修改流的行为的选项。
您还可以使用 “b” 来强制使用二进制模式,这样就不会转换数据。为了使用这些标记,请使用 “b” 或者 “t” 来作为 mode 参数的最后一个字符。
在这里插入图片描述
tpl_dir 以requrst方式写入

payload

在这里插入图片描述
在这里插入图片描述
任意文件可以进行写入

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

FODKING

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值