Webhacking.kr old 10번 문제 풀이 처음에 페이지에 들어가면 위와 같이 뜬다. 코드를 보자! 0라는 문자에 커서를 올리면 y0u로 변한다는 걸 알 수 있다. 그리고 onClick 함수를 보면 클릭을 할 때마다 1칸씩 움직인다. 이때 1600번을 움직이면 문제가 풀리게 된다. 코드 부분에서 1을 1600으로 변경해주었다. 그러니까 문제가 풀리지 않았다. 아무래도 처음 상태가 1인 것 같다. 1599로 변경해주자! 문제가 풀렸다! 간만에 쉽게 풀린 문제인 것 같다~! Wargame/Webhacking.kr 2021.05.26
dreamhack rev-basic-4 문제 ; 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 알아내세요. 언제나 그랬듯 correct가 출력되니까 correct 문자열을 찾아서 해당 주소로 가보자! 해당 주소로 가보면 바로 위에 je, 그 위에 test, 그 위에 call이 있음을 알 수 있다. 아무래도 call의 결과에 따라서 correct와 wrong이 정해지는 것으로 보인다. 00007FF7234E117E 주소에 BP를 걸어둔 후 실행해보자. 함수 코드는 위와 같고 정리하면 아래와 같다. 첫 번째 입력값 = 0x31(1) 이라고 해보자. 1. eax에 첫 번째 입력 값을 넣고 오른쪽으로.. Wargame/dreamhack 2021.05.26
Webhacking.kr old 46번 문제 풀이 view-source를 눌러서 코드를 보자! id에 있는 값이 admin이면 문제가 풀린다. 그런데 우리가 입력하는 값은 where 절에만 들어갈 수 있다. 이때 공백을 치환하니까 ||로 or을 입력하자. 이렇게 입력을 해주었더니 아무런 값도 출력되지 않았고, 문제도 풀리지 않았다. 여러 값을 입력해본 결과 admin이 안 되는 것 같다. preg_match에 해당되는 값을 보면 hex 값을 거르는 것을 볼 수 있다. 그럼 ascii 코드를 사용하여 admin을 입력하자! ascii 코드를 사용하여 입력을 하였더니 위와 같은 메시지가 출력된다. 위의 메시지는 lv=1을 입력했을 때 나오는 메시지이다. 아무래도 lv에 없는 값을 넣어주어야 할 것 같다. lv이 0일 때 아무런 값도 출력되지 않는다. 그럼 .. Wargame/Webhacking.kr 2021.05.25
CodeEngn Advanced RCE L05 문제 Serial 을 구하시오 Ollydbg로 열어보았다! 항상 그랬듯 문자열을 찾아보자! 문자열에서는 별다른 내용을 찾아볼 수가 없었다! PEiD에 05.exe 파일을 넣어보니, Visual Basic으로 작성된 것을 알 수 있었다. 그럼 Visual Basic에서 사용되는 문자열 비교 함수가 사용되었을 수 있다! 오른쪽 마우스 - Search for - Found intermodular calls 를 통해 사용된 함수를 뽑아보았다. 그랬더니 vbaStrCmp가 있음을 볼 수 있었다. 해당 주소에 BP를 걸어둔 후 실행을 해보자! 그랬더니 EAX에는 입력값을 ECX에는 serial 값이 들어가는 것을 볼 수 있다! 677345를 입력창에 입력해주었더니 실패 구문인 Mal Cracker!!가 아닌 아래의.. Wargame/CodeEngn 2021.05.24
CodeEngn Basic RCE L18 문제 Name이 CodeEngn일때 Serial은 무엇인가 성공 구문을 찾아보자~!~! 성공 구문을 찾을 수 있었다! 해당 위치에 가서 cmp나 분기점을 찾아보자~! 명령어를 보면 004011F6에서 ZF 1이면 성공구문을 출력하는 곳으로 JMP를 하는 것을 볼 수 있다. 그 위에 CALL 명령어를 보면 lstrcmp(비교 함수)를 호출하는 것을 볼 수 있다. String2와 String1에 각각 어떤 값이 들어가는지 보자. String1에는 내가 입력한 값이, String2에는 Name에 따른 Serial 값이 출력된다. 06162370056B6AC0를 입력하였더니 문제가 풀렸다! Wargame/CodeEngn 2021.05.20
CodeEngn Basic RCE L17 문제 Key 값이 BEDA-2F56-BC4F4368-8A71-870B 일때 Name은 무엇인가 힌트 : Name은 한자리인데.. 알파벳일수도 있고 숫자일수도 있고.. 정답인증은 Name의 MD5 해쉬값(대문자) 언제나 그랬듯 . . ~ 성공 구문을 찾아보자! Good Boy 부분이 성공 구문인 것 같다. 해당 위치로 이동해보자. 성공 구문 위에 CALL과 JNZ가 있는 것을 알 수 있다. CALL을 통해서 부르는 함수가 CMP임을 추측해볼 수 있고, 그 결과에 따라 Good Boy가 출력되거나 아니면 sleep이 된다. CALL 명령어에 BP를 걸어두고 실행해보자. Name 값은 1, Key 값은 문제에 기재된 값을 넣었다. 그랬더니 Pleas Enter More Chars라는 문자열이 뜬다. 'Plea.. Wargame/CodeEngn 2021.05.19
dreamhack rev-basic-3 문제 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요! 성공 구문을 찾아보자! Correct가 있음을 볼 수 있다. 해당 위치로 가서 분기점을 찾아보자. 성공과 실패를 가르는 분기점이 위의 선택된 주소에 나타난 것을 볼 수 있다. eax 값이 0일 경우에, wrong으로 가게 된다. eax 값은 test 명령어 위의 call 명령어로 불러지는 함수에서 정해질 테니 00007FF7458D116E에 BP를 걸어두고 실행해보자. 함수에 들어가면 위와 같은 명령어들이 보인다. (1) rcx에 00007FF7458D3000 dump 주소값을 넣는다. (2).. Wargame/dreamhack 2021.05.19
Webhacking.kr old 43번 문제 풀이 43번 문제를 클릭하면 위와 같은 화면이 뜬다. 아무것도 선택하지 않고 제출을 누르면 'type not detected'라는 문자가 뜬다. flag.docx 파일을 올려보자. 'Done!'이라는 메시지와 함께 파일이 올려진 경로가 뜬다! 경로에 접근해보자. 경로에는 권한이 없어서 접근을 못한다. 파일은 접근이 가능하니 cat /flag를 수행하는 php 파일을 올려보자! php 파일을 올렸더니 wrong type이라고 뜬다. 아까 docx 파일의 경우에는 무사히 올라갔으니, burp suite로 docx file type으로 변경한 후 올려보자! docx의 경우 Content-Type 값이 application/vnd.openxmlformats-officedocument.wordprocessingml.d.. Wargame/Webhacking.kr 2021.05.19
Webhacking.kr old 41번 문제 풀이 41번 문제를 클릭하면 위와 같은 화면이 나온다. view-source로 소스 코드를 보자. 파일이 업로드 되면서, flag 값이 업로드 된 파일에 써지는 것으로 보인다. 우리는 그럼 파일이 업로드 되는 경로를 알아내야 한다. 파일을 선택하지 않고 upload를 눌러보았다. 그랬더니 /var/www/html/challenge/web-19/index.php에 있는 21번째 줄에서 filename이 비어 있다는 에러 메시지를 출력했다. 이때 이 에러 메시지에서는 우리가 경로가 무엇인지 알 방법이 없다. 다른 에러 메시지를 출력하여, 경로를 찾아내야 한다. 보통 큰 파일의 경우, 업로드가 되지 않는 경우도 존재하니 kali-linux 가상머신 파일을 업로드 해보았다. 이 정도 파일 가지고는 안 되는 것 같다... Wargame/Webhacking.kr 2021.05.18
CodeEngn Basic RCE L16 문제 Name이 CodeEngn일때 Serial을 구하시오 성공 구문을 찾아보자! 형광펜이 성공 구문으로 보인다. 해당 위치로 이동해보자. CMP나 JMP가 GetStdHandle 함수를 호출하는 곳을 제외하고는 보이지 않아서 일단 바로 위에 있는 CALL에 BP를 걸어두고 실행해보았다. 웬열 . . 안 걸린다. 위의 GetStdHandle 어셈블리를 봤더니 004015A2 주소에 있는 분기문에서 ZF가 1이면 00401063C로 넘어가면서 Wrong password!가 출력되는 것 같다. 그럼 004015A2의 결과를 계산하는 CMP문인 0040159F에 BP를 걸어두고 실행해보자. EAX에는 내가 입력한 11111의 hex값이 들어간다. 그리고 비교 대상의 값은 E4C60D97이다. E4C60D97을.. Wargame/CodeEngn 2021.05.18