实验吧CTF Writeup之WEB(部分)

天下武功唯快不破

考察使用脚本自动读取响应头、进行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。

FALSE

最简单的代码审计之一,考察数组绕过sha1()函数

点“View the source code”可以看到源代码:

构造两个数组绕过。

NSCTF web200

这个应该算是代码审计+编程题吧?

这个是用PHP写的一个自定义加密函数,把它反过来写就能解密密文。

<?php 
$str = "a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws"; 
$_o=""; 
$_ = base64_decode(strrev(str_rot13($str))); 
for($_0=0;$_0<strlen($_);$_0++) 
{ 
    $_c = substr($_,$_0,1); 
    $__ = ord($_c)-1; 
    $_c = chr($__); 
    $_o = $_o.$_c; 
} 
echo strrev($_o); 
?>

把这个.php文件放在网站根目录下,访问一下这个网站就得到flag。

what a f*ck!这是什么鬼东西?

考察JSf*ck编码的解码,我这里是用直接复制进控制台执行的方法做的

打开页面是一堆JSf*ck,拖进控制台运行一下:

成功拿到flag:

PHP大法

最基本的PHP代码审计之一,考察二次urldecode绕过

打开会发现最底下有一个链接,访问它。

可以看到是熟悉的二次urldecode绕过,核心代码跟Bugku的一道代码审计完全相同:

注意提交要在之前那个.php页面里提交:

这个看起来有点简单!

sql注入,用sqlmap轻松完成

首先是找注入点:

注入点是id。

接下来按照常规操作一步步进行下去就可以,很容易就能找到flag。

关于sqlmap的使用可以看我这篇文章:https://www.jianshu.com/p/4509bdf5e3d0

头有点大

考察HTTP请求头的修改

题目叫“头有点大”,那看来是修改HTTP请求头。

提示要用IE访问,要从英国访问,还要有NET Framework 9.9,直接抓包,然后伪造请求头就可以。

评论

发表评论