2021年第六届全国网络空间安全技术大赛 web easyweb
发布日期:2021-06-23 03:28:52 浏览次数:2 分类:技术文章

本文共 2036 字,大约阅读时间需要 6 分钟。

目录


打开题目就是代码审计

2021)?$v1=1:NULL; } if(is_array(@$a["bar2"])){ if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope"); $pos = array_search("nudt", $a["a2"]); $pos===false?die("nope"):NULL; foreach($a["bar2"] as $key=>$val){ $val==="nudt"?die("nope"):NULL; } $v2=1; }}$c=@$_GET['cat'];$d=@$_GET['dog'];if(@$c[1]){ if(!strcmp($c[1],$d) && $c[1]!==$d){ eregi("3|1|c",$d.$c[0])?die("nope"):NULL; strpos(($c[0].$d), "cstc2021")?$v3=1:NULL; }}if($v1 && $v2 && $v3){ include "flag.php"; echo $flag;}?>

粘贴到本地,分析一波

这个代码主要考查的知识点比较杂,包括进行一些绕过,%00截断eregi()函数,用的最多的还是php数组绕过

整体思路

我们需要输入的参数有三个,并且都是GET方式输入,经过代码执行,$v1,$v2,$v3会从0变为1,就会进行文件包含得到flag。

 

1. 对$v1进行分析

is_numeric(@$a["bar1"])?die("nope"):NULL;   if(@$a["bar1"]){       ($a["bar1"]>2021)?$v1=1:NULL;

因为php的比较会先将两边的数据类型转化为同一类型,然后再进行比较。

如果,$a[“bar1”]=2022a,那么既可以满足不是数字类型,同时进行数据比较的时候也可以满足大于2021。

 

2. 对$V2进行分析

if(is_array(@$a["bar2"])){       if(count($a["bar2"])!==5 OR !is_array($a["bar2"][0])) die("nope");       $pos = array_search("nudt", $a["a2"]);       $pos===false?die("nope"):NULL;       foreach($a["bar2"] as $key=>$val){           $val==="nudt"?die("nope"):NULL;       }       $v2=1;

$a[“bar2”]必须要是五个元素,并且第一个元素需要是数组,

所以构造$a[“bar2”]=[[],1,2,3,4]

同时$a[“a2”]中存在nudt,

并且$a[“bar2”]中没有nudt,所以构造

foo={“bar1”:”2022a”,”bar2”: [[],1,2,3,4],”a2”:[“nudt”]}

 

3. 对$V3进行分析

$c=@$_GET['cat'];$d=@$_GET['dog'];if(@$c[1]){   if(!strcmp($c[1],$d) && $c[1]!==$d){       eregi("3|1|c",$d.$c[0])?die("nope"):NULL;       strpos(($c[0].$d), "cstc2021")?$v3=1:NULL;   }

1. GET方式传值cat和dog,然后进行strcmp比较,之前做过类似的题目,可以使用数组和字符串进行比较,返回NULL,同时也满足!==

2. 而eregi是对拼接后的字符串进行匹配(不过该函数有点老了),匹配到则die,

3. 而strpos又需要拼接后的字符串从第二个字符开始就是cstc2021(strpos下标是从0开始的),所以可以用%00进行截断

令%d=%00,$c[0]=acstc2021

这样的话,绕过eregi的同时又可以匹配到cstc2021

$d.$c[0]=%00acstc2021$c[0].$d=acstc2021%00

所以最终的Payload:

?foo={"bar1":"2022a","bar2":[[],2,3,4,5],"a2":["nudt"]}&cat[0]=acstc2021&cat[1][]=&dog=%00

最终得到flag


总结:自己还是学得不到位,这个题目就浪费了许多时间,导致得分太低。本次比赛还是靠队友带了,惭愧。。。未来还有很长的路,加油学!!!!

转载地址:https://blog.csdn.net/RABCDXB/article/details/116462653 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:【Python】第3章-10 统计大写辅音字母 (15分)
下一篇:【Python】第3章-11 字符串排序 (20分)

发表评论

最新留言

能坚持,总会有不一样的收获!
[***.219.124.196]2024年04月02日 04时15分19秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章