LGBluetoothLGBluetooth08-14 09:49

Web安全CTF 题初级试练

最近在整理一些CTF题,觉得很有意思,觉得有必要一下!CTF对题目说明很重要,请务必重视!

1.Robot

熟悉web的人,看到题目应该想起robots协议,也被称为爬虫协议、机器人协议,网站通过robots协议告诉搜索引擎,哪些页面可以抓取,哪些页面不能抓取。

当一个网页爬虫爬去站点时,它会首先检查该站点根目录下是否存在robots.txt,如果存在,搜索机器人就会按照该文件中的内容来确定访问的范围;如果该文件不存在,所有的搜索蜘蛛将能够访问网站上所有没有被口令保护的页面。当您对网站包含不希望被搜索引擎收录对内容时,才需要使用robots.txt文件。

可以尝试去访问网站对robots.txt文件
robots.txt

robots.txt文件暴露了一个php文件,访问php文件没有显示,查看网页源代码发现flag
这里写图片描述

2.seelog

这里写图片描述
由题猜出存在log目录
这里写图片描述
打开acess.log文件,查找状态吗为200的日志记录,可以发现一个登录的路径
这里写图片描述
访问该路径即可得到flag
这里写图片描述

3.VID

进入页面查看网页源代码可以看到一个index.php.txt的注释,访问该文件,可以看到一大片格式化输出的东西,这些代码是使用VLD输出的中间代码。
这里写图片描述
这里写图片描述
VLD(Vulcan Logic Dumper)是一个在Zend引擎中,以挂钩的方式实现的用于输出PHP脚本生成的中间代码(执行单元)的扩展。 它可以在一定程序上查看Zend引擎内部的一些实现原理,是我们学习PHP源码的必备良器。
如下为VLD输出对PHP代码生成对中间代码信息:

  • Branch analysis from position 这条信息多在分析数组时使用。
  • Return found 是否返回,这个基本上有都有。
  • filename 分析的文件名
  • function name 函数名,针对每个函数VLD都会生成一段如上的独立的信息,这里显示当前函数的名称
  • number of ops 生成的操作数
  • compiled vars 编译期间的变量,这些变量是在PHP5后添加的,它是一个缓存优化。这样的变量在PHP源码中以IS_CV标记。
  • op list 生成的中间代码的变量列表

    在命令行下执行下列语句,使用VLD拓展展示信息

    php -dvld.active=1 1.php

VLD拓展信息显示,有3个参数通过GET方式传递,构造URL

http://106.75.26.211:1111/?flag1=fvhjjihfcv&flag2=gfuyiyhioyf&flag3=yugoiiyhi

这里写图片描述
下载1chunqiu.zip文件,发现一些源代码文件
这里写图片描述
访问http://106.75.26.211:1111/1chunqiu/login.html
这里写图片描述

查看login.php源代码,发现有过滤,但是有办法绕过。
这里写图片描述
用%00就能闭合吃掉转译加上的‘\’SQL语句,过程:%00’–>\0’–>\’–>\’,用burp suite抓包注入,可以拿到flag
这里写图片描述
这里写图片描述
这里写图片描述

4.天下武功唯快不破

这里写图片描述
访问IP,根目录/u/目录下慧生成一个随机命名的文件,并只存在10秒
自写python脚本爆破文件名

import requests
import hashlib

for i in range(1,1000):
    m = hashlib.md5()
    data = m.update(str(i).encode('utf-8'))
    url = 'http://106.75.26.211:3333/u/'+ data +'.txt'
    res = requests.get(url)
    if(res.status_code == 200):
        print(res.text)
        break

脚本执行时间较长,要多试几次
这里写图片描述

5.fuzzing

这里写图片描述

burp抓包分析
这里写图片描述
返回包提示您的IP不在大内网中,数据包头中添加X-Forwarded-For,伪造IP
这里写图片描述
返回包头部有提示:m4nage.php
这里写图片描述
网页访问该地址,构造POST数据包传入key值这里写图片描述
传入的key值不正确,并给出了key值的md5加密值和key值前几位,写个脚本爆出key值

import hashlib
def md5(data):
    m = hashlib.md5()
    m.update(data)
    a = m.hexdigest()
    return a

a = 'ichunqiu'
b = 'abcdefghijklmnopqrstuvwxyz1234567890'
for i in b:
    for j in b:
        for k in b:
            for l in b:
                for m in b:
                    if md5(a+i+j+k+l+m)=='5a2a7d385fdaad3fabbe7b11c28bd48e':
                        print(a+i+j+k+l+m)

爆出key值
这里写图片描述
又是一堆返回信息,两个重要信息,x0.txt 和 经过authcode函数加密的flag,访问x0.txt,页面是一段php源码,应该是解密函数。
函数有四个参数,将刚刚截取的密文传给string,keykey,运行函数,可以得到flag值。
这里写图片描述


到此结束,收获颇多,感谢各位老大的指导!

程序之家二维码

小额赞赏

000
评论