CTF_web_新手模式题目集(ing)

在此记录学习ctf的过程。

目录

1.GFSJ0482.weak_auth

2. GFSJ0485.simple_php

 3.GFSJ0712.baby_web

4.GFSJ1004.inget

5.GFSJ1004.fileinclude

6.GFSJ0481.xff_referer

7. GFSJ1059.easyphp

8. GFSJ0100.NewsCenter


1.GFSJ0482.weak_auth

 先输入用户名和密码测试一下

显示

这时候使用burp抓包。看一下具体信息

发送到intruder

开始爆破

2. GFSJ0485.simple_php

题目如下

逐步分析

<?php
show_source(__FILE__);//此命令会显示当前文件的源代码,通常用于调试和学习目的。
include("config.php");//包含(导入)一个名为"config.php"的文件。这个文件可能包含一些配置信息等

//这两行代码从GET请求中获取两个参数,分别赋值给变量$a和$b。@操作符用于抑制错误信息,即使请求的参数不存在也不会产生错误
$a=@$_GET['a'];
$b=@$_GET['b'];
if($a==0 and $a){//$a是否等于0并且存在(不是null)。如果满足条件,则输出变量$flag1的值
    echo $flag1;
}
if(is_numeric($b)){//检查变量$b是否为数字。如果是,则程序停止执行(exit()函数的作用)
    exit();
}
if($b>1234){//如果变量$b的值大于1234,则输出变量$flag2的值。
    echo $flag2;
}
?>

 看到这有两个矛盾

1.a要等于0还要存在

2.b不是数字但要大于1234

这就涉及了php字符串比较了

在php里字符串与数字类型比较,字符串会先转换数字类型,

  • 如果数字字符串开头具有字母,如"a1234",它都是零
  • 如果数字字符串结尾或中间具有字母,只转换前面数字部分

了解后,可以写payload

a=a123&b=1235b

 3.GFSJ0712.baby_web

根据题目要求初始页面为index.php,然后访问一下,使用burp抓包

发送到Repeater

4.GFSJ1004.inget

看到题目第一时间想到id爆破但试了很久没有成功,猜想可能是sql注入,知识点在这

sql注入基础原理(超详细)_sql注入原理图-CSDN博客

 

输入sql注入语句 1'or 1=1--+,--+是注释后面语句

5.GFSJ1004.fileinclude

题目告诉我们flag在flag.php文件里,但是不知道flag.php文件在哪,右键检查看看到提示

逐一分析

<!--?php
if( !ini_get('display_errors') ) {//检查当前的PHP配置中是否显示错误信息。如果display_errors没有被设置或者为off,那么这行代码会将其设置为on
  ini_set('display_errors', 'On');//直接设置display_errors为on,以确保错误信息在页面上显示。
  }
error_reporting(E_ALL);//开启所有的错误报告,这意味着所有的PHP错误(包括警告和通知)都会被报告。
$lan = $_COOKIE['language'];//从用户的cookie中获取语言设置。
if(!$lan)// 如果cookie中没有设置语言,这执行以下语句
{
	@setcookie("language","english");//设置默认语言为英语
	@include("english.php");//包含英语内容的文件
}
else
{
	@include($lan.".php");//包含相应语言的文件
}
$x=file_get_contents('index.php');// 读取并存储index.php文件的内容到变量$x
echo $x;
?-->

分析可知出现了文件漏洞,知识点在这https://blog.csdn.net/m0_46467017/article/details/126380415

如果将名为 language 的 cookie 设置为 php://filter/read=convert.base64-encode/resource=flag,代码会将该 cookie 的值作为 PHP 文件路径,并尝试读取该文件的内容.

Cookie: language=php://filter/read=convert.base64-encode/resource=/var/www/html/flag

使用burp抓包,发送到Repeater

 解码得到答案

6.GFSJ0481.xff_referer

题目非常明确

需要了解X-Forwarded-For和Referer的知识

  • X-Forwarded-For:X-Forwarded-For:简称XFF头,它代表客户端,也就是HTTP的请求端真实的IP
  • Referer:HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器我是从哪个页面链接过来的

 使用burp抓包,发送到Repeater

X-Forwarded-For: 123.123.123.123

Referer: https://www.google.com

设置Referer: https://www.google.com

7.GFSJ0627.web2

目的很明显,写出对应的解密函数就行。

先分析函数

$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";

function encode($str){
    $_o=strrev($str);
    // echo $_o;
        
    for($_0=0;$_0<strlen($_o);$_0++){
       
        $_c=substr($_o,$_0,1);
        $__=ord($_c)+1;
        $_c=chr($__);
        $_=$_.$_c;   
    } 
    return str_rot13(strrev(base64_encode($_)));
}

highlight_file(__FILE__);
/*
   逆向加密算法,解密$miwen就是flag
*/
?>
里面只要知道几个函数就行了

strrev(string): 反转字符串
strlen(string): 返回字符串的长度
substr(string, start, length): 返回字符串,从start开始,长度为length
ord(string): 返回字符串首个字符的 ASCII 值
chr(): 从指定的 ASCII 值返回对应的字符
str_rot13(string): 对字符串执行 ROT13 编码
base64_encode(string): 使用base64对数据进行编码

注意:在PHP中,$_=$_.$_c; 的意思是将变量 $_c 的值追加到变量 $_ 的末尾。这里的 . 是字符串连接操作符,用于将两个字符串连接在一起。
过程:循环开始:给encode一个参数 $str
将所传参数 $str 通过 strrev() 函数反转字符串操作并赋值给 $_o
循环遍历 变量 $_o
在for循环中首先依次取字符串 $_o 的第 $_0 个值,赋值给 $_c
将变量 $c 转化为 ASCII码 并 +1,赋值给 $_
将 $__ 转化为该ASCII码所对应的字符,赋值给 $_c
拼接字符串,赋值给 $_ , 循环结束。
将拼接好后的字符串 $_ 进行 base64编码
将编码后的值进行反转字符串操作
对反转后的字符串进行 rot13 加密
得出结果为 $miwen

解密函数

<?function decode($str){
    $_o = base64_decode(strrev(str_rot13($str)));
    for($_0=0;$_0<strlen($_o);$_0++){
        $_c=substr($_o,$_0,1);
        $__=ord($_c)-1;
        $_c=chr($__);
        $_=$_.$_c;   
    } 
    return strrev($_);
}
$miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
echo decode($miwen)
?>

得出答案:flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

 8.1059.easyphp

<?php
highlight_file(__FILE__);
$key1 = 0;
$key2 = 0;

$a = $_GET['a'];
$b = $_GET['b'];

if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
    if(isset($b) && '8b184b' === substr(md5($b),-6,6)){
        $key1 = 1;
        }else{
            die("Emmm...再想想");
        }
    }else{
    die("Emmm...");
}

$c=(array)json_decode(@$_GET['c']);
if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){
    if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){
        $d = array_search("DGGJ", $c["n"]);
        $d === false?die("no..."):NULL;
        foreach($c["n"] as $key=>$val){
            $val==="DGGJ"?die("no......"):NULL;
        }
        $key2 = 1;
    }else{
        die("no hack");
    }
}else{
    die("no");
}

if($key1 && $key2){
    include "Hgfks.php";
    echo "You're right"."\n";
    echo $flag;
}

?> Emmm...

答案取于攻防世界

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

叶枯雪落光仍在

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

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

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

打赏作者

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

抵扣说明:

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

余额充值