赞
踩
在此记录学习ctf的过程。
目录
先输入用户名和密码测试一下
显示
这时候使用burp抓包。看一下具体信息
发送到intruder
开始爆破
题目如下
逐步分析
- <?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里字符串与数字类型比较,字符串会先转换数字类型,
了解后,可以写payload
a=a123&b=1235b
根据题目要求初始页面为index.php,然后访问一下,使用burp抓包
发送到Repeater
看到题目第一时间想到id爆破但试了很久没有成功,猜想可能是sql注入,知识点在这
sql注入基础原理(超详细)_sql注入原理图-CSDN博客
输入sql注入语句 1'or 1=1--+,--+是注释后面语句
题目告诉我们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
解码得到答案
题目非常明确
需要了解X-Forwarded-For和Referer的知识
使用burp抓包,发送到Repeater
X-Forwarded-For: 123.123.123.123
Referer: https://www.google.com
设置Referer: https://www.google.com
目的很明显,写出对应的解密函数就行。
先分析函数
- $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}
- <?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...
答案取于攻防世界
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。