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

网站集约化建设的优势学做蛋糕网站

网站集约化建设的优势,学做蛋糕网站,网站服务器开发,centos7是怎么做网站的一、题目如下#xff1a; 二、代码解读#xff1a; 这段代码是一个简单的PHP脚本#xff0c;它接受通过GET请求传递的两个参数#xff1a;‘pass’和’func’#xff1a; ① $password trim($_GET[pass] ?? );#xff1a;从GET请求中获取名为’pass’的参数#xff0…一、题目如下 二、代码解读 这段代码是一个简单的PHP脚本它接受通过GET请求传递的两个参数‘pass’和’func’ ① $password trim($_GET[pass] ?? );从GET请求中获取名为’pass’的参数然后使用trim函数去除首尾空格并将结果赋给变量 $password。如果’pass’参数不存在则使用空字符串。 ② $func trim($_GET[func] ?? hint);从GET请求中获取名为’func’的参数然后使用trim函数去除首尾空格并将结果赋给变量$func。如果’func’参数不存在则默认使用字符串’hint’。 ③ function hint() {show_source(__FILE__);} 定义了一个名为hint的函数它的作用是显示当前文件的源代码使用了show_source函数。 ④ if (md5(\$password)21c6008facc283f8839d3b9fed640c15) {检查通过GET请求传递的’pass’参数的MD5哈希值是否等于指定的值。如果匹配进入条件块。 ⑤ function youwin() {echo file_get_contents(/flag);}在条件成立时定义了一个名为youwin的函数它的作用是输出名为’/flag’的文件的内容使用了file_get_contents函数。 ⑥ $func();调用根据’func’参数确定的函数。默认情况下如果’func’参数不存在将调用hint函数。 二、解题思路 常规思路就是绕过 md5 效验。但是这里是强比较显然无法绕过。尝试参数爆破看有没有除pass、func 额外的请求参数 bp 跑参数字典 果然发现了一个 file 请求参数使用 readfile() 函数读取文件尝试任意文件读取 尝试读取 flag, 发现存在拦截 readfile() 可以直接读取 php 文件且php代码不会被解析 读取当前文件源代码 尝试绕过 preg_match 正则传递数组参数 成功绕过但是 readfile() 不接受数组作为参数 网上没找到 readfile() 相关漏洞的文献资料。故放弃… 想起上上周看到 p 牛10月份写的一篇文章提到了 PHP 临时函数名特性 , 且给的题目案例跟这题很像。 2023年10月PHP函数小挑战 PHP在编译“函数定义”的时候会使用 zend_compile_func_decl 函数。这个函数有个关键的参数叫 toplevel这个参数表示当前的函数定义是否在顶层作用域。 顶层作用域 顶层作用域通常是指在全局范围内声明的变量、函数或类而不是在任何函数或控制结构内声明的。 ?php// 在顶层作用域定义的函数 function func1() {echo func1; }if (true) {// 在if条件判断内部定义的函数不是顶层作用域function func2() {echo func2;} }当toplevel为true的时候就是直接将当前函数名 lcname 加入函数表当 toplevel为false的时候使用 zend_build_runtime_definition_key 函数生成一个 key将 key 作为函数名加入函数表。也就是说根据函数所在的位置的不同是否是顶级作用域PHP编译时生成的函数名也会不同。 key 是按照如下算法生成 \0 name filename : start_lineno $ rtd_key_counter除了第一个 \0 字符后面四部分的含义如下 name 函数名filename PHP文件绝对路径start_lineno 函数起始定义行号以1为第一行rtd_key_counter 一个全局访问计数每次执行会自增1从0开始 最后保存在函数表中的函数名就是上面这个以 \0 开头的字符串。 以上是看 p 牛的文章简要梳理一下核心知识点。但是我发现一个问题 图中说只要构造\0 name filename : start_lineno $ rtd_key_counter 调用就可以了但是后面图中 payload 又是 %00 name filename : start_lineno $ rtd_key_counter 这种方式 为什么又变成了 %00 而不是 \0 呢小小的探究一下 前提windowsphp 7.4 要限制7.4版本稍后会说 vld.dll 内存监控插件 要下载和php版本相对应的 本地编写和比赛环境一样的代码文件名为965ee283f4c848ad99b0a7961ed89199.php使用php7.4 配合vld插件解释运行 ./php -d vld.execute0 -d vld.active1 E:\phpstudy_pro\WWW\php-learn\965ee283f4c848ad99b0a7961ed89199.php可以看到实际的临时函数名确实是以 %00 开头的。php 底层是由C语言编写的在C语言中\0和%00实际上有相似的作用都表示空字符null character。\0是C语言中用于表示空字符的一种方式通常用在字符串中作为字符串的结束标志。%00通常是在格式化输入输出函数中使用的格式说明符表示空字符。 我们请求参数被php接收并解释运行也是一个输入的过程所以要使用 %00 为开头构建。个人见解 为什么要限制 php7.4 这个版本去复现呢 我尝试使用 php7.3 版本配合vld插件去解释运行相同的代码得到如下 不同版本有差异性7.4 版本结尾更加具有规律性能爆破。 按照上面的思路按照 zend_build_runtime_definition_key 的算法计算出 key 作为函数名(rtd_key_counter 从 0 开始爆破) %00youwin/var/www/html/965ee283f4c848ad99b0a7961ed89199.php:7$rtd_key_counter比赛环境没了本地搭了一个。 发现爆破不出flag: trim 函数在接收参数的时候会去除掉字符串首尾的空白字符。可以加反斜杠绕过\%00 故要改写成如下 \%00youwin/var/www/html/965ee283f4c848ad99b0a7961ed89199.php:7$rtd_key_counterbp 开始爆破 rtd_key_counter 得 flag:
http://www.sadfv.cn/news/64315/

相关文章:

  • 电商网站规划与建设方案北京网站建设电扬科技
  • 怎样弄微信公众号seo关键词优化外包
  • 公司网站开发费用建设生鲜网站价格
  • 玉环建设规划局网站vue怎么做网站
  • 丹阳火车站对面规划制作论文招聘网站的
  • 域名和网站的关系硬件开发
  • 无锡网站制作工具厉害的网站开发
  • 网站跳到另一个网站怎么做wordpress logo.svg
  • 广州网站建设总结wordpress纯代码
  • 朝阳网站建设开发wordpress 后台管理
  • 电商网站的活动怎么做整合网络营销策划
  • 手机搭建网站工具一地址和二地址
  • 常州做网站的 武进怎么做简单网站
  • 企业网站建设企业有平面广告设计的网站
  • 河间网站制作厦门最好的seo公司
  • 做封面下载网站昆山网站建设培训学校
  • 网站开发的基本知识网站建设费用一年
  • 网站建设都是模板长春整站优化
  • 网站建设合同简单模板做网站前段可以考什么证书
  • 卢松松网站厦门加盟网站建设
  • 网页制作作业网站网站可以称为系统吗
  • 太原市建站外包公司wordpress标题转英文
  • 众美商务公馆做网站杭州建设网址
  • 怎么做网站里导出没有水印的图桂林户外论坛
  • 怎么做电商平台网站腕表手表网站
  • 一级a做爰片免费网站 视频医疗云网站建设
  • psd做网站切片云服务器 能用来做网站吗
  • 高校网站群建设方案丰城网站建设公司
  • 优质校建设网站有专门做预算的网站没
  • 北京网页制作网站wordpress访问速度突然好慢