HGAME 2019 WEB week2

1.easy_php

HGAME 2019 WEB week2_第1张图片
题目的标题给出了提示,查看robots.txt
HGAME 2019 WEB week2_第2张图片
再查看http://118.24.25.25:9999/easyphp/img/index.php,得到源码。
HGAME 2019 WEB week2_第3张图片
由题目可知$img = $_GET['img'],我们需要传入一个名为img的变量,其中$img = str_replace('../', '', $img),会将$img中的../替换为空,这种替换方式可以用双写../....//进行绕过。接着include_once($img.".php")为我们解决问题提供了思路,我们可以利用文件包含漏洞进行任意文件读取。payolad:http://118.24.25.25:9999/easyphp/img/index.php?img=php://filter/read=convert.base64-encode/resource=....//flag

2.php trick

这道题结合了多种php函数的漏洞,由浅入深,学到了不少东西。
HGAME 2019 WEB week2_第4张图片

1.step1和step2要求str1不能等于str2但是md5值要相等,我们注意到md5($str1) != md5($str2)中用到的是!=我们可以找两个md5值开头两位是0e的字符串,利用科学记数法即可进行绕过。
2.step3和step4的要求和上面的类似,但是判断md5值时用到的是!==我们可以传入两个值不相同的数组进行绕过。
3.step5中的strpos($_SERVER['QUERY_STRING'], "H_game") !==false要求我们的url中不能存在H_game但我们的str5获取的变量名就是H_game,百度到了一个php的小特性。
HGAME 2019 WEB week2_第5张图片
因此我们只需要修改H_gameH.game即可进行绕过
step6:is_numeric($str5)要求str5不能为数字,可以利用传入数组进行绕过。
step7:$str5<9999999999要求str5大于9999999999,我们直接传入一个以科学计数法表示的数9e9即可。
step8: (string)$str5>0将str5字符串化后的值不能大于0,此时我们的str5已经是一个数组了,(string)$str5的返回值为Array,已经满足了条件。
step9和step10考察了php中parse_url()函数的作用解析url并返回其组成部分,这是我在网上找到的例子。
HGAME 2019 WEB week2_第6张图片
但是我们的目标是访问admin.php。要利用parse_url和curl对域名的解析差异,构造http://@[email protected]/admin.php即可满足需求
在这里插入图片描述
得到提示
HGAME 2019 WEB week2_第7张图片
将url修改为http://@127.0.0.1:[email protected]/admin.php得到源码
HGAME 2019 WEB week2_第8张图片
看到file_get_contents($filename),文件包含漏洞进行对flag.php的读取url=http://@127.0.0.1:[email protected]/admin.php/?filename=php://filter/read=convert.base64-encode/resource=flag.php
HGAME 2019 WEB week2_第9张图片

3.PHP Is The Best Language

在这里插入图片描述
首先以post方式设置变量$door$door作为明文,$secret作为密钥重新对$secert进行赋值。但是我们并不知道$secret的具体数值。
在这里插入图片描述
接着$gate也被明文为以post方式传入的$key,密钥为上文修改的$secret重新赋值,同样的我们还是不知道密钥的值具体是多少。因此$gate的值也不知道具体是多少。
HGAME 2019 WEB week2_第10张图片
但是我们传入的变量$gate需要和加密过的$gate的值相同。这个时候我们就需要利用hash_mac函数的一个漏洞,就是如果传入的明文为数组的时候,返回的值为NULL。也就是说我们传入的$door变量如果是一个数组,那么$secret变量的值也就被修改为了已知的NULL。
在当时做这道题时,接下来的if语句没能成功地进行绕过
HGAME 2019 WEB week2_第11张图片
在看完官方的wp之后才知道,存在一次md5加密后值开头为0e再次加密后md5值开头依旧是0e的的字符串(如7r4lGXCH2Ksu2JNT3BYM),这样就可以利用php弱类型相等进行绕过了,最后的payload为
在这里插入图片描述
HGAME 2019 WEB week2_第12张图片

你可能感兴趣的:(HGAME 2019 WEB week2)