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

[BUUCTF 2018]Online Tool

从源代码中我们可以看到,system中的$host是可控变量,存在命令执行的可能性。但是这边进行了两次转义。

另外一个可控变量是$sanbox,但是该变量用来创建目录和切换目录,不清楚如何利用。

看解析学学基础知识再做吧...

escapeshellarg()和escapeshellcmd()都是转义函数,下面是AI给的解释: 

escapeshellarg($host)

该函数会在字符串两边添加单引号,并对字符串里的单引号进行转义处理。。

escapeshellarg() 的核心逻辑是:

  • 将参数中的每个单引号 ' 替换为 '\''
  • 在字符串两端添加单引号

举例:

原始输入: 172.17.0.2' -v -d a=1

替换单引号: 172.17.0.2'\'' -v -d a=1

添加首尾引号: '172.17.0.2'\'' -v -d a=1'

根据shell的解析规则

  • 单引号的作用:shell 将 '...' 内的内容视为一个整体字符串,即使包含空格或特殊字符。
  • 转义后的单引号:'\'' 被解析为:
    1. 第一个单引号 ':结束当前字符串
    2. 反斜杠和单引号 \':转义后的单引号字符
    3. 第二个单引号 ':开启新的字符串
  • 相当于变成了三部分内容贴在一起。
  • shell中相邻字符串贴在一起相当于连接,因此变换后的内容在shell中的含义不变。防止了用户利用单引号闭合执行恶意代码。

escapeshellcmd($host)

escapeshellarg专注于将用户输入的内容作为一个整体字符串,然而此函数专注于对字符串中可能被用于执行命令的元字符进行转义,包括 ; & | ` " ' < > ^ ( ) [ ] { } $ \ # * ? ! 空格

但是该函数缺陷很明显,会使某些正常命令无法执行。

两种转义函数同时使用就会出现转义故障:escapeshellcmd会将escapeshellarg用来转义的'\'符号进一步转义,进而使原来需要转义的符号逃逸。

举个例子: ' (单引号)经过第一个函数转义变成 ' \' ' ,再经过第二个函数转义变成' \\' '。这样的话

" \\ "会被解析为" \ "符号,而后面的单引号就逃逸了。

但是我有个疑惑,在第二次转义时' \' '中的单引号不会再次转义吗?别人的博客说道只有未闭合的单引号才会被转义

@mkdir()    创建目录,@抑制错误输出

chdir()   将当前工作目录切换到特定目录

nmap   网络扫描命令

nmap中的-oG参数可以将代码与命令写到文件中,比如nmap <?php phpinfo();?> -oG 1.php,就是将这个phpinfo();语句写在了1.php里内了。

因此我们可以先利用mkdir和chdir创建文件并切换工作区,然后利用命令执行将一句话木马写到该文件中。关键在于绕过字符转义:

目标是执行nmap ......  <?php eval($_POST[0]);?> -oG shell.php

突然有个问题,直接/?host=<?php eval($_POST[0]);?> -oG shell.php 又会有什么问题呢?

第一次转义后是'<?php eval($_POST[0]);?> -oG shell.php'(添加引号包裹),经过第二次转义后是,想不明白...先留着吧...

http://www.dtcms.com/a/275404.html

相关文章:

  • 事件驱动设计:Spring监听器如何像咖啡师一样优雅处理高并发
  • java单例设计模式
  • Leet code 每日一题
  • 基于随机森林的金融时间序列预测系统:从数据处理到实时预测的完整流水线
  • FreeRTOS—动态创建与删除任务实战;静态创建与删除任务实战
  • ubuntu18.04 升级Ubuntu 20.04
  • 外设数据到昇腾310推理卡 之一
  • Linux进程管理的核心:task_struct中的双链表与网状数据结构
  • 【攻防实战】记一次DC2攻防实战
  • 【Linux仓库】虚拟地址空间【进程·陆】
  • DVWA靶场通关笔记-XSS DOM(Low级别)
  • 力扣-19. 删除链表的倒数第N个节点
  • 前端内容-ES6
  • Vue.js:从 Web 到桌面的跨端实践与技术选型指南
  • 虚拟现实的镜廊:当技术成为存在之茧
  • AI之DL之VisualizationTool:ai-by-hand-excel的简介、安装和使用方法、案例应用之详细攻略
  • 生成式对抗网络(GAN)模型原理概述
  • 用 Python 将分组文本转为 Excel:以四级词汇为例的实战解析
  • Socket到底是什么(简单来说)
  • HTTP和HTTPS部分知识点
  • w460实习生管理系统
  • Linux中Gitee的使用
  • 【小沐杂货铺】基于Three.JS绘制汽车展示Car(WebGL、vue、react、autoshow、提供全部源代码)
  • vue3 el-table动态表头
  • vite如何生成gzip,并在服务器上如何设置开启
  • tp8.0\jwt接口安全验证
  • Ubuntu快速搭建QT开发环境指南,5000字解析!!
  • 自动化证书续签工具针对VPS服务器HTTPS服务的维护实践
  • windows电脑远程win系统服务器上的wsl2
  • 企业选择大带宽服务器租用的原因有哪些?