2019-03-14 实验吧CTF_Writeup之WEB(1)
天下武功唯快不破
考察使用脚本自动读取响应头、进行BASE64解码
提示“看看响应头”,那就看一下响应头。
发现一个BASE64编码的字符串:
看了一眼网页源代码,发现一条注释:
每次刷新页面这个值都会变,根本就不够手动提交的,只能写脚本了。
本人极度不熟悉Python,所以只好找了别人的脚本,等以后把Python学好了再自己写一遍:
import requests
import base64
r = requests.post('http://ctf5.shiyanbar.com/web/10/10.php')
key = r.headers['FLAG']
flag = base64.b64decode(key).decode().split(':')[1]
para = {'key':flag}
r = requests.post('http://ctf5.shiyanbar.com/web/10/10.php',data = para)
print(r.text)
执行一下就得到flag。
拐弯抹角
考察PHP代码审计,其实也就是一些常用的绕过姿势
其实这道题的主要目的还是教学,真正需要绕过的地方很简单,只有两处:
payload:http://ctf5.shiyanbar.com/indirection/index.php/index.php
成功拿到flag。
天网管理系统
考察PHP弱类型绕过md5()函数、PHP布尔类型序列化数组绕过
打开链接,什么都没发现,于是看网页源代码,在注释里发现了一些信息:
把用户名改成QNKCDZO,提交,出现了一条提示信息:
访问一下这个链接:
又发现了一段PHP代码:
一开始没明白,后来翻了翻网上的资料,才知道这里应该怎么做:
https://www.cnblogs.com/ssooking/p/5877086.html
代码意思是把post提交的password值经过"反序列化"得到一个数组,要求数组里的user和pass都等于某个值时就打印flag。
但是我们不知道两处???到底是什么,因此无法考虑用php函数构造这样的值。
别忘了还有一个提示: "伟大的科学家php方言道:成也布尔,败也布尔" ,bool类型的true跟任意字符串可以弱类型相等。因此我们可以构造bool类型的序列化数据 ,无论比较的值是什么,结果都为true。(a代表array,s代表string,b代表bool,而数字代表个数/长度)
构造password值为: a:2:{s:4:"user";b:1;s:4:"pass";b:1;}
将这个值提交到password得到flag。
目前还是不是很懂,等以后把PHP再学学应该就能看懂了。
忘记密码了
考察vim异常退出产生.swp文件泄露
一进去是一个页面,没找到什么有效的信息,看了一眼网页源代码发现“Vim”,做HGAME的时候就做到过Vim异常退出产生.swp文件泄露的题目,所以这道题应该也是一样的道理,肯定有一步要用到这个。
同时,在Vim的上一行也发现了管理员的邮箱。
试了一下管理员的邮箱,发现不行,于是随便写点什么东西提交一下,得到以下结果:
访问了一下那个连接,发现页面一闪而过,最终还是回到了step1.php,那么在这个step2.php里肯定有猫腻。
用Burp Suite抓一下包,并且发送到Repeater模块:
注意到那个"from action="submit.php",这里应该就是突破口,去访问一下它:
本来以为是要改Cookie的,但是发现没有。联想到前面分析到的可能有.swp文件泄露,访问一下.submit.php.swp试试看:
payload为:http://ctf5.shiyanbar.com/10/upload/submit.php?emailAddress=admin@simplexue.com&token=0e00000000
成功拿到flag。
Once More
考察数组绕过正则表达式匹配
访问一下链接,发现一个输入框,点一下View the source code可以看到一部分源代码:
图上写错了,是必须有*-*
随便写点东西提交一下,看看请求方法:
是GET方法。
ereg()不能处理数组,所以直接构造一个数组绕过:
payload:http://ctf5.shiyanbar.com/web/more.php?password[]=1
提交,得到flag。
Guess Next Session
代码审计题,考察Session和Cookies的关系
查了一下,Session是用Session ID来确定当前对话所对应的服务器Session,而Session ID是通过Cookie来传递的,如果没有Cookie,就得不到Session了。
看了一眼源代码:
所以写点东西提交一下,抓包,把Password和Cookie都删了就行。
发包得到flag。