您的位置:首页 > 汽车 > 新车 > 网络营销公司搭建平台_公司变更法人_网站关键词优化系统_北京网站seowyhseo

网络营销公司搭建平台_公司变更法人_网站关键词优化系统_北京网站seowyhseo

2025/1/4 12:22:38 来源:https://blog.csdn.net/2301_80148821/article/details/143439709  浏览:    关键词:网络营销公司搭建平台_公司变更法人_网站关键词优化系统_北京网站seowyhseo
网络营销公司搭建平台_公司变更法人_网站关键词优化系统_北京网站seowyhseo

[HCTF 2018]WarmUp 1

审题

  1. 观察题目,查看源代码,看到source.php。

image-20240108145814183

  1. 访问,看到源代码。

知识点

PHP的代码审计,include函数的应用,文件包含漏洞。

代码审计

 <?phphighlight_file(__FILE__);class emmm{public static function checkFile(&$page){$whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}if (in_array($page, $whitelist)) {return true;}$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}}if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}  
?> 
  1. 整个代码可以分为俩个部分,一个是emmm类,另一个是file参数的获取。

    emmm类

    emmm类可以分为四个部分

第一部分:

   $whitelist = ["source"=>"source.php","hint"=>"hint.php"];if (! isset($page) || !is_string($page)) {echo "you can't see it";return false;}

这一部分有两个作用

  1. 定义$whitelist参数,也就是我们常说的白名单。
  2. 是判断传入的$page参数是否存在,并且是否为字符串。如果不满足这两个条件中的任意一个函数就会返回false。

第二部分

 if (in_array($page, $whitelist)) {return true;}

这个部分的内容很简单,就是判断page参数是否等于白名单里的内容,如果等于就返回true。

第三部分:

 $_page = mb_substr($page,0,mb_strpos($page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}

这一部分也分为两部分

  1. 使用mb_substr函数让page参数中?之前的字符串被截取,后面的字符消失。
  2. 让被截取后的$page参数和白名单匹配,如果相等返回true。

第四部分:

$_page = urldecode($page);$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));if (in_array($_page, $whitelist)) {return true;}echo "you can't see it";return false;}

这一部分和第二部分十分像,只是在开头加了一个url解码。

file获取(可以看成C语言中的main函数)

if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {include $_REQUEST['file'];exit;} else {echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}  

这一部分十分简单,可以分为几个作用

  1. 判断file不为空,
  2. 判断是否为字符串
  3. 是否可以通过emmm类中的checkFile函数,也就是让它返回true。
  4. 如果以上条件都通过就进行include函数,include函数可以调用php文件从而形成安全隐患。

解题

在看到代码后可以发现还有一个hint.php,访问后得到flag在ffffllllaaaagggg文件中

屏幕截图 2024-01-08 153711

经过上面的代码审计之后,我们可以很容易的看到file函数构造的要求。

  1. 不为空
  2. 要是字符串
  3. 通过emmm返回ture
  4. 让include访问ffffllllaaaagggg文件

emmm中

第一部分也是判断

第二部分要求page本身就是source.php或者hint.php

第三部分可以通过问号来截取符合要求的部分,可以利用。

第四部分同理,将第三部分的答案ulr加密后也可以利用。

最后使用/让source.php?或者hint.php?成为不存在的目录,再用…/跳转到ffffllllaaaagggg文件就行。

**tip:正常情况下,URL 的路径部分表示要访问的文件或目录的路径。当 URL 中的路径部分以斜杠 “/” 结尾时,服务器通常会将其解析为目录而不是文件。然而,如果在该斜杠后面紧跟查询参数,如 “source.php?/”,服务器会将其视为一个文件路径,并尝试查找名为 “source.php?” 的文件。然而由于这个目录不存在就会被看成一个不存在的目录。 **

最后得到答案file=hint.php?/…/…/…/…/ffffllllaaaagggg或者source.php?/…/…/…/…/ffffllllaaaagggg。

**tip:…/一定要大于4个,可以多不能少,如果少了无法跳转到flag目录 **

image-20240108155033462

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com