본문 바로가기

웹해킹/wargame.kr

strcmp

strcmp 문제를 눌러보면

다음과 같이 나온다.

문제를 해석해보면

"너가 'strcmp'함수를 우회할 수 있다면 너는 flag를 얻을 수 있을것이다."

이 소리이다.

일단 먼 소리인지는 모르겠지만 start를 눌러보자

start를 누르면

다음과 같이 password를 입력하는 창이 나온다.

일단 밑에 view-source를 눌러보자

다음과 같은 코드가 나온다.

코드를 대충 해석해보면

$password = sha1(md5(rand().file_get_contents("/var/lib/dummy_file")).rand());
-> password 값은 랜덤함수를 돌릴 것이다.
if (strcmp($_POST['password'], $password) == 0)
-> 내가 입력한 패스워드 값과 random 함수 돌린 password 값이 일치하게 된다면
 echo "Congratulations! Flag is <b>" . auth_code("strcmp") ."</b>";
 exit();
 -> flag를 넘겨줘라

대략 이런 소리이다.

일단 랜덤함수를 돌린 비밀번호를 맞추는 것은 무척이나 어려울 것이다.

문제에 보면 strcmp 함수를 bypass하라 했으니 strcmp 함수에 대해 알아야 할 것 같다.

구글에 'strcmp 우회'라고 쳐보니

php에서 strcmp 우회 방식이 입력 받을 값을 배열화 시키면 된다고 하였다.

이게 무슨말이냐 하면 

strcmp 사용할 값을 배열화 하게 되면 배열과 문자 값을 비교하였을시 NULL을 반환한다고 한다.

즉 0을 반환한다는 소리인데

strcmp에서 두 문자열이 같을 경우 0을 반환하는 것을 이용한 공격이라고 생각하면 된다.

이제 코드를 들어가보면(F12 누르기)

이 password 변수를 배열화 하면 된다.

이렇게 바꾸면 된다는 것이다.

이렇게 바꾸게 되면 무슨 값을 넣어도 NULL 값을 return 할것이기 때문에 flag가 출력 될 것이다.

이렇게 수정하고 값을 아무거나 집어 넣어보겠다.

password에 123을 집어넣고 chk를 누르면

다음과 같이 flag 값이 나온다.

이제 이 flag 값을 문제에 집어 넣으면

문제가 풀려 있다.

'웹해킹 > wargame.kr' 카테고리의 다른 글

tmitter  (0) 2019.08.12
md5 compare  (0) 2019.08.12
strcmp  (0) 2019.08.12
WTF-CODE  (0) 2019.08.12
DB is really good  (0) 2019.08.12
md5 password  (0) 2019.08.12