[ch4n3] Strcmp (Web)

2017. 3. 8. 23:46

Strcmp (Web)


Created by 해커지망생 | You can get 100point!


 



이 문제는 PHP 에서 strcmp 취약점을 이용한 인증 우회 기법을 이용한 문제다.


근데 아니... 저거 404 NOT FOUND뜸 ;; 일단 패스


문제오류가 수정되었다!


  1. No...
  2. <?php
  3. require_once("./flag.php");
  4. $password = mt_rand();
  5. $password2 = $_GET['password2'];
  6. if(@strcmp($password2, $password)==0){
  7. echo "Gooooooooooood! flag is ".$flag;
  8.  
  9. }
  10. else{
  11. echo "No...";
  12. }
  13. show_source("strcmp.php");
  14. ?>


이게 본 문제의 소스다. 들어가면 바로 저 소스가 보인다.


flag를 얻기 위해서는 password와 password2를 strcmp로 비교하여 같다면 flag를 출력하게 되어있고

아니라면 No...를 출력하게 되어있다.


일단 밑과 같이 동작한다.


http://respect.dothome.co.kr/strcmp.php?password2=123

=> No...



여기서 password 파라미터를 GET방식으로 얻는데 (POST로 얻어도 상관없다.)


strcmp 함수의 내용을 살펴보면 아래와 같다.



Description ¶

int strcmp ( string $str1 , string $str2 )


Return Values ¶

Returns < 0 if str1 is less than str2; > 0 if str1 is greater than str2, and 0 if they are equal.


strcmp($str1, $str2)에서 $str1이 $str2보다 작으면 음수, 반대로 더 크면 양수, 같으면 0이 반환된다.


문제에서 우리가 password의 값과 같은 값을 password2에 넣으면 0이 반환된다. 하지만 rand함수로.. 랜덤으로 나오겠지;;


그래서 password 값을 모르면서 저 값을 0으로 우회할 방법이 필요하다.


구글에 (Google : strcmp() expects parameter 2 to be string, array given in ) 검색하면 


PHP 버전 5.2, 5.3에서 strcmp에 대한 취약점을 찾을수 있다.


PHP 버전 5.2에서 strcmp(String, Array())을 실행하면 1 or -1을 반환한다. (5.2에서는 Array()를 "Array"라는 문자열로 변환하여 비교한다...)

PHP 버전 5.3에서는 strcmp(String, Array())을 실행하면 NULL 을 반환한다.


예제를 하나 들면


  1. <?php
  2.  
  3. $str1 = 'rand';
  4. $str2 = Array("test");
  5.  
  6. if (strcmp($a, $b) == 0)
  7. echo "good !";
  8. else
  9. echo "bad ....";
  10.  
  11. ?>
  12.  


이 코드를 실행하면 결과는 "good !"이 나온다.


이는 PHP 5.3 버전에서 strcmp 함수 인자값에 문자열이 들어오지 않을 경우 NULL을 반환하는 것에서


발생한 취약점으로 인해 if( NULL==0 ) 에서 NULL==0은 TRUE가 되어 if문이 실행되는것이다. 


여기서 우리는 미리 결과를 봤기 때문에 NULL == 0 의 결과가 TRUE라는 것을 알지만


그러면 결과적으로 NULL은 0 인 것인가 하면... 밑의 비교표를 보면 알 수 있다.



"==" 으로 느슨한 비교를 한 결과


"===" 으로 엄격한 비교를 한 결과


위 두 표를에서 나오듯 느슨한 비교를 할 시에는 NULL이 숫자 0과 같기 때문에 0 == NULL 이 TRUE를 반환하지만 

NULL이 0과 같은 타입이 아니기 때문에 0 === NULL 시에는 FALSE를 얻게 된다.



그러므로 위 취약점이 있는 PHP 버전에서 위 같은 취약점이 생기길 원하지 않을 경우 엄격한 비교인 ===을 사용하거나


비교대상이 Array가 아닌지 확인을 통해 취약점을 해결할수 있다. ( 참고로 PHP 5.5버전도 통한다... 어디까지 되는거여 ㄷㄷ)




어쨋든 .. 그러므로 다시 문제로 돌아와서


password2의 값에 array값을 넣어주면 답이 출력된다.


http://respect.dothome.co.kr/strcmp.php?password2[]


Gooooooooooood! flag is {are_y0u_kn0w_strcmp_bo9?} 

<?php
require_once("./flag.php");
$password mt_rand();
$password2 $_GET['password2'];
if(@
strcmp($password2$password)==0){
  echo 
"Gooooooooooood! flag is ".$flag;

}
else{
  echo 
"No...";
}
show_source("strcmp.php");
?>




flag is {are_y0u_kn0w_strcmp_bo9?}

'Write-up > Web' 카테고리의 다른 글

[ch4n3] 초보 개발자의 일기 (Web)  (0) 2017.03.08

Stegano_Dark (Steganography)


Created by HTJJing | You can get 100point!


Give me the lightark

dark.zip

 



으아... 정말로... 짜증나는 것이 뭐냐면


이미지 첨부가 안된다는 것이다!!




그래서 포기하고 구두로 설명 ㅠ;


일단 저 zip을 풀어보면 그냥 커먼색 dark.bmp가 나온다.


스테가노그래피 문제이고, bmp파일이므로 픽셀의 LSB를 이용한 문제일것으로 예상된다.

(그러므로 그전에 그림판으로 열어서 색채우기로 해보니까.. 조금 다른 부분이 있는것이 보인다.. 물론 답은 안보인다 ㅠ)


뭐... 스테가노그래피에 관해서는 나중에 더 자세히 쓰겠다.


일단 인터넷에 돌아다니는 stegsolve를 이용하여 문제를 풀었다.


gray bit으로 해서 보면 답이 보인다. 이미지 첨부가 불가하여 더이상 설명 불가 ㅠ


stegsolve : https://www.wechall.net/forum/show/thread/527/Stegsolve_1.3/page-1




FLAG IS {H1H1_H4H4_H0H0}





참고할 곳 : https://bpsecblog.wordpress.com/2016/08/21/amalmot_4/

'Write-up > Misc (+ Forensic, Stegano)' 카테고리의 다른 글

[anstromCTF 2017] USB Encryption  (0) 2017.04.26
[anstromCTF 2017] Document  (0) 2017.04.26
[anstromCTF 2017] IMAGE TRICKERY  (0) 2017.04.26
[ch4n3] 나잡아봐라~~ (Steganography)  (0) 2017.03.08
[ch4n3] Brute-Force (Misc)  (0) 2017.03.08

나잡아봐라~~ (Steganography)


Created by MushRooM | You can get 100point!



hahahahahahhahhahhahahah.zip


 


압축을 풀고 나면 hahahahah.jpg가 나온다.


binwalk를 통해 저 안에 hahahahah.....jpg 안에 PK 압출파일 헤더가 잇는걸 발견
HxD로 확인해본결과 word파일같음...

binwalk는 파일안에서 파일헤더 및 시그니처를 찾아준다;; 이미지를 못올려서 자세한건 생략

보통 리눅스에서 많이 쓰는데; 윈도우 버전도 존재하므로 그걸 썻다.


HxD : https://mh-nexus.de/en/downloads.php?product=HxD (한글버전도 존재한다!)
참고로 이 프로그램을 이용하면.. 파일의 헥스값을 볼 수 있다! 더 자세한건 생략하겠다. 귀찮어 ㅇㅇ

 
그래서 추출해서 마이크로소프트 워드로 열고싶엇으나 없어서

hwp로 열어서 확인하여 플래그를 확인할수 있었다.

Flag_{S0_funny_St3g0!}


... 아오.. 이미지첨부안되니까 힘들다;;




+ Recent posts