BUUCTF WEB(持续更新)
1、Warmup
打开题目链接,得到一张图片,如下图:
此时先想到看这个网页的源代码,输入source.php即可得到源代码,如下图:
进入php代码审计,粗略看一下可以发现有file,所以我们要想办法得到file,首先先看与file有关的代码块:
看到中间发现需要前面创建的函数,所以我们返回去进行前面代码的审计,在白名单处能看到有两个文件,一个source.php、一个hint.php,我们先打开hint.php,可以看到如下字符:
暂时不知道是干什么用的,返回去继续阅读,
审计完发现,我们需要传入一个$page,满足4个传入条件:page不为空且要是字符串;必须得在白名单中;截取page问号前的内容也必须在白名单中;url解码之后的page的?前内容也得在白名单中;所以开始构造url:
1、根据条件,必须得有?source.php;
2、因为url解码后的内容问号前的内容要在白名单中,所以php后面也要有一个问号,但在上传url时,会经过一次解码,所以我们需要先将url经过二重编码,问号的一重是%3F,二重是%25%33%46;
3、然后只需要返回到服务器的根目录,再找到ffffllllaaaagggg,即可获得flag;
2、[极客大挑战 2019]Havefun
打开附件得到如下页面
直接F12看网页源码,发现要我们get一个cat的参数进入网页,并且参数值要为dog
在url中输入?cat=dog传入cat即可拿到flag
3、[极客大挑战 2019]Secret File
打开附件得到如下网页:
F12看到网页源码信息,发现SECRET可以点击
发现两个php不同,一个是action.php,另一个是end.php,猜测是php代码中有设置定时自动跳转的部分,利用burp抓包,可以看到action中的代码
看到包含了一个secr3t.php,在网页里修改url可以看到php代码
发现flag在flag.php中,看到上面还有一个include(flag.php),可以判断出是文件包含,利用php伪协议可以得到base64字符串,解码可以得到flag
4、[ACTF2020 新生赛]Include
打开附件得到以下页面
点进tips发现是payload是?file=flag.php
,但是没有任何东西,联想到题目的include,可以很清楚地知道是文件包含,利用php伪协议?file=php://filter/convert.base64-encode/resource=flag.php
绕过得到base64编码,再解码即可得到flag
5、[护网杯 2018]easy_tornado
打开靶机,很直观有如下三个链接
依次打开查看一下
flag藏在fllllllllllllag文件中
给了个奇奇怪怪的文件render,暂时先不管
最后是一个hint,很明显的是一个MD5
紧接着我们看url栏里面由两部分构成,第一部分是文件名,第二部分是filehash,肯定不可能直接用/fllllllllllllag来获得,但我们还是可以试一试
嘿嘿,不出所料,得到一个error,看到msg,感觉应该是一个模板注入,写个{{1+1}}
看看
不行,没法运行出结果,再试试{{1}}
发现是在报错的页面进行注入,可以输出输入的指令,但是感觉还是无从入手,此时想到题目给的tornado,百度一下看看,芜湖~
是一个tornado框架,可以进行模板注入,这时候就要开始寻找尝试了,
可以看到有很多关于render的内容,感觉像是它第二个文件中给的样子了,尝试一下
不行,还是不能得到我们想要的结果,在经过一番尝试之后,我找到了这个
找了挺久的,这个指令让我们找到了hint中所说的cookie_secret然后就是要用hint中的另一个帮助了
#python3
import hashlib
hash = hashlib.md5()
filename='/fllllllllllllag'
cookie_secret="288192ff-679e-4e89-95eb-76d53ac30f9d"
hash.update(filename.encode('utf-8'))
s1=hash.hexdigest()
hash = hashlib.md5()
hash.update((cookie_secret+s1).encode('utf-8'))
print(hash.hexdigest())
#python2
#!-*-coding:utf-8 -*-
import hashlib
def md5(s):
md5 = hashlib.md5()
md5.update(s)
print(md5.hexdigest())
return md5.hexdigest()
def filehash():
filename = '/fllllllllllllag'
cookie_secret = '288192ff-679e-4e89-95eb-76d53ac30f9d'
print(cookie_secret + md5(filename))
print(md5(cookie_secret + md5(filename)))
if __name__ == '__main__':
filehash()
借助hint中的MD5加密,用python脚本跑一下就可以得到对应的filehash,最后构造下面的payload就能得到flagfile?filename=/fllllllllllllag&filehash=12c05aef4b4ba01da4737e984600848c
[GXYCTF2019]Ping Ping Ping
打开靶机,发现是一道很明显的命令注入题,
先输个ip没有问题,然后输一下ls,发现可以出来目录下的文件
可以看到目录下有flag和index两个文件,肯定是想直接得到flag,就用cat
emmm,太凶了,但是知道空格被绕过了,试一试/**/
还是不行,害~再换成${IFS}$
枯了枯了,再试试$IFS$1
flag又被过滤了…
这时候其实有两种解法,
解法一:是用内敛执行绕过,先摆上payload
?ip=10;cat$IFS$1`ls`
这样子就可以直接得到flag
解法二: