Web_php_include
show_source()(与highlight_file()函数作用相同)函数的作用是将括号中的PHP文件高亮显示,而_FILE_是PHP中的常量,代表本PHP文件的绝对路径,因此show_source(_FILE_)即将本PHP文件高亮显示
strstr()函数:strstr($txt1,$txt2),查找txt2是否在txt1中存在,如果是则返回txt1中txt2及其后面的部分。因此while(strstr($page, "php://"))即查找$page变量中有无包含php://,当没有时退出循环。
str_replace()函数:str_replace(“txt1”,”txt2”,”txt3”),将txt3中的txt1换成txt2。
Include()(函数(require()):引用文件中的内容并显示
因此可以推测答案或者答案的线索需要通过include()函数显示出来
该代码while循环的作用是过滤掉$page参数中的”php://”,因此可以推测php://配合include函数可以获得flag或flag的线索
协议:php:// 用于访问PHP的各个输入输出流、标准输入输出和错误描述符,内存中、磁盘备份的临时文件流以及可以操作其他读取写入文件资源的过滤器
- php://input 用于直接读取post上没有被解析的数据,与$_post、$HTTP_RAW_POST_DATA用法相似
- php://output 用于输出数据流,具体操作以后再学习
- php://filter 文件操作协议,可以对磁盘中的文件进行读写操作,具体操作以后再学习
由此可以看出,将php://input代码通过$page插入include函数后,再通过post传入特定代码,即可查询网站中希望得到的信息。
在此介绍system函数
用法system($shell, $shell_return),$shell为shell命令,$shell_return为返回参数,成功为0,$shell_return非必要参数。
因此只需通过post传参,构造一个system函数的PHP文件,通过include函数执行,通过不同的shell命令即可逐步查询想要的信息。
解题思路:由于while循环将通过strstr()、str_replace()函数过滤代码php://,得知这两个函数对大小写敏感后,将$page值改为PHP://input即可绕过
然后再构造PHP文件,
<?php system(‘ls’)?>查询网站根目录下所有文件名得知目录下有fl4gisisish3r3.php文件
<?php system(“cat fl4gisisish3r3.php”)?>
得到flagctf{876a5fca-96c6-4cbd-9075-46f0c89475d2}
法2:page=http://127.0.0.1/index.php/?hello=%3C?system(%22ls%22);?%3E
法3:蚁剑扫描后台,通过sql注入写入一句话木马,即可查看后台文件
PHP2
首先须知后缀名为phps的文件为php文件的源文件,可以通过查询phps文件来查看对应php文件的源码
查看index.phps后发现index.php的源码,首先进行代码审计
开头的if语句告诉我们id的值不能等于admin
urldecodes()函数的作用是解码已编码的url字符串
故将admin字符串进行两次url编码,在url框处浏览器会自动将url编码解码一次,此时由于数据类型不同绕过if语句,在urldecode函数又将其进行一次解码,即可满足第二个if语句的条件,从而获得flag:cyberpeace{484f72489d53cfe7e30b3afb073176b6}
php_rce
ThinkPHP是PHP的一个框架,在网上搜索ThinkPHP V5.0版本的漏洞加以利用即可。
在刚开始的时候完全没有思路,类似框架的漏洞没办法像sql注入一样系统地学习,只能靠平时的积累,看其他博主的文章爆出的漏洞或者平时自己挖出的进行积累,不同的版本更新后会修补上一版本的漏洞,也会出现新的漏洞,这也是为什么网络空间安全需要不停地学习不停地与时俱进。
百度后得知该版本的ThinkPHP存在漏洞:
?s=index/think\app/invokefunction&function=call_user_func_array&vars[0]=system&vars[1][]=
在其后添加相应的shell命令即可查询网站文件
ics-06
进入题目所描述位置后,用burpsuite爆破id的值,为啥会有这一步是我没想到的,爆出2333后将其输入url即可得到flag返回值