Challenge-24

image.png

$a=(array)json_decode(@$_GET['foo']);

传入 foo 参数json格式的 数组

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

判断 $a[“bar1”] 是否满足 is_numeric,若满足则die掉。接下来又判断 $a[“bar1”] 是否大于 2016 。
使用弱类型绕过
bar1=2017a
这样is_numeric时会判断其为字符串而不是数字,而在与2016的比较中,会直接转换成2017,满足大于2016。这样 v1 就被设置为 1 了。

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"]是个数组,其中元素的个数为5个(count($a["bar2"])!==5)
同时要求$a["bar2"][0]是数组。所以我们设置:$a["bar2"] = [[],2,3,4,5]
对于 $pos = array_search("nudt", $a["a2"]);,它搜索字符串“nudt”$a["a2"]中的位置。若没有找到,array_search返回false,会通过严格比较导致die掉。所以这里要设置$a["a2"] = “nudt”
注意这里因为用了$pos===false?的严格比较,所以0不===false
之后就能设置 v2 = 1
结合$a是由json_decode得来,所以第一个payload为:

foo={"bar1":"2017a","bar2":[[],2,3,4,5],"a2":["nudt"]}

$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), "htctf2016")?$v3=1:NULL;
   }
}

先会用strcmp进行比较,利用数组array和字符串进行strcmp比较会返回null,而且数组array也不会等于字符串,我们可以设置cat[1]为一个数组。

接下来用eregi对拼接后的字符串$d.$c[0]进行正则匹配,若匹配到则die掉。而下一步又要求拼接字符串$c[0].$d中要有字符串“htctf2016”。这里利用%00eregi的截断功能,则在正则匹配eregi时在开头时就匹配结束掉。
strpos(($c[0].$d), "htctf2016")中,还要求“htctf2016”不能出现在开头。

payload:
?foo={"bar1":"2017e","bar2":[[],2,3,4,5],"a2":["nudt"]}&cat[0]=ahtctf2016&cat[1][]=&dog=%00

image.png

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这段代码主要是为了导入并配置图像匹配模型。下面是每一句的注释: 1. sys.path.append('/kaggle/input'):将/kaggle/input目录添加到系统路径中,以便能够导入该目录下的模块。 2. sys.path.append('/tmp'):将/tmp目录添加到系统路径中,以便能够导入该目录下的模块。 3. from imc23superglue.models.matching import Matching:从imc23superglue.models.matching模块中导入Matching类,用于执行图像匹配任务。 4. INPUT_ROOT = '/kaggle/input/image-matching-challenge-2023':设置输入数据的根目录。 5. DATA_ROOT = '/kaggle/data':设置数据处理后的根目录。 6. OUTPUT_ROOT = '/kaggle/working':设置输出结果的根目录。 7. DEBUG = False:设置是否启用调试模式。 8. datasets_scenes = []:创建一个空列表,用于存储数据集和场景。 9. sample_submission_df = pd.read_csv(f"{INPUT_ROOT}/sample_submission.csv"):读取样本提交文件,并将其存储为Pandas数据帧。 10. for _, r in sample_submission_df[['dataset', 'scene']].iterrows()::遍历样本提交数据帧中的每一行。 11. ds = f"{r.dataset}/{r.scene}":获取当前行的数据集和场景,并将它们合并为一个字符串。 12. if ds not in datasets_scenes::如果当前数据集和场景的字符串不在列表中,则执行以下操作。 13. datasets_scenes.append(ds):将当前数据集和场景的字符串添加到列表中。 14. matching_name = 'SuperGlue':设置图像匹配模型的名称为SuperGlue。 15. image_sizes = [1088]:设置图像的大小为1088像素。 16. extra_matcher = None:设置额外的匹配器为None。 17. extra_image_sizes = []:设置额外的图像大小列表为空。 18. USE_ROI = False:设置是否使用感兴趣区域(ROI)为False。 19. ROI_SIZE = 1024:设置ROI的大小为1024像素。 20. sim_th = None:设置相似度阈值为None。 21. n_matches = 100:设置最大匹配数为100。 22. num_exhaustives = 7:设置穷举次数为7。 23. thresh_exhaustives = 3:设置穷举阈值为3。 24. matching_config = {...}:创建一个字典,其中包含超级点(SuperPoint)和超级匹配(SuperGlue)的配置参数。 25. matching_model = Matching(matching_config).cuda().half().eval():创建一个图像匹配模型对象,使用上述配置参数,并将其迁移到GPU上。最后,将其设置为半精度模式,并将其设置为评估模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值