Day23

 

never give up

 

http://123.206.87.240:8006/test/hello.php Bugku-CTF之never give up 随笔 第1张

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。   本题要点:url编码,base64编码,代码审计,php函数      查看源码~ Bugku-CTF之never give up 随笔 第2张 Bugku-CTF之never give up 随笔 第3张   访问1p.html http://123.206.87.240:8006/test/1p.html   发现时bugku主页  查看一下源码 view-source:http://123.206.87.240:8006/test/1p.html Bugku-CTF之never give up 随笔 第4张 Bugku-CTF之never give up 随笔 第5张   url解码得到:     <script>window.location.href=' http://www.bugku.com';</script> <!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->     发现还有一层base64   解密 Bugku-CTF之never give up 随笔 第6张 Bugku-CTF之never give up 随笔 第7张       又是一层url~ 继续解密 发现是这样的一段代码   <!--";if(!$_GET['id'])          #限制 URL 查询字符串中必须有非空非零变量 id {     header('Location: hello.php?id=1');     exit(); } $id=$_GET['id']; $a=$_GET['a']; $b=$_GET['b']; if(stripos($a,'.'))               #限制变量 $a 中不能含有字符 . {     echo 'no no no no no no no';     return ; } $data = @file_get_contents($a,'r'); if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)              #要满足以下 5 条表达式才会爆 flag(见代码后面) #变量 $data 弱等于字符串 bugku is a nice plateform!   {     require("f4l2a3g.txt"); } else {     print "never never never give up !!!"; }     ?>-->       5条表达式~
  • 变量 $id 弱等于整型数 0
  • 变量 $b 的长度大于 5
  • 字符串 1114 要与字符串 111 连接变量 $b 的第一个字符构成的正则表达式匹配
  • 变量 $b 的第一个字符弱不等于整型数 4
  • 变量 $data 弱等于字符串 bugku is a nice plateform! 

 

 

查一下php的手册,https://php.net/manual/zh/types.comparisons.php

  Bugku-CTF之never give up 随笔 第8张 Bugku-CTF之never give up 随笔 第9张       PHP 伪协议 php:// - 访问各种I / O流   查一下php的手册~~~ 参考:https://www.php.net/manual/en/wrappers.php.php   源码中变量 $data 是由 file_get_contents() 函数读取变量 $a 的值而得,所以 $a 的值必须为数据流。   在服务器中自定义一个内容为 bugku is a nice plateform! 文件,再把此文件路径赋值给 $a,显然不太靠谱。   因此这里用伪协议 php:// 来访问输入输出的数据流,其中 php://input可以访问原始请求数据中的只读流。 这里令 $a = "php://input",并在请求主体中提交字符串 bugku is a nice plateform!。       再次需要查查php手册了~~   参考:https://php.net/manual/en/function.eregi.php   eregi() 截断漏洞   ereg() 函数或 eregi() 函数存在空字符截断漏洞,即参数中的正则表达式或待匹配字符串遇到空字符则截断丢弃后面的数据。   源码中待匹配字符串(第二个参数)已确定为 "1114",正则表达式(第一个参数)由 "111" 连接 $b 的第一个字符组成,若令 substr($b,0,1) = "\x00",即满足 "1114" 与 "111"匹配。因此,这里假设 $b = "\x0012345",才能满足条件。       回到题目中   构造 payload   分析出以上三个变量应该等于什么值之后 接下来构造出对应的 payload 去 拿flag 了。   注意一点~ 在构造变量 b 中的空字符时,过早将空字符 \x00 放入,在提交请求时导致请求头截断,继而请求失败,得不到响应。   因为   Bugku-CTF之never give up 随笔 第10张

 

所以构造下面语句   Bugku-CTF之never give up 随笔 第11张 Bugku-CTF之never give up 随笔 第12张       或者有一种投机取巧的方法,直接访问~     Bugku-CTF之never give up 随笔 第13张 Bugku-CTF之never give up 随笔 第14张       完成!     参考资料: https://php.net/manual/zh/types.comparisons.php https://www.php.net/manual/en/wrappers.php.php https://php.net/manual/en/function.eregi.php  
扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄