Wargame 64

dreamhack rev-basic-0 풀이

문제 ; 이 문제는 사용자에게 문자열 입력을 받아 정해진 방법으로 입력값을 검증하여 correct 또는 wrong을 출력하는 프로그램이 주어집니다. 해당 바이너리를 분석하여 correct를 출력하는 입력값을 찾으세요! 64비트 exe 프로그램이므로, ollydbg만 있는 경우 하단의 링크를 통해 프로그램을 다운받자! https://sourceforge.net/projects/x64dbg/ x64dbg Download x64dbg for free. An open-source x64/x32 debugger for windows. An open-source x64/x32 debugger for windows. Development is done on GitHub (https://github.com/x64dbg..

Wargame/dreamhack 2021.05.15

Webhacking.kr old 61번 문제 풀이

view-source를 눌러서 코드를 보자. $result['id'] 값이 admin이면 문제가 풀리게 된다. id에 () select from , by . 등이 있거나 15글자보다 많으면 접근이 거절된다. SQL문은 다음과 같다. select {$_GET['id']} from chall61 order by id desc limit 1 이때 우리가 주목해야 하는 것은 where문에 $_GET['id'] 값이 들어가는 게 아니라 select 문에 들어가는 것이다. 출력된 문자열이 결국 답이 되기 때문에 우리는 admin을 화면에 출력해야 한다. 이때 사용해야 하는 것이 as(alias 별칭)이다. as를 사용하면 admin as id 라고 쳤을 때 id=admin이라고 인식된다. 즉 id라는 칼럼에 adm..

CodeEngn Basic RCE L10

문제 OEP를 구한 후 '등록성공' 으로 가는 분기점의 OPCODE를 구하시오. 정답인증은 OEP + OPCODE EX) 00400000EB03 10.exe를 ollydbg에 올려보니 위와 같은 메시지가 떴다. 아마 파일이 수정되어 OEP가 코드 바깥에 있어서 실행이 제대로 안 되는 것 같다. 일단 실행을 시켜보니 PUSHAD가 있었다. CTRL + F로 command 검색을 해보니 POPAD도 존재했다. 이를 바탕으로 패킹이 되어 있다는 것을 알아낼 수 있었다. UPX로 패킹 된 게 아니라, 어떤 걸로 패킹되었는지 알아보기 위해 PEiD에 넣어보았다. 넣어보았더니 ASPack으로 패킹되어 있는 것을 확인할 수 있었다. ASPack 언패킹을 수행하기 위해 찾아보던 중, 아래의 글을 발견하였다. duwjd..

Wargame/CodeEngn 2021.05.10

CodeEngn Basic RCE L09

문제 StolenByte를 구하시오. Ex) 75156A0068352040 09.exe도 UPX로 패킹되어 있다. 언패킹 해주자. 언패킹 했으니까 Ollydbg로 실행시켜보자. Ollydbg로 열어보면 처음엔 Nop sled가 있고, 003010A5부터 끝까지는 DB 00으로 채워져있다. 이때 문제에서 묻는 StolenByte다 Nop sled의 영역인가 싶어서 90을 입력해보았다. 음. 역시 아니었다 ^^! 이렇게 푸는 문제가 아닌 것 같아서, 일단 한 줄씩 실행시켜 보았다. 실행시키다 보니 MessageBoxA에서 호출되는 함수에서는 인자가 총 4개가 필요한데, 0040100E에 있는 MessageBoxA에서는 PUSH가 하나만 이루어지는 것을 볼 수 있었다. 이것 때문에 제일 처음 출력되는 메시지 ..

Wargame/CodeEngn 2021.05.10

CodeEngn Basic RCE L07

문제 컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가? 컴퓨터 C 드라이브 이름이 CodeEngn일 경우이니까, 컴퓨터 C 드라이브 이름을 바꿔주자. 그런 다음 07.exe 파일을 ollydbg로 실행시킨 후, 문자열을 뽑아보았다. 4562-ABEX와 L2C-5781 둘 다 시리얼 넘버로 보이니까 둘 다에 breakpoint를 걸어보자. 우선 4562-ABEX를 넣어주었다. 실행을 해보니, 노란색 형광펜 쳐진 어셈블리어를 통해서 CodeEngn 문자열이 EqfgEngn으로 바뀌게 되었다. 그런 다음 004010FC(클릭한 부분)에서 CMP를 통해 비교를 하고 그 다음 JE를 통해 성공 구문 혹은 에러 구문으로 점프를 하는 것으로 추측된다...

Wargame/CodeEngn 2021.05.10

CodeEngn Basic RCE L06

문제 Unpack을 한 후 Serial을 찾으시오. (정답인증은 OEP + Serial) UPX로 패킹되어 있으니 풀어주자. 언패킹 후 Ollydbg로 열어보았다. OEP가 00401360임을 알 수 있다. Serial Key를 찾아보자. 오른쪽 마우스 - Search for - All referenced text strings를 통해 문자열을 모두 뽑아보았다. Good Job이라는 성공 구문위에 AD46DFS547이라는 게 있는 것을 볼 수 있다. 이를 Serial 키로 의심해볼 수 있다. 해당 주소로 가서 breakpoint를 걸고 확인해보자. 실행된 프로그램에 1111111이라는 임의 값을 넣어보았다. 입력한 '1111111'값과 'AD46DFS547'이 스택에 들어가는 것을 볼 수 있다. 그런 다..

Wargame/CodeEngn 2021.05.09

Webhacking.kr old 47번 문제 풀이

47번 문제를 클릭하면 위와 같은 화면이 나온다. send 버튼을 눌러서 보내보자. Send를 누르면 Mail has been sent라는 메시지가 뜨는 것을 확인할 수 있다. Mail과 관련되어 있고 subject에 값을 입력하는 것을 보고 SMTP Header Injection을 의심했다. SMTP Header Injection ; 사용자가 입력한 값이 검사 없이 헤더에 들어가는 경우에, 공격자가 임의 값을 가진 추가 헤더를 주입하는 공격을 말한다. 이 공격은 제3자에게 전자 메일의 복사본을 전송, 바이러스 첨부, 피싱 공격 전달, 전자 메일의 내용 변경 시 사용된다. 이때 cc(참조)나 bcc(숨은 참조)를 이용하여 메일을 특정 이메일로 전송하는 방식으로 많이 사용된다. 참고 : portswigge..

Webhacking.kr old 59번 문제 풀이

view-source를 눌러서 소스 코드를 보자. 코드를 보면 1) phone이 20글자를 넘어가면 Acess Denied 출력 2) id에 admin/i가 입력되면 Access Denied 출력 3) phone에서 각종 문자열을 필터링하는 것을 볼 수 있다. 각각 칸의 name값은 위와 같다. select id,lv from chall59 where id='{$_POST['lid']}' and phone='{$_POST['lphone']}' 위의 SQL 문에서 id 값이 0이 아니고 lv이 admin이면 문제가 풀리게 된다. 그럼 우리는 lv에 admin 값이 들어간 튜플을 JOIN으로 생성하면 된다. insert into chall59 values('{$_POST['id']}',{$_POST['pho..

Webhacking.kr old 23번 문제 풀이

23번을 클릭하면 위와 같은 화면이 뜬다. 를 inject하는 게 미션이라고 해서 입력창에 넣어보았다. 그랬더니 no hack이라는 메시지가 출력되었다. 어디가 걸려서 no hack이 되는지 찾아보기 위해 각각 입력해보았는데, script와 alert를 입력하면 no hack이 출력되었다. 그래서 script와 alert를 url encoding 해주었다. www.w3schools.com/tags/ref_urlencode.ASP HTML URL Encoding Reference HTML URL Encoding Reference URL - Uniform Resource Locator Web browsers request pages from web servers by using a URL. The URL i..