반응형

HackCTF 문제 풀이 / Web - Home (200)

 

https://ctf.j0n9hyun.xyz/challenges#Home

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

 

Web - Home(200) 문제를 풀어보도록 하겠습니다. 

우선 아래 링크에 접속합니다.

http://ctf.j0n9hyun.xyz:2034/

접속해 보면 아래와 같이 출력됩니다. 

해결하기 위한 단서는 머리말을 생각해보는 것뿐이라고 합니다.

 

HTTP Header와 관련이 되어 있는데, X-Forwarded-For이라는 Header가 있습니다.

프록시를 사용할 때, 기존의 IP를 입력하는 Header인데, HTTP Server에 요청한 Client의 IP를 식별하기 위한 표준으로 사용됩니다. 

Burp Suite Tool을 이용하여, 이 XFF를 Header 부분에 추가하여,  루프백(127.0.0.1)을 입력하고, Forward하였습니다. 

그랬더니, 아래와 같이 Flag가 출력되는 것을 볼 수 있습니다.

반응형
반응형

HackCTF 문제 풀이 / Web - Input Check (150)

https://ctf.j0n9hyun.xyz/challenges#Input%20Check

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

Input Check (150) 문제를 풀어 보도록 하겠습니다. 

우선 아래 링크에 들어갑니다.

http://ctf.j0n9hyun.xyz:2033/

아래와 같이 입력란이 있고, OK 버튼이 있습니다. 

flag를 입력해보겠습니다. 

text 변수에 flag가 들어가지만, No Hack~ 이라고 출력됩니다. 

개발자 코드(F12)로 코드를 보겠습니다. 

Hint가 있고, 입력 명령어 check는 배열 타입이라고 합니다. 

입력을 배열로 해보겠습니다. 

배열에 flag를 넣어 보았는데, Flag가 출력되는 것을 볼 수 있습니다.

 

PHP 5.2 이하의 버전의 strcmp 취약점입니다. 

ctrcmp에서 array 값을 넣으면 array를 문자열로 인식하여 1 or -1로 반환된다고 합니다.

반응형
반응형

HackCTF 문제 풀이 / Web - Time (150)


https://ctf.j0n9hyun.xyz/challenges#Time

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

 

Web - Time(150) 문제를 풀어보도록 하겠습니다. 

우선 아래 링크에 접속해 보겠습니다.

http://ctf.j0n9hyun.xyz:2032/

접속해 보면 아래와 같은 php 코드가 출력됩니다. 

아래 코드를 분석해 보겠습니다. 

먼저, time이라는 변수를 가져와, is_numeric() 함수를 통해 이 변수의 값이 숫자인지 검사합니다. 

 

그리고 그 숫자가 60 * 60 * 24 * 30 * 2 의 숫자보다 크거나 같고, 

60 * 60 * 24 * 30 * 3의 숫자보다 작거나 같은 숫자가 입력되어야 마지막 else문으로 진입할 수 있습니다. 

하지만, else 문으로 들어가면, 그 변수의 값으로 sleep() 함수를 호출하고, flag를 출력하는데, 

그 변수의 값이 2달, 3달에 대한 초가 입력이 되기 때문에, 2달, 3달은 기다려야 flag 값을 가져올 수 있습니다.

 

이때, php의 취약점을 이용하여 문제를 해결할 수 있습니다. 

60 * 60 * 24 * 30 * 2 = 5184000 입니다. 

지수형으로 표현해보면 5.18400e6 입니다. 

php에서는 5.18400e6를 (int) 형으로 형변환 할때, 소수점 이하는 잘라버리기 때문에 5가 됩니다. 

그러면 결국에는 sleep(5)가 되어 5초 이후에 flag를 확인할 수 있습니다.

반응형
반응형

HackCTF 문제 풀이 / Web - 마법봉 (100)

 

https://ctf.j0n9hyun.xyz/challenges#%EB%A7%88%EB%B2%95%EB%B4%89

 

HackCTF

Do you wanna be a God? If so, Challenge!

ctf.j0n9hyun.xyz

마법봉 - 100 문제를 풀어보겠습니다.

우선 아래 링크에 접속해보겠습니다.

http://ctf.j0n9hyun.xyz:2029/

접속해보면 아래와 같이 출력됩니다. 

View Source 버튼을 눌러서 소스코드를 확인해보겠습니다.

url의 전달인자 flag를 input에 넣고, input을 SHA1으로 암호화한 값이 md5로 240610708을 암호화한 해시값과 같으면 플래그가 출력된다고 합니다. 

240610708을 md5로 암호화한 값을 아래와 같이 0e462097431906509019562988736854 로 결과를 출력합니다.

Magic Hash는 PHP에서 ==를 통해 비교시 생기는 type conversion에 의한 취약점입니다. 

0e로 시작되고 뒤에 있는 값들이 모두 숫자라면, string 형태이지만, 비교 연산시에는 float로 Type Casting 되기 때문에 문제가 발생합니다.

비교하는 대상도 0e로 시작되는 값이라면, 두 값이 모두 exponent로 바뀌어 0이라는 값을 갖게 되므로 연산이 참이 됩니다. 

 

따라서 SHA1 으로 되는 값이 0e로 시작되면 되기 때문에 아래 사이트에 있는 10932435112 숫자 문자열을 이용하면 됩니다. 

https://www.whitehatsec.com/blog/magic-hashes/

 

Magic Hashes | NTT Application Security

For more than the last decade, PHP programmers have been wrestling with the equals-equals (==) operator.

www.whitehatsec.com

10932435112를 입력하여 제출해보겠습니다.

그러면 아래와 같이 Flag를 확인할 수 있습니다.

반응형

+ Recent posts