RIPSTECH PRESENTS PHP SECURITY CALENDAR 是由 RIPS 团队出品的PHP代码安全审计挑战系列题目,RIPSTECH PRESENTS PHP SECURITY CALENDAR 2017 共包含24道题目(Day 1 ~ 24),每道题目将包含一个较新颖的知识点供大家学习。
VULNSPY 提供在线实验环境让您可以在线进行模拟渗透测试,在线体验 RIPSTECH PRESENTS PHP SECURITY CALENDAR。
在线实验环境和Writeup: http://www.vulnspy.com/cn-ripstech-presents-php-security-calendar-2017/
查看更多内容,点击右上角 `START TO HACK` 可以快速访问在线实验环境。
Day 1 - Wish List
你能从下列代码中发现安全漏洞吗?
class Challenge {
const UPLOAD_DIRECTORY = './solutions/';
private $file;
private $whitelist;
public function __construct($file) {
$this->file = $file;
$this->whitelist = range(1, 24);
}
public function __destruct() {
if (in_array($this->file['name'], $this->whitelist)) {
move_uploaded_file(
$this->file['tmp'],
self::UPLOAD_DIRECTORY . $this->file['name']
);
}
}
}
$challenge = new Challenge($_FILES['solution']);
在代码的 13 行存在任意文件上传漏洞。 在 12 行代码通过 in_array() 来判断文件名是否为整数,可是未将 in_array() 的第三个参数设置为 true 。in_array()的第三个参数在默认情况下是false,因此 PHP 会尝试将文件名自动转换为整数再进行判断,导致该判断可被绕过。比如使用文件名为 5vulnspy.php 的文件将可以成功通过 in_array($this->file['name'], $this->whitelist) 判断,从而将恶意的 PHP 文件上传到服务器。
RIPSTECH PRESENTS PHP SECURITY CALENDAR是RIPS团队出品的PHP代码安全审计挑战系列题目,2017年有24道题。VULNSPY提供在线实验环境可模拟渗透测试。以Day 1为例,代码13行存在任意文件上传漏洞,因12行判断文件名是否为整数时参数设置问题可被绕过。
Writeup&spm=1001.2101.3001.5002&articleId=82259185&d=1&t=3&u=f3f2b8154cd2404180eab4857a981bba)
2062

被折叠的 条评论
为什么被折叠?



