PHP解压缩任意文件夹网!

PHP解压缩任意文件夹网

趋势迷

PHP解压缩任意文件夹

2024-07-20 02:22:08 来源:网络

PHP解压缩任意文件夹

ThinkPHP6 任意文件操作漏洞分析 漏洞介绍
2020年1月10日,ThinkPHP团队发布一个补丁更新,修复了一处由不安全的SessionId导致的任意文件操作漏洞。该漏洞允许攻击者在目标环境启用session的条件下创建任意文件以及删除任意文件,在特定情况下还可以getshell。
具体受影响版本为ThinkPHP6.0.0-6.0.1。
漏洞复现
本地环境采用ThinkPHP 6.0.1+PHP7.1.20+Apache进行复现。在特定情况下执行测试验证程序即可写入一个webshell,如下图:


漏洞分析
根据官方github的commit:

因而推测,可能是在存储session时导致的文件写入。然后,跟踪:vendor/topthink/framework/src/think/session/Store.php:254。

这里调用了一个write函数,跟进一下:vendor/topthink/framework/src/think/session/driver/File.php:210。

调用writeFile函数,跟入:

果然是写入文件的操作。
继续反向看一下文件名是否可控,该文件名来自于最开始的getId()得到的$sessionId的值。既然有getId,就会有setId,看一下函数内容:

当传入的参数$id满足32位的长度时,就将该值设为$this->id。看一下调用setId的地方:vendor/topthink/framework/src/think/middleware/SessionInit.php:46。

这里的$cookieName的值是PHPSESSID。

而$sessionId是cookie中名为PHPSESSID的值,因此是攻击者可控的,从而导致写入的文件名可控。
写入的文件名可控,那么写入的内容是否可控呢?分析发现,写入的内容就是创建session使用的内容。但是session的创建是由实际的后端业务逻辑来决定的,而默认环境下并没有创建session。因此,默认环境下无法做到任意文件写入。
在对该漏洞的深入分析过程中,我们发现该漏洞还可以实现任意文件删除,且文件删除对后端业务逻辑依赖较低。
还是在vendor/topthink/framework/src/think/session/Store.php:254中:

通过分析验证,我们发现漏洞(如上图)还能导致任意文件删除。
总结
在目标环境为Windows且开启session的情况下,容易遭受任意文件删除攻击。
在目标环境开启session且写入的session可控的情况下,容易遭受任意文件写入攻击。
建议相关用户及时升级到ThinkPHP6.0.2版本,以免遭受攻击。
Gxlcms,大量的免费thinkphp入门教程,欢迎在线学习!

PHP解压缩任意文件夹

thinkphp6 任意文件创建漏洞复现 01 背景
近日奇安信发布了 ThinkPHP 6.0 “任意”文件创建漏洞安全风险通告,对此,DYSRC第一时间对该漏洞进行了分析,并成功复现该漏洞。
漏洞影响范围:top-think/framework 6.x
02 定位问题
根据任意文件创建以及结合近期的commit历史,可以推测出 1bbe75019 为此次问题的补丁。可以看到在补丁中限制了sessionid只能由字母和数字组成,由此看来问题更加明显。

03 原理分析
先抛开上面的问题,我们看一下thinkphp是如何存储session的。
系统定义了接口thinkcontractSessionHandlerInterface

SessionHandlerInterface::write方法在本地化会话数据的时候执行,系统会在每次请求结束的时候自动执行。
再看看thinksessiondriverFile类是怎么实现的。

先通过getFileName根据$sessID生成文件名,再writeFile写入文件。
跟进getFileName,直接将传入的$sessID拼接后作为文件名。由于$sessID可控,所以文件名可控。

04 演示
分析到这里,整个漏洞流程基本上已经很清晰了。下面给出本地的演示结果。

Gxlcms,大量的免费thinkphp入门教程,欢迎在线学习!

php怎么删除文件中的任意一行
将文件逐行读入数组,然后遍历数组并把数组各元素的值添加到要保存的字符串中,当处理到对应于要删除的行的数组元素时不读入它,最后保存文件。
(学习视频推荐:java视频教程)
实现方法:
执行以上PHP程序,它将删除test.txt文件的第三行。文件的行序列号从0算起,而不是我们通常所理解的从1算起,这与数组元素的下标序号是一样的情形。
有一个问题需要弄清楚,就是所谓的“行”的概念。让我们用记事本写一个文件,一行结束后我们打一个回车或者不打,保存该文件后该文件就有了一行;如果我们打完一行后回车再打一行,保存后文件就有两行。在记事本里,当我们设置格式为“自动换行”,一行文字写到最右端时会自动折行,但那不是两行,它依然只是一行。
在记事本里,不论有多少文字,也不论格式是否为“自动换行”,如果一直没有回车符,那么就只能是一行。换句话说,行的标志是回车符(PHP记作“"\r\n"”)。
修改以上程序,我们还可以轻易地删除文件里所有空的行(只有空格+回车符或只有回车符的行):在遍历数组并读入保存字串时用trim检测每一个数组元?
这个程序将删除文件中的所有空行,但假若文件的最后一行为空行,则会清除其空格符(如果有的话)然后保留一个回车符(它被当作文件末尾的指针标志)。

php如何删除文本文件中的任意行 php删除文本文件中的任意行的方法:1、指定操作文件与要删除的行数;2、读取文件数据到数组中;3、删除文件中的指定行;4、重新整理文件数据;5、将删除数据后的文件重新写入原文件。

代码实现:
(推荐教程:php视频教程)
文本文件aaa.txt如下:

javascript连接mysql与php通过odbc连接任意数据库的实例 脑洞大开用javascript链接mysql,2个小时总算实现了,用到了odbc,后面又想到用php链接odbc链接数据库,也实现了,就把案例放一下。
注意事项:
1、javascript连接mysql使用的是”new ActiveXObject“这个对象,这个对象只有IE浏览器支持,所以只能在IE浏览器下实现连接mysql。
2、javascript也是通过odbc连接mysql,和php不同的是,其中一个参数,图片中,红色的是php的连接数据源名,蓝色的是javascript连接数据源名,这里非常容易误导。

3.下载配置odbc源需注意,VC库要和odbc安装文件位数一致,32位源对应32位或X86VC库,64位源对应64位VC库,并且odbc数据源管理程序不容易找,有两种办法,第一种打开控制面板,搜odbc,选择对应版本控制器去配置,第二种在windows下面,system32里面搜odbcad32.exe是64位版本,syswow64搜odbcad32.exe是32位版本。

4.如果个人使用配置用户DSN即可,如果多个使用或者联网使用配置系统DSN。
源码:
javascript版
php版:
以上这篇javascript连接mysql与php通过odbc连接任意数据库的实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。