[CTF从0到1学习] 二、CTF WEB安全

本文档详细介绍了CTF(Capture The Flag)中的WEB安全基础知识,包括信息收集、HTTP请求与响应、SQL注入、代码审计等多个方面。通过实际题目解析,讲解了如何利用PHP的特性如反序列化、文件包含等进行漏洞利用,以及如何通过HTTP头部字段(如User-Agent、Cookie)和数据流(如php://input)来突破安全限制。同时,还涉及了MD5扩展攻击、二进制比较、条件竞争等高级技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

[CTF从0到1学习] 二、CTF WEB安全

Web安全的实验环境

PHP环境

java环境

python环境

不在赘述,环境自己配

下来直接整题,以下的题目有些为本地搭建,有些为在线CTF靶场的题目

信息收集

2-1-Where is flag

考点:网站源代码
在这里插入图片描述

查看网页源代码,发现flag
在这里插入图片描述

2-2-Where is logo

考点:robots.txt
在这里插入图片描述
拿到之后使用扫描工具进行扫描

在这里插入图片描述
尝试看看robots.txt

在这里插入图片描述
尝试下拉查看

在这里插入图片描述
在这里面找flag,那就写一个小脚本吧

import requests
if __name__ == '__main__':
    
    url = 'http://127.0.0.1/ctfLearning/chapter2/2-2-Where%20is%20logo/robots.txt'
    headers = {
   
   
            'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/84.0.4147.105 Safari/537.36'
        }
    
    response = requests.get(url=url,headers=headers).content.decode('utf-8')
    
    f = "{}abcdefghigklmnopqrst1234567890_-"
    flag = ''
    # with open('./1.txt','wr',encoding='utf-8') as fp:
    #     fp.write(response)
    with open('./1.txt', 'r', encoding='utf-8') as fp:
        for line in fp.read():
            if line in f:
                flag = flag + line
    print(flag)

在这里插入图片描述

2.3粗心的小明

考点:index.php.bak
本地环境没有效果,因为利用的是Apache解析漏洞,使用御剑big扫描
在这里插入图片描述
找到flag

2.4Discuz 3.2

考点:.git泄露
在这里插入图片描述

D:\桌面\CTF\CTF安全竞赛入门\chapter2-Web\题目2-4-git文件泄露\GitHack-master>python27 GitHack.py http://eci-2ze170c5z2f9f14cd8uj.cloudeci1.ichunqiu.com/.git/
[+] Download and parse index file ...
index.html
[OK] index.html

在这里插入图片描述

HTTP

2.5 Careful

考点:response字段
在这里插入图片描述
既然提示看看现在正在发生什么,那就使用bp抓包。

在这里插入图片描述

2-6-你不是阿凡达

考点:request请求中language字段
刚开始,页面和书上完全不同,什么都不显示。我就查看了源代码
在这里插入图片描述
改正代码后

在这里插入图片描述
提示语言不是阿凡达,抓包修改语言类型

跳过先

修改语言

在这里插入图片描述

2.7特殊浏览器

考点:User-agent字段
在这里插入图片描述
源码有错误,需要修改
在这里插入图片描述

2.8 猜猜我是谁

考点:request中的cookie字段
在这里插入图片描述

在这里插入图片描述

SQL注入

2-9 简单的注入

只是sql-labs第一关加了flag表
在这里插入图片描述
可手工也可sqlmap

2-10 POST注入

在这里插入图片描述
使用BP抓包

在这里插入图片描述
将抓到的包复制到本地
在这里插入图片描述
使用sqlmap跑出数据
在这里插入图片描述

2-11万能注入

在这里插入图片描述
随便尝试
在这里插入图片描述
出现报错发现没有and,应该被过滤掉了,但是#未被过滤掉
在这里插入图片描述
尝试使用万能密码
在这里插入图片描述
在这里插入图片描述

2-12宽字节注入

在这里插入图片描述
经过后台扫描,发现只有这样一张图片,所以将图片下载到本地进行分析
在这里插入图片描述
发现好像是zip,修改后缀
在这里插入图片描述

在这里插入图片描述
根据提示,添加username和password
在这里插入图片描述
尝试宽字节注入

在这里插入图片描述

代码审计

2-13小试身手

考点:MD5()函数漏洞
在这里插入图片描述
首先分析代码

<?php
include('config.php');
if(empty($_GET['md5'])) die(show_source(__FILE__));
if($_GET['md5']!='240610708' && md5($_GET['md5']) == md5('240610708')) echo $flag;
?>
1

主要对这句话进行解读吧die(show_source(__FILE__));

show_source():就是对文件的内容的显示
在这里插入图片描述

_ FILE_ :常量脚本所在的路径。

die() 函数输出一条消息,并退出当前脚本。
在这里插入图片描述

合起来就是,输出以高亮显示当前文件。

MD5()函数漏洞
在这里插入图片描述
PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。

攻击者可以利用这一漏洞,通过输入一个经过哈希后以”0E”开头的字符串,即会被PHP解释为0,如果数据库中存在这种哈希值以”0E”开头的密码的话,他就可以以这个用户的身份登录进去,尽管并没有真正的密码。

说了半天是啥意思呐?
在这里插入图片描述
在这里插入图片描述
构造payload
在这里插入图片描述

涉及资源:
https://blog.csdn.net/qq_19980431/article/details/83018232

https://blog.csdn.net/u014549283/article/details/81288443

2-14小小加密

在这里插入图片描述
分析加密步骤:

1.首先将字符串读进来,反转字符串得到$_o
2.逐位取,然后将ascii码+1
3.编码后相加赋值给$_c
4.输出的时候先使用base64编码,然后反转,最后进行str_rot13编码。

解密步骤
1.先str_rot13解码
2.反转字符串
3.逐位转ascii -1,然后编码
4.相加后 ,反转字符串

在这里插入图片描述
wp

<?php
    function decode($str){
   
   
        $res = base64_decode(strrev(str_rot13($str
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南岸青栀*

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值