목록Write Up (43)
0x0102

Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial Ex) 00400000PASSWORD PEID에 먼저 돌려보면 6번 문제도 마찬가지로 upx 언패킹이 필요해보인다. 언패킹이 완료되면 디버거에 던져준다. 실행하다보면 다음과 같은 시리얼 넘버를 입력하는 창을 확인할 수 있다. 5번 문제와 마찬가지로 Search for -> all refereneced text strings에 들어가 text들을 확인해준다. 가장 상단을 보면 시리얼넘버 같은 문구를 확인할 수 있고 입력창에 작성하면 문제를 해결할 수 있다.

Q. 이 프로그램의 등록키는 무엇인가 5번 파일을 압축해제하고 PEID에 넣어보면 CODE가 아닌 UPX1이라고 표기되어 있는 것을 확인할 수 있었다. 따라서 upx를 언패킹하는 작업을 해야했다. 5번 파일을 다운로드 받고 upx와 같은 경로로 파일을 이동시킨다. upx가 있는 파일 경로에서 cmd를 켜고 upx -d 05.exe 명령을 해준다. 언패킹이 완료되면 다시 실행파일을 디버거에 넣어준다. 실행하다보면 004412BC 줄을 실행하였을 때 다음과 같은 창을 확인할 수 있다. Register now! 버튼을 클릭해보면 시리얼 넘버가 틀렸다고 다시 시도하라는 문구가 나온다. 시리얼넘버같은 아스키코드가 나오고 상단에는 Registered User라는 문구가 나온다. 해당 User Name과 시리엄 넘버..

이 프로그램은 디버거 프로그램을 탐지하는 기능을 갖고 있다. 디버거를 탐지하는 함수의 이름은 무엇인가 4번 문제 파일을 압축해제 해준 후 이뮤니티 디버거에 던져주었다. 디버거 화면과 동시에 cmd창이 하나 뜨지만 별다른 문구가 뜨지는 않는다. 이후 한줄씩 f8키로 진행해본다. 어떤 시점을 지나면서 cmd창에 '디버깅 당함'이라는 문구가 뜬다. 해당 지점에 break point를 걸고 f7키로 들어가보았다. 해당 경로로 이동하여 한줄씩 실행하다보면 다시 디버깅당함이라는 문구가 뜨는데 해당에 bp를 걸고 해당 줄 이전에 디버깅을 탐지하는 함수가 있을 것이라고 생각하고 살펴보았다. 0040105E번줄을 확인하면 명령어 이후 IsDebuggerPresent라는 디버거 관련 함수를 확인할 수 있다. 정답 : Is..

비주얼베이직에서 스트링 비교함수 이름은? 문제 파일을 다운로드 받고 디버거에 풀어주었다. 사전에 dll파일 오류가 발생해서 dll도 다운로드 받아주었다. 1. 우클릭후 search for -> all intermodular calls로 들어간다. 2. strcmp 함수이름을 알고 싶은 것이므로 관련 있어보이는 vbastrcmp 로 들어가본다. 3. 이후 이동한 주소로 실행하면 메시지 박스가 뜨고 아무 문자열이나 쳐서 비교할 문자열을 알아본다. 하단에 유니코드가 적혀있는 것은 보면 내가 대충 작성한 DFVS와 위에 처음보는 유니코드가 나온다. 아마 해당 유니코드가 메시지 박스의 패스워드인 것 같다. 일단 문제에서 물어보는 것은 스트링 비교함수의 이름이었으므로 정답 : __vbaStrCmp

Q. 패스워드로 인증하는 실행파일이 손상되어 실행이 안되는 문제가 생겼다. 패스워드가 무엇인지 분석하시오 먼저 문제파일을 압축 해제 한 후 디버거에 올렸는데 에러가 발생하며 문제처럼 실행파일이 실행되지 않았다. 디버거에서는 아예 문제가 열리지 않아서 HxD에 파일을 올려보았다. 내리다보면 이렇게 메시지 박스에서 나올법한 문구들을 확인할 수 있다. crack me 하단에 있는 값이 패스워드라고 추정하고 답을 기입하였더니 정답이었다.

Q. HDD를 CD-Rom으로 인식시키기 위해서는 GetDriveTypeA의 리턴값이 무엇이 되어야 하는가 문제 파일을 다운로드 받고 7zip으로 압축을 해제한 후 immunity debugger에 풀어주었다. 이후 f8키로 한줄씩 실행해주었다. 계속해서 실행하면 이렇게 메시지 박스가 하나 출력되고 계속해서 실행하다보면 EAX, ESI 값을 비교하는 명령어를 지나 에러 메시지창이 뜨는 것을 확인할 수 있다. 다시 처음부터 실행해보면서 EAX 값과 ESI 값을 같은 값으로 만들어줘야 에러 박스가 아닌 우리가 원하는 메시지 박스를 얻을 수 있을 것이라고 생각했다. 따라서 비교문들어가기 전에 EAX값을 수정하여 ESI 값과 같게 만들어주었다. 이렇게 정상적인 메시지 박스는 출력을 완료하였다. 그러나 문제에서 ..

초기 화면 SQL 인젝션을 사용하는 문제인 것 같다. 먼저 코드 확인 소스 코드 해석 get 방식으로 no 전달 정규표현식으로 공백 / & / select / from 등 문자열 필터링 하단에 sql 쿼리문 if 조건문에서 id = admin 일때 해결 예상 주석으로 admin의 no는 2라는 것을 알 수 있음 id = guest로 고정되어 있으므로 쿼리문 수정하기 "select id form chall18 where id='guest' and no= 뒤에 '-1' or no='2'로 변경 -> 앞의 and문을 거짓으로 바꾸고 뒤의 or문으로 참을 만들어주므로 식 성립 아이디 란에 '-1'or no='2' 제출 그러나 공백이 필터링 되어 no hack 표기 처음 코드에서 확인하였듯 get..

소스코드를 먼저 살펴봐야할것 같다 코드를 자세히 살펴보면 id='{$_POST['id']}" 로 ' 가 제대로 닫히지 않았음을 알 수 있다. 값을 적고 ' 만 닫아주면 해결 될 것이다. 하지만 str_replace 코드로 인해 ' 은 '' 로 대체되고 역슬래시로 적어볼려고 해도 \\은 공백으로 대체되기 때문에 바로 값을 입력할 수는 없다. 이는 substr 코드를 통해 해결 할 수 있다. 인덱스가 0에서 15까지의 문자열만을 추출하기 때문에 인덱스가 15인 값에 '가 들어가 ''로 대체되어도 잘려 '만 남는 것이다. 따라서 길이가 14이하인 문자열 아무거나 입력하고 공백 문자로 인덱스 14까지 채운 뒤 마지막 인덱스 15자리에 '을 입력하면 문제가 해결된다.

old 54 -첫 화면에 password is 이후 알파벳이 빠른 속도로 지나간다. -flag일 듯 하다. 소스코드 - 너무 빨리 지나가는게 문제인 것 같아 responsetext 시간을 20에서 2000으로 늘렸다. - 그러나 한글자씩 치는게 귀찮고 플래그 값이 너무 길었다. 차이점 - 그래서 aview.innerHTML = x.responseText; 에 등호 앞에 +를 주어 한 문자씩 바뀌지 않고 계속해서 출력되게 하였다. 성공 - 이후 플래그를 어디에 넣는건지 몰라서 블로그 참고해보니 홈페이지 자체 auth 란에 적는거라고 했다. 해결

소스코드부터 확인하자 파란색으로 써진 부분을 보자 -참고 url에 ?id=admin을 바로 작성했으나 실패 아까 본 소스코드에서 디코딩과 관련된 부분이 나왔다. 그렇다면 인코딩해서 값을 넣으면 디코딩해서 진행될 것이라고 생각했다. admin을 인코딩한 값은 %61%64%6D%69%6E 이다. 그러나 브라우저에서 자동으로 디코딩 되어 ?id=admin으로 적었을 때와 같아지고 no!가 다시 뜨게된다. 한번 더 인코딩해서 디코딩 되어도 상관없..