当前位置:   article > 正文

CTF_web_新手模式题目集(ing)

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

题目如下

逐步分析

  1. <?php
  2. show_source(__FILE__);//此命令会显示当前文件的源代码,通常用于调试和学习目的。
  3. include("config.php");//包含(导入)一个名为"config.php"的文件。这个文件可能包含一些配置信息等
  4. //这两行代码从GET请求中获取两个参数,分别赋值给变量$a和$b。@操作符用于抑制错误信息,即使请求的参数不存在也不会产生错误
  5. $a=@$_GET['a'];
  6. $b=@$_GET['b'];
  7. if($a==0 and $a){//$a是否等于0并且存在(不是null)。如果满足条件,则输出变量$flag1的值
  8. echo $flag1;
  9. }
  10. if(is_numeric($b)){//检查变量$b是否为数字。如果是,则程序停止执行(exit()函数的作用)
  11. exit();
  12. }
  13. if($b>1234){//如果变量$b的值大于1234,则输出变量$flag2的值。
  14. echo $flag2;
  15. }
  16. ?>

 看到这有两个矛盾

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文件在哪,右键检查看看到提示

逐一分析

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

分析可知出现了文件漏洞,知识点在这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

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

先分析函数

  1. $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
  2. function encode($str){
  3. $_o=strrev($str);
  4. // echo $_o;
  5. for($_0=0;$_0<strlen($_o);$_0++){
  6. $_c=substr($_o,$_0,1);
  7. $__=ord($_c)+1;
  8. $_c=chr($__);
  9. $_=$_.$_c;
  10. }
  11. return str_rot13(strrev(base64_encode($_)));
  12. }
  13. highlight_file(__FILE__);
  14. /*
  15. 逆向加密算法,解密$miwen就是flag
  16. */
  17. ?>
  18. 里面只要知道几个函数就行了
  19. strrev(string): 反转字符串
  20. strlen(string): 返回字符串的长度
  21. substr(string, start, length): 返回字符串,从start开始,长度为length
  22. ord(string): 返回字符串首个字符的 ASCII 值
  23. chr(): 从指定的 ASCII 值返回对应的字符
  24. str_rot13(string): 对字符串执行 ROT13 编码
  25. base64_encode(string): 使用base64对数据进行编码
  26. 注意:在PHP中,$_=$_.$_c; 的意思是将变量 $_c 的值追加到变量 $_ 的末尾。这里的 . 是字符串连接操作符,用于将两个字符串连接在一起。
  27. 过程:循环开始:给encode一个参数 $str
  28. 将所传参数 $str 通过 strrev() 函数反转字符串操作并赋值给 $_o
  29. 循环遍历 变量 $_o
  30. for循环中首先依次取字符串 $_o 的第 $_0 个值,赋值给 $_c
  31. 将变量 $c 转化为 ASCII码 并 +1,赋值给 $_
  32. $__ 转化为该ASCII码所对应的字符,赋值给 $_c
  33. 拼接字符串,赋值给 $_ , 循环结束。
  34. 将拼接好后的字符串 $_ 进行 base64编码
  35. 将编码后的值进行反转字符串操作
  36. 对反转后的字符串进行 rot13 加密
  37. 得出结果为 $miwen

解密函数

  1. <?function decode($str){
  2. $_o = base64_decode(strrev(str_rot13($str)));
  3. for($_0=0;$_0<strlen($_o);$_0++){
  4. $_c=substr($_o,$_0,1);
  5. $__=ord($_c)-1;
  6. $_c=chr($__);
  7. $_=$_.$_c;
  8. }
  9. return strrev($_);
  10. }
  11. $miwen="a1zLbgQsCESEIqRLwuQAyMwLyq2L5VwBxqGA3RQAyumZ0tmMvSGM2ZwB4tws";
  12. echo decode($miwen)
  13. ?>

得出答案:flag:{NSCTF_b73d5adfb819c64603d7237fa0d52977}

 8.1059.easyphp

  1. <?php
  2. highlight_file(__FILE__);
  3. $key1 = 0;
  4. $key2 = 0;
  5. $a = $_GET['a'];
  6. $b = $_GET['b'];
  7. if(isset($a) && intval($a) > 6000000 && strlen($a) <= 3){
  8. if(isset($b) && '8b184b' === substr(md5($b),-6,6)){
  9. $key1 = 1;
  10. }else{
  11. die("Emmm...再想想");
  12. }
  13. }else{
  14. die("Emmm...");
  15. }
  16. $c=(array)json_decode(@$_GET['c']);
  17. if(is_array($c) && !is_numeric(@$c["m"]) && $c["m"] > 2022){
  18. if(is_array(@$c["n"]) && count($c["n"]) == 2 && is_array($c["n"][0])){
  19. $d = array_search("DGGJ", $c["n"]);
  20. $d === false?die("no..."):NULL;
  21. foreach($c["n"] as $key=>$val){
  22. $val==="DGGJ"?die("no......"):NULL;
  23. }
  24. $key2 = 1;
  25. }else{
  26. die("no hack");
  27. }
  28. }else{
  29. die("no");
  30. }
  31. if($key1 && $key2){
  32. include "Hgfks.php";
  33. echo "You're right"."\n";
  34. echo $flag;
  35. }
  36. ?> Emmm...

答案取于攻防世界

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/Cpp五条/article/detail/501688
推荐阅读
相关标签
  

闽ICP备14008679号