• 设为首页
  • 点击收藏
  • 手机APP
    手机扫一扫下载
    华域联盟APP
  • 关注官方公众号
    微信扫一扫关注
    华域联盟公众号
hot天融信关于ThinkPHP5.1框架分离RCE漏洞的深

[/backcolor] 0x00 前言在前几个月,Thinkphp连续迸发了多个严重漏洞。由于框架应用的普遍性,漏洞影响十分 详情

用于测试php函数的代码

[复制链接]
sterben 发表于 2016-10-13 20:43:38 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册 新浪微博登陆

x
今天忽然想到的,就写了一段测试php函数的代码。
, {* d1 }: N2 @( `9 u% C2 Z7 H+ q0 D  P3 [

<?php

/**/ j; G" H, {& z6 u4 ^
* 参数数组$ParamList阐明
* j# c# k( y9 U5 H *
' p0 q" c& G/ e0 ] * 数组的第一维索引是需求测试的函数的参数名,第二维的每个元素是该参数需求测试的可能值,元素值能够为数组。- H! t) @2 T) b, X( H: O
*/

$ParamList = array("Param1" => array(3,4,3,2,1),
- ^# w7 R" n8 Q4 [9 |                   "Param2" => array(3,2,5),
5 M0 i% {4 m7 Z. D: V" q$ i                   "Param3" => array(0,0.5,1,1.5));

// 测试函数  @& ]$ S2 g. |) q4 y
sysTestFunction("Test", $ParamList);


0 l4 m. b9 h, {4 j* S  ~& |3 n// 待测试的函数
$ f! E4 i) q. L) r6 D. dfunction Test($Param1, $Param2, $Param3)9 O2 M) J# N* A
{) @; I  Q! ~( S1 S
    return $Param1 . "|" . $Param2 . "|" . $Param3;! b" X5 P  Q& o% z
}

- t  P6 |# Y  H
/**# Y! O6 Z  Q1 O1 {7 a
* 自动测试
8 ?. i/ [# |1 K9 A! X *
2 X8 a" p. r0 E" B * @author         李玉鹏<leeyupeng@163.com>% r# T6 B4 f3 ~$ i
* @param  string  $FunctionName  函数称号
/ O. e* d- z. C8 i3 B* U" m" Q& G * @param  array   $ParamList     参数列表
) e5 T% B! @- g' F# i% k1 `! U- i * @return array/ o% n. B: Q. A2 Y
*/
2 {% {6 z; L* r) w- M+ |function sysTestFunction($FunctionName, $ParamList)
8 d8 `4 i6 o' Y( |$ N6 z, g! s{
* }" a5 z. \) o. I9 |7 u    if(empty($FunctionName))
, t& F. Z6 G  K2 _    {' R( z- I1 _. ?! z
        echo "函数名不能为空";
. H- }6 ~* A  g. H        return false;
. F3 K: T) `: U3 r) q( d/ ?4 ^    }

    if(!is_array(current($ParamList)))
0 y0 t/ t' M4 N; T    {9 y9 l/ _' W) n5 F! A7 Z
        echo "参数不是2维数组";
3 c+ w7 q) ?2 L9 P9 A! N        return false;
  b) @6 ?3 M' d, G    }

    $TestParamList = sysCombineArray($ParamList);

    echo "开端测试函数" . $FunctionName . "<br />";
9 X8 f& t6 n2 J  k0 M) @$ X/ e    foreach($TestParamList as $Key => $TestParamInfo), x. t4 v( Z/ p5 Y
    {
0 i  d4 I0 g4 B4 d6 w        echo "开端测试第" . $Key . "组参数:<br />";

        foreach($TestParamInfo as $ParamKey => $Param)
; t: `6 Y  y+ U* c) X        {# {8 M6 {0 _3 @  |( i! D# J5 Q$ ~) v
            ${"Param" . $ParamKey} = $Param;
* p( t/ m: M+ ~+ {* }5 V% J            $TempParamList[] = "$Param" . $ParamKey;
# E. W% ?6 t4 |- \, h0 G8 Z            if(is_array($Param))
' T8 r0 L1 u# e' x            {' t  T: r3 t1 X8 ]
                echo "参数" . $ParamKey . ",类型为数组:";. u9 a4 l, ?4 w3 p6 O3 p/ l
                echo "<pre>";
4 H9 }4 N" R$ T                print_r($Param);0 W; |1 G; N8 _2 [1 r3 O9 F9 U- e4 D
            }
3 s9 x2 F+ G9 j, C8 }" f* C; G            elseif(is_bool($Param))4 r8 |( w7 P+ K. I0 i
            {, F7 i! C5 k+ s5 e; \
                echo "参数" . $ParamKey . ",类型为boll:";
7 G9 z! p; [! e1 }$ Y                if($Param)1 q4 t7 K: ~1 y+ V/ W
                {  B. l$ A# }8 G4 \
                    echo "true";
8 r2 s7 _! }+ C- c2 O                }3 A% `* K% Z4 Y$ O3 Q( [* Q! z, ~
                else
7 [" ?" g" f7 O! d/ u# [# O                {; G/ {' ]) h( i+ n1 \* v  G9 w
                    echo "false";
" \6 C8 _2 a# Z$ N                }
7 h5 j" W9 d8 R( ]$ K! U/ c            }/ `9 @$ p8 z8 _, {7 |
            else
& q6 V5 I" `, z- ~            {8 M* B# Q& R5 D* g
                echo "参数" . $ParamKey . ",类型为字符串或数字:";- B5 c, N9 I  q& q6 S  Y
                echo $Param;
/ S/ T. ?. }( I! l2 W            }! w! n+ e( T# F2 w# z
            echo "<br />";
, i* h6 U; j( J* i$ |. R        }

        $Params = join(", ", $TempParamList);
9 T# ~# ]$ x/ m        unset($TempParamList);

        eval("$TestReturnResult = " . $FunctionName . "(" . $Params . ");");
) g% t, ]) A+ _2 W        if(is_array($TestReturnResult))
+ i5 s# w+ ~# m  |- m& Y        {
7 m3 v* R0 ^: k7 I            echo "函数返回数组:<pre>";
/ s0 z. \% z/ s) L* h: A            print_r($TestReturnResult);9 l! x( d9 C" e6 D
        }$ R8 T' x6 a; |1 \
        elseif(is_bool($TestReturnResult))
+ S4 a7 v; D9 j5 O  D# R! S( V        {
  I8 {, z% H- s) @4 ~7 i) |            if($TestReturnResult)* E8 k; V. M( W' p5 @6 N1 o+ z
            {
# J6 J5 P9 \3 |' M9 N5 T/ V$ Z                echo "函数返回true";
* Y- S9 t9 w5 y0 f% M1 q; [& Z            }6 L" H; m, O/ X4 k# j
            else
# A3 Y0 M/ {# G            {; l- Q! e. Y. [- I2 K8 p5 Q9 _
                echo "函数返回false";; B5 v. {* I1 ]# \- ?
            }
' H/ _) N5 g5 I& x3 n" r        }; d2 O) j2 ~7 t# B* n1 f
        else
- X' g% `) ~- M2 q3 H        {7 [& |8 J8 f3 s: O8 @$ F
            echo "函数返回数字或字符串:" . $TestReturnResult;$ `3 l+ U" s, e2 B( m+ Z
        }
; @3 n. a7 Q0 [" o( I3 D        echo "<br /><br />";# f1 u1 V" x8 k, q! x
    }+ n9 e' n7 z) I' O
}

/**! Q* a( h: [0 A0 j% g3 P; d( B
* 计算组合的函数8 I( S2 i' T" X6 g, e
*% I2 t. p# ]9 m" V: \2 L
* @author                   李玉鹏<leeyupeng@163.com>' }+ H8 h2 M7 O2 O7 A3 d
* @param  array $CombinList 待排列组合的2维数组: w9 W  ~+ e3 {* ~3 S7 Y9 p1 R% H- P
* @return array             组合后的数组
4 f: R7 D$ i2 i# k1 E1 k& R */
, t4 `$ j! e9 S2 _3 O9 e  [function sysCombineArray($CombinList), G" Q. C) o7 b4 m# ^2 v
{6 W0 A- s6 b, H9 E" C, K& K
    if(!is_array(current($CombinList)))# Q, Y, ~6 A1 h1 q6 p  q
    {
, d1 l, L1 k* n8 V( e        echo "参数不是2维数组";7 Q. r# X! V3 e! C
        return false;
, q# l1 n0 E$ ?" N* L    }

    /* 计算C(a,1) * C(b, 1) * ... * C(n, 1)的值 */0 [( q: [/ G* D. t9 K
    $CombineCount = 1;6 ?6 o: m, @  c; j
    foreach($CombinList as $Key => $Value)
/ y; f3 M4 K/ @8 S; Q: e" o' I    {# L( {+ G' V  b, ]+ E! f( r
        $CombineCount *= count($Value);9 b+ I$ X) m. m$ j
    }

    $RepeatTime = $CombineCount;
/ G9 S  ~2 p7 n  J) O/ z    foreach($CombinList as $ClassNo => $ParamList)6 t+ r- F7 ]7 J4 y6 Y) \9 W
    {4 c5 L4 F* R8 Y8 t# ]# [2 n
        // $ParamList中的元素在拆分红组合后纵向呈现的最大重复次数# |- M5 a/ v0 l9 t5 p
        $RepeatTime = $RepeatTime / count($ParamList);

        $StartPosition = 1;

        foreach($ParamList as $Param)
$ B0 E" C& [! t$ d+ g. ]3 v4 P+ c        {6 L1 W" s: p7 z, Y7 g
            $TempStartPosition = $StartPosition;

            $SpaceCount = $CombineCount / count($ParamList) / $RepeatTime;

            for($J = 1; $J <= $SpaceCount; $J ++). G! ^2 r; v- F6 ?7 R, j* K
            {* d: F, z8 ?, ^
                for($I = 0; $I < $RepeatTime; $I ++)
, p( T( s- h" ~( |/ h. Q8 `                {
9 m6 o/ [5 G$ y/ ]  n, j8 ?3 x                   $Result[$TempStartPosition + $I][$ClassNo] = $Param;* Y6 L: T$ }7 D, U" H
                }
- T& A' D0 a- g' K9 I. v                $TempStartPosition += $RepeatTime * count($ParamList);
* x6 ^5 ~7 T/ X' u            }
9 s4 }9 P, ^& Q1 P            $StartPosition += $RepeatTime;
* J2 Z- `6 z- s( u. z        }/ v$ Z, h5 e8 f, J6 i
    }

    return $Result;
  C: W+ T5 C5 F* z8 l% m& I5 W}
3 t7 ^  ?  a8 d) c?>

4 Z8 T2 h; b4 g( s! w1 q
You look down on me today, tomorrow I can't let you have been

精彩评论1

arskg 发表于 2016-11-20 02:20:56 | 显示全部楼层
回帖是必需的,这个能够有!: x- T" L% w7 k9 y
; V/ \% i9 P5 r7 X3 S

8 w5 }0 K% r5 w. L1 v) o2 ?0 @( D* ^* I  Q8 g
. [6 I& C* j2 ~- H8 F  Q

) _5 H4 P+ c. T1 D: h* W* ~+ `1 Q; n& _
2 z7 ^6 Z1 _; d# N

* Q$ [+ |0 m  K8 g# c1 U3 X0 Y$ a' b2 O$ H+ s" o4 F8 M$ ]
' f) {) B" H, p
& W* v0 i3 [; g/ i  C
php?mod=logging&action=login'+'&referer='+encodeURIComponent(location))" src="static/image/common/sigline.gif" border="0" alt="" />- x$ j2 z' T% Q& z
                               
php?mod=logging&action=login" onclick="showWindow('login', this.href+'&referer='+encodeURIComponent(location));">登录/注册后可看大图
7 H4 U5 t8 c8 R1 {
美规12V9A开关电源适配器

关注0

粉丝6

帖子3328

发布主题
阅读排行 更多
广告位

扫描微信二维码

关注华域联盟公众号

随时了解更新最新资讯

admin@cnhackhy.com

在线客服(服务时间 9:00~18:00)

在线QQ客服

Powered by cnhackhy! © 2015-2019