moctf-web
好久没有开始打题了,开始生疏了,过完一个期末考试周,现在我又回来了!
真的是从头开始学习qwq,那我现在的博客一定要好好的写,认认真真的写!
第一题–一道水题
进入网站后
点击F12
即可得出答案
(这是通常的最简单的水题–一般的平台的第一道都是这样纯粹给大家兴趣)
第二题–还是一道水题
进入后,画面是这个样子的
但是试图输入moctf进去,无法行得通,于是F12开启,看源代码
图中重点是蓝色所圈的地方,disabled是无法输入的源头,将其删去后,更改后面的length的长度为5才能将moctf输入输入框中。
最后可以得到flag
(本题主要考察前端的代码审计,两个考察点,需要注意)
第三题–访问限制
点击题目进入后出现了下面这个界面
略微一思考就是:
用bp改一下改user-agent:NAIVE 后可以得到flag了
(本题主要考察的是浏览器的访问的修改)
第四题–机器蛇
首先进入界面是一个游戏,F12后查看源码,紧接着底下的hint给了提示robots.txt
那么就在网址后面加上一个robots.txt后缀查看出现下图
那么说明还有一个隐藏的php文件,接着在之前的网址后面把这一串文件加上,得到白色版面,后查看源码,得到flag
第五题–PHP魔法
好像后台被人一锅端了以后,这个网站就再也没有去修复过
不过,参考别的大神的给的提示就是说利用PHP魔法函数(这个是很重要的):
后面仔细的审计代码
这个审计大约就是:
1、有俩参数“a”,“b”
2、这俩参数都不能为空
3、这俩参数都不能相等
4、这俩参数在md5加密后相等
…
这啥啊(菜鸡当时就自闭了)条件4与条件5是不可能完成的吧qwq(热水奉上)
方法有两种:
1、利用md5加密加密数组均返回false的特性,构造数组,于是第四条条件满足,那么第三条条件就好办了,直接?a[]=0&b[]=1
2、(百度后参考的–算是多学习了一种方法)md5加密后0e开头的都相等,例如:240610708 和 QNKCDZO。
?a=240610708&b=QNKCDZO
(参考:https://www.cnblogs.com/gzs-monkey/p/9209303.html#autoid-0-4-0)
第六题–我想要钱
本题又是审计代码的题目
emmmmmm
那就只能慢慢分析了
怎么办呢…
首先是说包含flag.php文件
接着要满足以下几个条件才能爆出flag:
1、参数money,用get传递money值
2、参数money的长度要小于4
3、money值要大于time()
time的返回值是从1970到如今的秒数…
这是个巨大的数…那就一直大吧
4、money不能够是数组
那么那么通过数学的想法,只能使用指数,这种爆炸性的增长…
结果应该是错的…
那么用科学计数法试一下??
输入?money=9e9
接着就得到flag了
第七题–登录就对了
一上来就是这张图…
一看到这种登录的题,在目前我只想到sql注入登录这种简单一点点的骚操作
于是构造万能登录
用户名:
'or ‘1’ = ‘1’ #
密码随意
接着登录成功后,查看源代码,在最下方发现flag
第八题–文件包含
进入传送门一看——>
本题就一个这个qwq
不行,查看源代码——>
有hint诶,再与题目相结合
emmmmm
构造这个很早很早的一个读取文件的方法:?file=php://filter/convert.base64-encode/resource=flag.php
紧接着base64解码即可得到答案~
第九题–暴跳老板
嘤嘤嘤,看到这道题,我就一脸懵,现在真的是一看题就开始F12看源码,然后啥都没有发现,于是直接抓包走起…首先进行抓包,然后
接着go,一看
图中有一个MOCTF…好的,那么就是靠抓包修改就可以得到flag
emmmm,于是就开始在里面进行了一番修改
注意到每次都是会往do.php放值…
先输入值进入发送,出现了这个界面
修改一下post的人为DEAR或BOSS…
接着就凉了啊…
反反复复不知道到底发什么。。。
最后有大佬说,为什么不试一下:
&Dear=MyBoss
重新发送http请求…终于可以了
拿到flag!!!
我哭了,这是什么神仙题目???脑洞太大了吧
第十题–flag在哪
这道题也是考脑洞,一定要记得PPAP
超大脑洞
bp抓包走一波,紧接着,疯狂跳跃
真的是脑洞题
看到flag.php——flag.php——frog.php
想想PPAP
接着就去flagfrog.php试一下
抓包后得到
有的同学可能会漏掉包,可以去ctrl+r里面go一go
-----果然还是太菜了------
第十一题—美味的饼干
这个题,我一开始以为是sql注入类型的,但是试着弄了一下,随便都是可以登录进去的,好像没什么用处qwq,查看源代码,得到只有admin可以登录…
(果然是个菜鸡,暴风哭泣)
然后…就被大佬爆锤以后得到一个bp抓包的hint…(记住以后都要尝试一遍!!)
在login处发现了大串标红的特殊标记:
而且
%3D是“=”的URL编码,所以把%3D改成“=”
ZWUxMWNiYjE5MDUyZTQwYjA3YWFjMGNhMDYwYzIzZWU=进行base64解码,
得到MD5密文ee11cbb19052e40b07aac0ca060c23ee,解密后得到user
那么说明只有把admin进行md5加密后加上去即可得到答案!
编码后,记得把“=”换成%3D
MjEyMzJmMjk3YTU3YTVhNzQzODk0YTBlNGE4MDFmYzM%3D
再换到cookie上去,即可F12得到答案
(美丽的分割线)
表示本题的题目与做题没啥关系
第十二题–没时间解释了
真的是服气,我的bp老是漏包…
暂时先放放…
第十三题–死亡退出
本题真的是有点。。。难…
看了大佬们的分析,php://filter的妙用:
https://www.leavesongs.com/PENETRATION/php-filter-magic.html
于是就可以明白:
我们只需要在写入$c时在开头随机补充一位,
再进行base64加密和解密时phpexit便会失效。
所以结合tmp.php构造payload为c=aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==&file=php://filter/write=convert.base64-decode/resource=tmp.php
接着用hackbar传过去就可以得到答案了
第十四题–火眼金睛
进入就告诉你本题目2秒刷新一次,数出moctf的数量
那么就直接放python脚本…
我看了好多wp的脚本后…可能我的pycharm少了好多包还是怎么样的,都不太行
参考了:https://blog.youkuaiyun.com/weixin_42275947/article/details/83626655的脚本
# coding:utf-8 #
import requests
from bs4 import BeautifulSoup
url = "http://119.23.73.3:5001/web10/"
s = requests.session()
response = s.get(url)
content = BeautifulSoup(response.text , 'lxml')
str = content.select('textarea')[0].text
con = "moctf"
count = str.count(con)
url2 = "http://119.23.73.3:5001/web10/work.php"
data = {"answer":count}
flag = s.post(url2 , data=data).text
print(flag)
即可得到答案
第十五题–unset
题目如下:
据大佬说:
题目原型是 Destoon 20140530最新版超全局变量覆盖导致的安全问题
里面有一些函数不太记得,于是查手册
foreach
根据代码的顺序…可以发现函数的运行:unset -> waf -> extract
在该函数下说明不能传入带有flag字样的键名,需要绕过
然后出现下面的函数我直接懵圈…(小菜鸡不愧是小菜鸡)
这是一个复杂的逻辑循环
大致的意思如下:
将post、get、cookie三个变量(网页中对应你用get、post传入的值)依次赋值给
变量¥_R(打不了$$这个符号只能用¥代替),若变量¥¥_R存在数据(就是说你post或者get过来数据后,进行下一步)
举个post栗子:
进入下一个语句后,此处只使用了¥¥_R
原本这里¥__R为¥__POST,这时就变成了¥¥__POST,意味着我们要取出“¥POST所对
应的值–的值(注意:是值的值)
举个例子:这里有a=>b;b=>c;
那么$$a的值就是时取出a的值的值,也就是取出c
然后就进入下一个foreach函数,去¥_K为键名,¥_V为值。如果键名作为变量所对应的值与¥¥_R的值相等,则unset掉¥¥_K。这里的unset的内容就是将这个值在程序内所对应的内存销毁,然后…这个就莫得了。
再接着向后面的函数看过去:
然后就是extract函数