文件,Web服务器就调用php.exe去解释这个文件,然后再把解释的结果以网页的形式返回给客户机;而在模块化中,PHP是与Web服务器一起启动并运行的,所以从某种角度上来说,以apache模块方式安装的PHP4
在这里如果复现不成功,打开phpstudy->其它选项菜单->打开配置文件夹->httpd-conf ctrl+F查找 application/x-httpd-php 再后面添加.php3 php4 ",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1 ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm
_POST['submit'])) { if (file_exists($UPLOAD_ADDR)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml _POST['submit'])) { if (file_exists($UPLOAD_ADDR)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml ",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml
上传1.png直接抓包,修改后缀为php就可以绕过上传 得到路径/upload/1.php,连接菜刀,得到shell Pass-03(特殊可解析后缀绕过php4/phtml) $is_upload ; } } 查看源码,发现是设置了文件后缀名黑名单,禁止上传后缀名为.php文件,这里利用php2、php3、php4、php5、phps、phtml一样会解析,直接修改后缀名为phps上传。 复制图像地址 得到上传路径 常见扩展名绕过: asp:asa,cer,cdx aspx:ashx,asmx,ascx php:php2、php3、php4、php5、phps、phtml jsp ",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1" ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm
第四关 提示与源码 本pass禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2 ",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1" ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm 第六关 提示与源码 本pass禁止上传.php|.php5|.php4|.php3|.php2|php1|.html|.htm|.phtml|.pHp|.pHp5|.pHp4|.pHp3|.pHp2 ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm
$_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm 1.txt.php",".php5",".php4",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3
_POST['submit'])) { if (file_exists($UPLOAD_ADDR)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2","php1",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1",".Html ".php",".php5",".php4",".php3",".php2","php1",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3"
$_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1 ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm
php $a = 15521.42; $b = 15480.3; c = a- var_dump($c); //php4:float(41.120000000001) > 第一条输出语句:在PHP4下输出$c可能是41.120000000001,或类似的结果,后面的1就属于精度损失的部分。 第二条输出语句:在PHP4和PHP5中都会输出false。 声明一点:这不是PHP的问题,而是计算机内部处理浮点数的问题!在C/JAVA中也会遇到同样的问题。
",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1" ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm
$_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1 $_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm",".pHtml
2 php4-mod-vs-cgi 这个bechmark是在php4的环境下完成的。其summary.txt的内容如下。 ------------------------ PHP4 module, very simple script (phpinfo.php): requests/s plain 130.04 +turckcache 129.42 +turckcache+zend-optimizer 125.50 PHP4 module, very complex script (insurance application): requests/s plain 1.84 +turckcache 6.23 +turckcache+zend-optimizer 5.58 +optimizer 1.58 PHP4 CGI, phpinfo.php): requests/s plain 22.69 +turckcache n/a* +turckcache+zend-optimizer n/a* +optimizer 21.23 PHP4
$_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm
php 可解析列表 array( ".php",".php5",".php4",".php3",".php2","php1", ".html",".htm",".phtml",".pht ",".pHp",".pHp5",".pHp4",".pHp3", ".pHp2","pHp1",".Html",".Htm",".pHtml",".jsp",".jspa",".jspx", 白名单就是限制了只有带数组中的后缀的文件才能被上传到服务器,黑名单就是带有出现在数组中的后缀的文件都不能上传,一个典型的黑名单如下 (不全,php6,PHP 等都没有出现在黑名单中 :) array( ".php",".php5",".php4 ",".php3",".php2","php1", ".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3", ".pHp2
",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1" ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm
} } 逻辑大致是识别上传文件的类型 并查看是否是'.asp','.aspx','.php','.jsp'中的一个,否则不允许上传 bypass 尝试使用和php一样解析效果的后缀名,如php3、php4 $_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2",".php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".pHp1 $_POST['submit'])) { if (file_exists(UPLOAD_PATH)) { $deny_ext = array(".php",".php5",".php4 ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm
",".php3",".php2","php1",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2","pHp1" ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm ",".php3",".php2",".html",".htm",".phtml",".pht",".pHp",".pHp5",".pHp4",".pHp3",".pHp2",".Html",".Htm
(php4/phtml)") def vuln_check(uri): response = requests.get(uri) raw = response.text if ("No script files[]' : open(file_path)} data = { "allowedExtensions[0]" : "jpg", "allowedExtensions[1]" : "php4
true 其他差异 1. php中算 false 的情况 1、 boolean:false 2、 整形:0 3、浮点型:0 4、字符串:"" "0"(其他都对) 5、空数组 6、空对象为真(只在php4 算false,其他版本都算true) 7、null和尚未定义的变量 8、所有资源都算对,除php4,所有对象也算对 2. js中算 false 的情况 1、 Boolean: true 真 false
复制代码 $user = new stdClass(); $user->name = 'gouki'; $myUser = $user; $myUser->name = 'flypig'; 如果在PHP4 所以,在PHP4的时候,都是这样使用: 复制代码 $myUser = & $user; 有人说,为什么不用数组呢?数组不是更方便吗?而且对于PHP这样的弱类型程序来说,用数组应该是最方便的。 确实。