BugkuCTF-WEB-第1题到第42题

本文详细介绍了Bugku CTF Web挑战的第1题到第42题的解题过程,涉及各种Web安全知识点,包括SQL注入、XSS、文件包含、命令注入、逻辑漏洞等。每道题目通过分析源码、F12检查、抓包、使用工具等手段找出解题关键,通过输入特定参数或构造payload来获取flag。

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

BugkuCTF-WEB-第1题到第42题

https://ctf.bugku.com/challenges
这里整理了bugkuCTF-WEB 1~42题的部分解法,部分题目已失效,很多题目有多种解法,想多了解更多的同学请搜索相关题目的wp,想学习更多的同学,欢迎去bugku新平台CTF论剑场https://new.bugku.com/
在这里插入图片描述

1.web2

web2
题目地址:http://123.206.87.240:8002/web2/

F12看一下 flag就在里面
在这里插入图片描述

2.计算器

在这里插入图片描述
题目地址:http://123.206.87.240:8002/yanzhengma/
文本框限制了输入,F12改一下在这里插入图片描述
成功获得flag在这里插入图片描述

3.web基础$_GET

在这里插入图片描述
题目地址:http://123.206.87.240:8002/get/在这里插入图片描述
GET传参,如果what=flag,输出flag
在这里插入图片描述

4.web基础$_POST

在这里插入图片描述
题目地址:http://123.206.87.240:8002/post/

在这里插入图片描述
POST传参,如果what=flag,输出flag
在这里插入图片描述

5.矛盾

在这里插入图片描述
题目地址:http://123.206.87.240:8002/get/index1.php
在这里插入图片描述
num既不能是数字字符,但是要等于1,用科学计数法表示数字1,既不是纯数字,其值又等于1,构造payload:num=1e0.1
在这里插入图片描述

6.web3

在这里插入图片描述
题目地址:http://123.206.87.240:8002/web3/
在这里插入图片描述
打开页面会有弹窗,点很多次也关不掉,我们把这个选项勾选再点确定就不会弹窗了

在这里插入图片描述
右键查看网页源代码
在这里插入图片描述
最下面有一串Unicode编码转换
在这里插入图片描述
复制在http://tool.chinaz.com/tools/unicode.aspx转换后
在这里插入图片描述

7.域名解析

在这里插入图片描述
将自己电脑的hosts文件最后加上123.206.87.240 flag.baidu.com之后访问flag.baidu.com
得到flag修改回来
windows :c:\windows\system32\drivers\etc\hosts
linux :/etc/hosts
在这里插入图片描述

8.你必须让他停下

在这里插入图片描述

题目地址:http://123.206.87.240:8002/web12/
在这里插入图片描述
查看网页源代码,看到flag is here,检察元素,手快的我截到图了
在这里插入图片描述
在这里插入图片描述
也可以用BurpSuite抓包,找到刷新出图片的那一张
在这里插入图片描述

9.本地包含

在这里插入图片描述题目链接:http://123.206.87.240:8003/ 链接已失效
在这里插入图片描述

wp来自https://blog.youkuaiyun.com/Sanky0u/article/details/77197523
右键查看源代码
在这里插入图片描述
搜了一下@$_REQUEST 的意思是获得参数,不论是@$_GET还是@$_POST可以得到的参数@$_REQUEST都能得到。 所以构造hello的get参数。
$a应该最后会像字符串替换一样替换成hello的参数值吧。

<1> hello=);print_r(file("flag.php")
<2> hello=);var_dump(file("flag.php")
<3> hello=file("flag.php")
<4> hello=);include(@$_POST['b']POST区域:b=php://filter/convert.base64-encode/resource=flag.php
<5> hello=);include("php://filter/convert.base64-encode/resource=flag.php"

在这里插入图片描述
之后将获得的flag.php的base64编码后的源码解码得到flag。
在这里插入图片描述

10.变量1

在这里插入图片描述题目链接:http://123.206.87.240:8004/index1.php在这里插入图片描述

error_reporting(0);                    // 关闭php错误显示
include "flag1.php";                   // 引入flag1.php文件代码
highlight_file(__file__);              //对文件进行语法高亮显示
if(isset($_GET['args'])){
   
                 // 条件判断 get方法传递的args参数是否存在 
    $args = $_GET['args'];             //赋值给变量  $args
    if(!preg_match("/^\w+$/",$args)){
   
     // /^开始, \w表示任意一个单词字符,即[a-zA-Z0-9_] ,+将前面的字符匹配一次或多次,$/结尾
        die("args error!");            //输出 args error! 
    }
    eval("var_dump($$args);");         // 将字符串作为php代码执行结尾加分号 var_dump()函数 显示关于一个或多个表达式的结构信息,包括表达式的类型与 值。数组将递归展开值,通过缩进显示其结构。$$args 可以理解为$($args)
}
?>

抓住两个地方,一个是正则表达式匹配,不匹配则直接die,该正则表达式应该是匹配都是字母的串。然后最关键的是最后的KaTeX parse error: Can't use function '$' in math mode at position 17: …rgs,这是可变变量的意思,如$̲args的值是另一个变量的变量…args就代表另一个变量。所以我们就给args赋值一个变量名,那么PHP的九大全局变量,一个一个试。

$_POST [用于接收post提交的数据]
$_GET [用于获取url地址栏的参数数据]
$_FILES [用于文件就收的处理img 最常见]
$_COOKIE [用于获取与setCookie()中的name 值]
$_SESSION [用于存储session的值或获取session中的值]
$_REQUEST [具有get,post的功能,但比较慢]
SERVER[是预定义服务器变量的一种,所有SERVER[是预定义服务器变量的一种,所有_SERVER [是预定义服务器变量的一种,所有_SERVER开头的都
$GLOBALS [一个包含了全部变量的全局组合数组]
$_ENV [ 是一个包含服务器端环境变量的数组。它是PHP中一个超级全局变量,我们可以在PHP 程序的任何地方直接访问它]

当args=GLOBALS时,flag出现。
在这里插入图片描述

11.web5

在这里插入图片描述
题目链接:http://123.206.87.240:8002/web5/
在这里插入图片描述
随便提交一下
在这里插入图片描述
F12看一下,发现一串超级长的数据
在这里插入图片描述
将其复制到控制台,按回车
在这里插入图片描述
出现flag,提交不正确,想到题目上提示字母大写,提交正确
在这里插入图片描述

12.头等舱

在这里插入图片描述
题目链接:http://123.206.87.240:9009/hd.php
在这里插入图片描述
查看网页源代码和F12竟然真的什么也没有(没什么有价值的信息),那就抓个包看看
在这里插入图片描述
将抓到的包发送到repeater,再点发送,得到flag
在这里插入图片描述

13.网站被黑

在这里插入图片描述
题目链接:http://123.206.87.240:8002/webshell/
在这里插入图片描述
看到url上有webshell,猜测有webshell文件,扫一下后台
在这里插入图片描述
发现shell.php,需要登录密码
在这里插入图片描述
拿Burp Suite爆破一下,密码是hack
在这里插入图片描述
得到flag
在这里插入图片描述

14.管理员系统

在这里插入图片描述
题目链接:http://123.206.31.85:1003/
在这里插入图片描述
随便试了一个账户密码,显示IP禁止访问,请联系本地管理员登陆,IP已被记录. F12看一下,有一串base64编码
在这里插入图片描述
解码之后感觉这个是密码,IP禁止被访问,那我们就自己伪造一个XFF头
在这里插入图片描述
X-Forwarded-For: 127.0.0.1
在这里插入图片描述
得到flag
在这里插入图片描述

15.web4

在这里插入图片描述
题目链接:http://123.206.87.240:8002/web4/
在这里插入图片描述
看看源代码? 那我们就看看
在这里插入图片描述
两串url编码,解码看看
在这里插入图片描述

代码整理如下:

<script>
var p1 = 'function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b';
var p2 = 'aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").οnsubmit=checkSubmit;';
eval(unescape(p1) + unescape('54aa2' + p2));
</script>

eval(unescape(p1) + unescape(’%35%34%61%61%32’ + p2));这句代码的含义是:p1串的编码+‘%35%34%61%61%32’的编码+p2串的编码。这是一个拼接的字符串,解码之后,拼接完成,回到网页中提交,网页直接爆出了flag。
在这里插入图片描述

16.flag在index里

在这里插入图片描述
题目链接:http://123.206.87.240:8005/post/
在这里插入图片描述
点击它
在这里插入图片描述
观察url出现?file=show.php 于是想到php://filter
这里具体详解见:https://www.leavesongs.com/PENETRATION/php-filter-magic.html
把url改成http://123.206.87.240:8005/post/index.php?file=php://filter/read=convert.base64-encode/resource=index.php
首先这是一个file关键字的get参数传递,php://是一种协议名称,php://filter/是一种访问本地文件的协议,/read=convert.base64-encode/表示读取的方式是base64编码后,resource=index.php表示目标文件为index.php在这里插入图片描述
得到index.php的base64编码,解码后得到flag在这里插入图片描述
https://www.php.net/manual/zh/wrappers.php.php

17.输入密码查看flag

在这里插入图片描述
题目链接:http://123.206.87.240:8002/baopo/
在这里插入图片描述
5位数字密码,话不多说直接爆破
在这里插入图片描述
得到密码为13579
在这里插入图片描述

18.点击一百万次

在这里插入图片描述
题目链接:http://123.206.87.240:9001/test/ 已失效
在这里插入图片描述
wp来自https://www.cnblogs.com/0yst3r-2046/p/10745979.html
在这里插入图片描述
要是真的点击一百万次,怕是点到手抽筋,哈哈哈哈
本题要点:控制台js、传参
查看一下源码
在这里插入图片描述
查看源码,发现了clicks变量,当它为1000000应该能得到flag
方法一:
直接F12,选择控制台,然后输入clicks=1000000,然后回车,再点击一下网站那个图案,发现得到了flag。在这里插入图片描述
方法二:
用POST提交cllicks=1000000,得到flag。 在这里插入图片描述

19.备份是个好习惯

在这里插入图片描述
题目链接:http://123.206.87.240:8002/web16/
在这里插入图片描述
观察发现是两串相同的MD5,拿去解密,是空密码,题目名叫备份是个好习惯,那么可能存在备份文件,扫一下
在这里插入图片描述
果真有备份文件,访问,下载一个文件,打开index.php.bak,里面是php代码

<?php
/**
 * Created by PhpStorm.
 * User: Norse
 * Date: 2017/8/6
 * Time: 20:22
*/

include_once "flag.php";//包含flag.php
ini_set("display_errors", 0);//设置危险等级为0的会报错
$str = strstr($_SERVER['REQUEST_URI'], '?');//设变量str的值为url中?后面的字符串
$str = substr($str,1);//设str为str中第一位开始后的字符串
$str = str_replace('key','',$str);//把str中的key替换成空
parse_str($str);//把str中的字符串解析为变量
echo md5($key1);//输出md5加密的key1

echo md5($key2);//输出md5加密的key2
if(md5($key1) == md5($key2) && $key1 !== $key2){
   
   
    echo $flag."取得flag";
}//如果key1的md5加密等于key2的md5加密并且key1不等于key2的值就输出flag
?>

1.将key变为空的函数我们用kkeyey绕过,他会让我们的kkeyey变为key
2.就是if函数的绕过
前面做过,md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。利用==比较漏洞,如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。
下列的字符串的MD5值都是0e开头的:
QNKCDZO
240610708
s878926199a
s155964671a
s214587387a
s214587387a
在这里插入图片描述
在这里插入图片描述

20.成绩单

在这里插入图片描述
题目链接:http://123.206.87.240:8002/chengjidan/
在这里插入图片描述
输入1,2,3都正常回显,输入4无回显,然后输入1‘无回显1’ and 1=1#正常回显
在这里插入图片描述
1’ order by 4 #有回显,1’ order by 5 #无回显
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值