Wargame.kr

Web_700

php? c?



힌트로 주어진 것은 integer type에 대해 알고 있냐는 것과 32bit 어플리케이션이라는 것입니다.

문제를 확인해보도록 하죠.



접속하면 D1과 D2를 입력 할 수 있는 텍스트박스와 try버튼이 있습니다.

get source를 눌러 소스를 보도록 하죠.



D1과 D2의 값을 POST로 받네요. 각각 input1, input2 변수에 저장을 합니다.

그리고 /tmp/p7을 실행시키는데, POST로 입력받은 d1의 값을 argv로 받습니다.

만약 실행시킨 결과 값이 1이 아니면서 result의 값과 d2에서 입력받는 값이 같을 경우 flag를 뱉는 구조네요.

p7.c도 한번 확인해보도록 합시다.



간단한 코드입니다.

argv[1]을 int형으로 바꿔준 후, 0보다 작을 경우 1을 출력시키는 nono() 함수로 분기하고, i를 5 증가시킨 후 i가 4보다 클 경우 1 출력, 5보다 작을 경우 i의 값을 출력시켜주는 코드입니다.

간단한 코드이지만 약간 말이 안되는 부분이 있죠. i가 0보다 작아서도 안되고 4보다 커서도 안된다. 하지만 i는 중간에 5가 증가되기 때문에 이 조건에 부합시키는 수는 있을수가 없죠.

하지만 32비트 어플리케이션에서는 int형이 4바이트 제한이기 때문에 값의 범위가 -2147483648 ~ 2147483647 까지입니다.

따라서 2147483643 이상의 값을 입력 받을 경우 값이 0 또는 -로 출력이 될 것입니다.

p7.c를 그대로 긁어와 컴파일 하여 실행시켜보았습니다.



우리의 예상대로 - 값이 출력이 되었습니다.

이를 그대로 POST로 날려줍시다.

날려줄때, 문제 페이지에서는 D1의 maxlength가 9로 제한이 되어있으니, 개발자 도구 또는 프록시 툴을 이용하여 제한을 풀던지, 값을 날려주던지 합시다.

저는 burp suite를 이용해 파라미터를 날려주었습니다.



짠! flag를 깔끔하게 뱉어줍니다.

이 문제는 700점이라고 하기에는 조금 쉬운 감이 없지 않아 있네요..

'Wargame > Wargame.kr' 카테고리의 다른 글

[Wargame.kr] Web_800_jff3_magic  (0) 2016.05.30
[Wargame.kr] Web_800_QnA  (0) 2016.05.27
[Wargame.kr] Web_700_ip log table  (0) 2016.05.27
[Wargame.kr] Web_700_lonely guys  (0) 2016.05.26
[Wargame.kr] Web_700_dmbs335  (0) 2016.05.26

+ Recent posts