当前位置: 首页 > wzjs >正文

网站建设 app开发网站做外汇需要了解的网站

网站建设 app开发网站,做外汇需要了解的网站,如何做论坛网站 知乎,东莞公司做网站使用浏览器直接访问目标页面 只有一张图片没有其他标签信息&#xff0c;尝试查看页面前端源码 CtrlU查看该页源码 通过该页源码可见&#xff0c;存在注释&#xff1a;<!--source.php-->&#xff0c;因此尝试访问该文件 通过该页面展示不难看出这些是PHP代码&#xff0c;…

使用浏览器直接访问目标页面

  • 只有一张图片没有其他标签信息,尝试查看页面前端源码

Ctrl+U查看该页源码

  • 通过该页源码可见,存在注释:`<!--source.php-->`,因此尝试访问该文件

  • 通过该页面展示不难看出这些是PHP代码,将代码拖出进行审计
 <?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\" />";}  
?> 

使用大模型自动化为该代码进行逐行注释,以便我们进行阅读审计

<?php// 高亮显示当前 PHP 文件的源代码,用于调试或展示代码结构highlight_file(__FILE__);// 定义一个名为 emmm 的类,该类用于检查文件是否合法class emmm{// 定义一个静态方法 checkFile,用于检查传入的文件是否在白名单中// &$page 表示通过引用传递 $page 变量,这样可以在方法内部修改该变量的值public static function checkFile(&$page){// 定义一个白名单数组 $whitelist,包含允许访问的文件及其对应的别名$whitelist = ["source"=>"source.php","hint"=>"hint.php"];// 检查 $page 是否未设置或者不是字符串类型if (! isset($page) || !is_string($page)) {// 如果不满足条件,输出提示信息echo "you can't see it";// 返回 false 表示文件不合法return false;}// 检查 $page 是否在白名单数组中if (in_array($page, $whitelist)) {// 如果在白名单中,返回 true 表示文件合法return true;}// 截取 $page 中从开头到第一个问号(?)之前的部分,存储在 $_page 变量中$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));// 检查截取后的 $_page 是否在白名单数组中if (in_array($_page, $whitelist)) {// 如果在白名单中,返回 true 表示文件合法return true;}// 对 $page 进行 URL 解码,存储在 $_page 变量中$_page = urldecode($page);// 对解码后的 $_page 再次截取从开头到第一个问号(?)之前的部分$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));// 检查再次截取后的 $_page 是否在白名单数组中if (in_array($_page, $whitelist)) {// 如果在白名单中,返回 true 表示文件合法return true;}// 如果以上所有检查都不通过,输出提示信息echo "you can't see it";// 返回 false 表示文件不合法return false;}}// 检查 $_REQUEST['file'] 是否不为空,并且是字符串类型,并且通过了 emmm::checkFile 方法的检查if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {// 如果所有条件都满足,包含并执行 $_REQUEST['file'] 指定的文件include $_REQUEST['file'];// 终止脚本执行exit;} else {// 如果条件不满足,输出一张图片的 HTML 代码echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";}  
?> 

将这些代码进行简单拆分后可以拆分成两个部分:
  1. 函数检查部分
  2. 文件包含执行部分
首先尝试分析相对较短的文件包含执行部分的代码
// 检查 $_REQUEST['file'] 是否不为空,并且是字符串类型,并且通过了 emmm::checkFile 方法的检查if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {// 如果所有条件都满足,包含并执行 $_REQUEST['file'] 指定的文件include $_REQUEST['file'];// 终止脚本执行exit;} else {// 如果条件不满足,输出一张图片的 HTML 代码echo "<br><img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";} 
?>
  • 可见该部分最后三行属于无关项,因此将其删去仅保留重点
// 检查 $_REQUEST['file'] 是否不为空,并且是字符串类型,并且通过了 emmm::checkFile 方法的检查if (! empty($_REQUEST['file'])&& is_string($_REQUEST['file'])&& emmm::checkFile($_REQUEST['file'])) {// 如果所有条件都满足,包含并执行 $_REQUEST['file'] 指定的文件include $_REQUEST['file'];// 终止脚本执行exit;}
  • 简单分析可知,这部分代码最后会对`$_REQUEST['file']`部分进行文件包含。所需条件为
  1. `$_REQUEST['file']`中的内容不能为空
  2. `$_REQUEST['file']`必须是字符串类型
  3. `$_REQUEST['file']`必须已通过函数检查部分

总结:当上面三个条件判断均为时,将对file参数指定的文件进行文件包含操作

由此,文件包含执行的代码部分就解析完了,只有三个简单条件判断因此也相对易理解


接下来审计函数检查部分代码

<?php
// &$page 表示通过引用传递 $page 变量,这样可以在方法内部修改该变量的值
public static function checkFile(&$page)
{// 定义一个白名单数组 $whitelist,包含允许访问的文件及其对应的别名$whitelist = ["source"=>"source.php","hint"=>"hint.php"];// 检查 $page 是否未设置或者不是字符串类型if (! isset($page) || !is_string($page)) {// 如果不满足条件,输出提示信息echo "you can't see it";// 返回 false 表示文件不合法return false;}// 检查 $page 是否在白名单数组中if (in_array($page, $whitelist)) {// 如果在白名单中,返回 true 表示文件合法return true;}// 截取 $page 中从开头到第一个问号(?)之前的部分,存储在 $_page 变量中$_page = mb_substr($page,0,mb_strpos($page . '?', '?'));// 检查截取后的 $_page 是否在白名单数组中if (in_array($_page, $whitelist)) {// 如果在白名单中,返回 true 表示文件合法return true;}// 对 $page 进行 URL 解码,存储在 $_page 变量中$_page = urldecode($page);// 对解码后的 $_page 再次截取从开头到第一个问号(?)之前的部分$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));// 检查再次截取后的 $_page 是否在白名单数组中if (in_array($_page, $whitelist)) {// 如果在白名单中,返回 true 表示文件合法return true;}// 如果以上所有检查都不通过,输出提示信息echo "you can't see it";// 返回 false 表示文件不合法return false;
}

  • 此处定义了一个whitelist数组,用作后续白名单文件的判断

$whitelist = ["source"=>"source.php","hint"=>"hint.php"];

  • 此处用于判断该文件是否正确传参进入该判断函数,以及该文件是否为字符串

if (! isset($page) || !is_string($page))

  • 此处用于判断传入的文件是否存在于白名单中,即是否为source.phphint.php文件

if (in_array($page, $whitelist))

尝试访问hint.php文件获取更多信息

  • 该页只有一条文本,猜测Flag应该存储在根目录下的ffffllllaaaagggg文件中

flag not here, and flag in ffffllllaaaagggg

接着往下对函数检查部分代码进行审计这里到了重点

  • 可见这部分代码在该函数中出现了两次
$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));
首先对mb_strpos函数进行分析

mb_strpos($_page . '?', '?')

首先看:`$_page . '?'`这部分:这代表了首先将在文件末尾拼接一个问号`?`

  • 例如原文为:?ABCDE
  • 经过拼接后变为:?ABCDE?

再从整体`mb_strpos($_page . '?', '?')`分析:这代表了将从?ABCDE?中查找第一个问号的位置

原文为:`?ABCDE`时每个字符的位置(蓝色数字)

因此,当原文为?ABCDE时,该函数`mb_strpos($_page . '?', '?')`将会返回结果:0

原文为:`ABCDE`时每个字符的位置(蓝色数字)

假设,当原文为:ABCDE时,该函数`mb_strpos($_page . '?', '?')`将会返回结果:5

该函数为防止该字符串不存在`?`符,在末尾添加`?`符以便后续其他函数的判断

接着对mb_substr函数进行分析

$_page = mb_substr($_page,0,mb_strpos($_page . '?', '?'));

  • 可将三个函数拆分成三个部分:A、B、C

$_page = mb_substr( A , B , C );

  • 首先分析该函数中的三个参数

$_page,0,mb_strpos($_page . '?', '?')

  1. A部分($_page:用于标识对该字符串是待处理字符串
  2. B部分(0:表示截取的起始位置这里为0也就是从头开始
  3. C部分(mb_strpos($_page . '?', '?'):由于mb_strpos函数最终返回的是一个长度值,因此这里代表的是mb_substr的截取长度)

因此,经过mb_substrmb_strpos的复合操作后,返回示例如下

$_page原文为:?ABCDE时,C部分返回长度为0,B部分从0开始截取,返回空串

$_page原文为:ABCDE时,C部分返回长度为5,B部分从0开始截取,返回ABCDE


此处出现了两次截取和判断白名单

  • 由图可知,两次截取判断中间仅做了一次URL解码,猜测是为了防止攻击者使用编码绕过
$_page = urldecode($page);

至此所有判断函数和代码均已分析完成,尝试逐一进行绕过
  • 尝试绕过第一次白名单判断,注意URL/?file=为传参点不参与判断运算

构造链接:URL/?file=source.php?URL/?file=hint.php?,此时$page=source.phphint.php存在于白名单中

  • 尝试绕过第一次截取后加白名单判断

构造链接:URL/?file=source.php?URL/?file=hint.php?,经过截取后$_page=source.phphint.php依然存在于白名单

使用urldecode函数对$page进行URL解码后其值不变,因为我们在构造的链接中未对任何字符进行URL编码

  • 尝试绕过第二次截取后加白名单判断

$_page = urldecode($page);

  • 上述代码,会将source.phphint.php传给$_page变量中,通过mb_strpos函数自动往末尾拼接`?`符进行截取后,结果依然是source.phphint.php,因此同样可以通过白名单判断

不论是截取还是白名单判断,综合来看source.phphint.php问号后面的字符串自始至终都不参与到任何判断

  • 因此,我这里尝试通过include函数对路径限制不够严格的特性读取ffffllllaaaagggg文件

构造完整链接:URL/?file=source.php?../../../../../ffffllllaaaagggg

  • 由于不知道多少个`../`可以回到根目录,所以逐个添加尝试即可

include函数将会解析字符串:source.php?../../../../../ffffllllaaaagggg

  1. 如果在靶机WebAPP当前目录下存在source.php文件,include将包含source.php文件而忽略../../../../../ffffllllaaaagggg文件
  2. 而如果在靶机WebAPP当前目录下找不到source.php文件,include函数会将整个字符串作为路径尝试解析,因此读取到../../../../../ffffllllaaaagggg文件

访问构造好的链接即可获取FLAG

URL/?file=source.php?../../../../../ffffllllaaaagggg

URL/?file=hint.php?../../../../../ffffllllaaaagggg


文章转载自:

http://r2j9KsCH.dsxgc.cn
http://TqVVpca6.dsxgc.cn
http://gmDfMDGY.dsxgc.cn
http://AN1N3gaP.dsxgc.cn
http://Kb99layP.dsxgc.cn
http://rAWLMyAA.dsxgc.cn
http://szzV7a1j.dsxgc.cn
http://dmUOTheW.dsxgc.cn
http://xKgHjyQQ.dsxgc.cn
http://f9Glt47K.dsxgc.cn
http://jGJ5qLdp.dsxgc.cn
http://FzSYHax2.dsxgc.cn
http://kjAF58ST.dsxgc.cn
http://Ri1xvxEJ.dsxgc.cn
http://a96L3FaH.dsxgc.cn
http://6VyUb0Tw.dsxgc.cn
http://pMO0dNhM.dsxgc.cn
http://N5YDiblj.dsxgc.cn
http://Du983LTt.dsxgc.cn
http://2mbUj1jO.dsxgc.cn
http://1stKY9QB.dsxgc.cn
http://SjKrUi8M.dsxgc.cn
http://t011wrs2.dsxgc.cn
http://qCB7ULBS.dsxgc.cn
http://c7MXCHWl.dsxgc.cn
http://vsh88P7i.dsxgc.cn
http://YGbmalni.dsxgc.cn
http://5c22fDnN.dsxgc.cn
http://ADgtm8GJ.dsxgc.cn
http://FcTOMYwV.dsxgc.cn
http://www.dtcms.com/wzjs/760812.html

相关文章:

  • 网站备案主体 被拉黑制作营销网站
  • 建设一个国外服务器的网站如何制作微信小程序教程
  • 以下属于网站页面设计的原则有网页设计代码看不到图片怎么办
  • php网站开发实例教程第七章中国建筑工程网承包企业管理系统
  • 佛山网站建设案例手机版电脑qq登录入口
  • 自己网站做搜索引擎优化桥梁建设 网站
  • 湖南网站建设 搜搜磐石网络东莞企业网站哪家好
  • 企业网站开发到上线的视频广告公司简介范文大全
  • 医药公司网站模板个人网站设计论文道客巴巴
  • 广西平台网站建设报价网站建设实验步骤
  • 使用ftp软件连接到网站空间用模板做的网站多少钱
  • 网站建设好评语wordpress网站提速
  • 凌云县 城市建设 网站深圳sem竞价托管
  • delphi网站开发教程动漫wordpress主题下载
  • 棋牌游戏网站怎么做的东莞市网络seo推广
  • 滨州住房和城乡建设部网站做网站图片无法显示的原因
  • 网站制作开发及优化是什么小程序定制开发
  • 制作个人网站百度地图导航下载安装
  • 东莞网站设计知名 乐云践新岗顶网站设计
  • 小猫mip网站建设电子商务网站开发参考文献
  • 音乐网站怎么做无线增值业务百度下载文章转wordpress
  • 网站制作公司去哪找自己做的网站如何上传
  • 网站有备案 去掉备案甘肃多元网络
  • 网站设计公司山东烟台手机怎么创建自己的网页
  • 网站开发语言有哪些wordpress标签code
  • 做企业网站需要多少钱做网站的书籍推荐
  • 临沂 企业网站建设人工智能培训公司
  • 如何做网站接口网站设计交流
  • 枣阳做网站wordpress 标签下的文章
  • 沅江网站开发设计与网站建设案例