Wargame/HackCTF
[HackCTF] Login 풀이 (100p)
문제 종류 - Web 사용한 툴 - 풀이 로그인 창이 주어진다. View Source를 눌러 코드를 확인하자. id 값과 pw 값은 모두 GET 방식으로 입력된다. 그 후, pw 값은 sha256으로 암호화 시켜 다시 저장된다. 이제 session[id]와 result[id]가 같으면 해결되는 문제이다. 근데 우리는 pw값이 sha256으로 바뀌기 때문에 몇번을 시도해도 맞출 수 없다. 그래서 #을 이용해 다음 Query문을 이렇게 바꿔주자. select * from jhyeonuser where binary id='admin'#' and pw='$pw'
[HackCTF] Time 풀이 (150p)
문제 종류 - Web 사용한 툴 - 풀이 조건은 5,184,000 < time < 7,776,000이다. 의외로 time 값은 맞추기가 쉽다. 근데 여기서 제일 중요한 문제는 else문에 있다. sleep(time)만큼 쉬기 때문에, 6,000,000을 입력하면 6,000,000초를 쉬고 flag를 출력한다.. 여기서 우리는 sleep 함수 내부에서 int 형변환과 is_numeric 함수에 주목해야 한다. is_numeric은 지수표현식인 e가 들어간 식도 숫자로 인식한다. 6e6은 6,000,000과 같지만 sleep 함수에서 int로 형변환할 시, 소수점은 버려지기 때문에 6만 남게 된다. 이제 대충 정답을 눈치챘을 거라 생각한다.
[HackCTF] Read File 풀이 (100p)
문제 종류 - Web 사용한 툴 - 풀이 flag.php에 Flag가 있단다. 접속해보자. 접근이 거부되었다고 뜬다. 이번엔 ?command=flag.php를 입력해봤다. 역시 아무 반응도 보이지 않는다. 수많은 시도 끝에 flag라는 단어를 filtering 한다고 추측했다. 아주 쉽게 ?command=flag.php 에서 ?command=flflagag.php로 우회해줬다.
[HackCTF] Home 풀이 (200p)
문제 종류 - Web 사용한 툴 - Burp Suite 풀이 개발자 도구를 이용해 코드를 확인하자. -> 아무 문제가 없는 코드였다. 왠지 내 IP가 아니라 Server IP가 입력되면 해결될 듯한데... 많은 시간 동안 Client IP를 변경할 수 있는 방법을 찾아봤다. 찾아보니 X-Forwarded-For라는 헤더가 프록시에서 Client-IP를 확인하는 방법이라고 적혀있었다. 그런데, 아무리 찾아봐도 X-Forwarded-For이라는 헤더는 존재하지 않았다. 그래서 그냥 임의로 X-Forwarded-For: 14.46.30.205로 값을 넣고 Forward 해봤는데.. 값은 성공적으로 바뀌었으나, 인증되지 않은 IP 주소란다.. 그러다가 문득, 문제의 제목이 Home이라는 사실을 알고, loopb..
[HackCTF] Input Check 풀이 (150p)
문제 종류 - Web 사용한 툴 - 풀이 flag를 입력해보자. ... 자기들이 입력하라고 했으면서.. 그냥 flag는 필터링이 되는 듯하다. 저번 문제와 마찬가지로 flflagag를 입력해봤는데.. 똑같이 실행이 안된다. 아마 string에 flag란 문자열이 있으면 그냥 오답처리 하는 거 같다. 이제 대충 정보를 얻었으니, Query문을 조작해보겠다. ?text=flag가 아닌 ?text[]=flag를 입력해보자. 여기서 왜 text가 아닌 text[]을 사용하는지는 직접 찾아보길 바란다. 간단히 말하자면 어떤 함수의 취약점을 이용한 Injection 방식이다.
[HackCTF] 마법봉 풀이 (100p)
문제 종류 - Web 사용한 툴 - 풀이 View Source를 눌러 코드를 확인하자. md5(240610708)과 sha1(input) 값이 같으면 풀리는 문제다. 근데 240610708을 보면 정말 정말 누가봐도 Magic Hash 인걸? 모르는 분들을 위해 Magic Hash에 대해 설명하겠다. PHP에서 ==을 이용해 값을 검사하면 취약점이 발생한다. 지수 표현식에서 앞 숫자를 0으로 하면 다음과 같이 표현이 가능하다. 0e1111 = $0\times10^{1111}$ 0e1234 = $0\times10^{1234}$ 즉, 앞이 0e면 모든 수식의 값은 0이된다. 이를 이용하면 문제를 해결할 수 있다. 그럼 이제, sha1에 magic hash를 찾아서 flag값에 넣어버리자.
[HackCTF] Guess me 풀이 (100p)
문제 종류 - Web 사용한 툴 - 풀이 guess 값과 filename의 내용이 같으면 Flag를 출력하는 문제이다. 우리가 서버 내부를 들여다 볼 수 있는 것도 아니고, 파일의 내용을 추측하는 것은 불가능하다. 하지만 filename의 값이 조작이 가능하다면 어떨까? extract 함수는 값을 덮어씌워 조작이 가능한 함수이다. filename이 없고, guess 또한 아무 내용도 존재하지 않는다면 secretcode=guess가 성립할 것이다. Query를 다음과 같이 전송해보자. ?filename=&guess=
[HackCTF] 보물 풀이 (100p)
문제 종류 - Web 사용한 툴 - 풀이 버튼을 누르면 GET 방식의 ?page=숫자 형태로 쿼리문이 형성된다. 무슨 숫자에 Flag가 있는지 모르니까 그냥 Bruteforce했다.