wargame 48

[LOB] orc

개인적으로 RET 함수 뒤에 쉘 코드를 써 내려 가는 방법을 배웠던 적이 있어서 goblin 문제보다 쉽게 풀 수 있었다. 소스코드 분석 프로그램은 인자로 입력값을 받고, 환경변수에 쉘 코드를 삽입하는 방법을 방지하기 위해 환경변수를 0으로 덮어 씌워버린다.그리고 인자 값의 48번째 값이 \bf가 아니라면 프로그램을 종료한다. 다른 쉘 코드 삽입 방법이 많지만 스택에 쉘 코드를 삽입하여 문제를 풀라는 의미인 듯 하다. 위의 조치를 다 하면 strcpy 함수를 통해 buffer에 입력 값을 복사하고 출력한다. 문제 풀이 argv[1][47] != '\xbf'' 로 인해 48번째 값이 \xbf가 들어가야 프로그램이 도중 종료되지 않는 것을 확인 할 수 있다.덤으로 Segmentation fault가 발생한다..

[LOB] goblin

소스코드 분석 cobolt 문제와 비슷하게 16byte 크기의 buffer가 존재하므로 같은 방법을 이용해도 괜찮을 듯 하다.다른 점은 이번 문제에선 인자로 받지 않지 않는다. 이는 인자값을 넘기는 `` 대신 다른 명령을 통해 해결할 수 있다. 문제는 stdin이라는 힌트다. cobolt와 같은 방법을 했는데 쉘을 따지지 않는데 이유를 알려면 시스템 적인 배경지식이 어느정도 있어야 알 수 있는 듯하다. 아직까지도 완벽한 이해는 하지 못했다. 문제 풀이 여러가지 방법이 있겠지만, 쉘 코드의 주소로 이동하는 데에는 cobolt와 별 다른 차이점이 없으므로 환경 변수와 NOP Sled 기법을 이용한다. 환경변수는 프로그램을 만들어 출력했다. 위치는 0xbffffea8임을 알 수 있다.인자 값이 아닌 프로그램의..

webhacking.kr 34번 풀이

webhacking.kr 34번 풀이 문제 자체를 푸는데 있어서는 왜 이렇게 높은 배점이 책정되어있는가 조금 의문이 들 정도로 무슨 의도인지 모르겠는 문제 [HINT] 1. JavaScript2. 난독화(????) 문제에 접근하면 Wrong이라는 메세지 박스가 뜨고 검은 화면밖에 보이지않는다.페이지의 소스를 보면 난독화가 되어 있다. 글자는 왜 깨져있는지 모르겠다. 하지만 개발자 도구로 보게 되면 언패킹 된 JS코드가 보이게 된다.url에 0lDz0mBi2라는 문자열이 있으면 Passw0RRdd.pww 페이지로 이동하고 아니면 메세지 박스를 띄운다. 난독화 문제인데 왜 소스 코드 막 줄에 구지 언패킹 된 소스를 노출시킨건지 이해가 되지 않았다.바쁜 웹 해킹.kr 개발자의 의도는 지금은 잘 알턱이 없고 난..

webhacking.kr 8번 풀이

webhacking.kr 8번 풀이 [HINT] 1. SQL Injection in INSERT query2. 환경 변수 문제에서는 클라이언트의 HTTP_USER_AGENT와 REMOTE_ADDR를 가져와 각각 $agent,$ip에 저장한다.$agent 변수에서 문자열 앞 뒤 공백 제거, 일부 문자열 치환 및 필터링, 소문자 치환 과정을 거친다. 이후 $_SERVER를 통해 HTTP_USER_AGENT를 가져와서 싱글쿼터(')와 \를 필터링한다.싱글 쿼터(')와 \를 필터링한 HTTP_USER_AGENT의 값으로 쿼리를 불러오고 쿼리의 반환 값으로 "admin"이 있다면 문제를 해결할 수 있다."admin" 값이 없다면 agent, ip, id 테이블 안에 각각 변수 $agent,$ip 와 문자열 'gu..

webhacking.kr 17번 풀이

webhacking.kr 17번 풀이 [HINT] 1. javascript JS는 client side script이므로 클라이언트 측에서 소스를 열람할 수 있고 변조할 수 있다. 소스에선 unlock 변수에 계산하기 힘든 사칙연산의 결과값을 저장하고 있고,sub()함수는 페이지에 있는 textbox의 값이 unlock 변수에 저장된 값과 같으면 Password is (unlock/10)를 출력한다. 열람도 가능하고 변조도 가능하기 때문에 풀이 방법은 여러가지 방법이 될 수 있다.첫 번째로 소스코드를 열람 할 수 있는 성질을 이용할 수 있다. 사칙 연산의 내용을 볼 수 있기에 python이나 다른 스크립트를 통해 unlock의 값을 계산해낼 수 있다.직접 손으로도 가능하긴 하다. 두 번째 방법으로는 페이..

webhacking.kr 4번 풀이

webhacking.kr 4번 풀이 webhacking.kr은 문제 목표가 뚜렷해서 공부하기 편하지만가끔 무슨 의도의 문제인지 모르는 문제들이 있다.그 중 하나인 문제 같다. [HINT] 1. base 642. Rainbow Table 문제는 Password를 입력할 수 있는 textbox와 summit 버튼, 알 수 없는 문자열을 볼 수 있다.뒤에 '==' 패딩되어 있는 것을 보아 base64로 인코딩된 문자열인 것을 확인 할 수 있다.알파벳 대소문자, "+", "/" , "="으로 이루어져있고, 24bit단위로 인코딩 되기 때문에 24bit단위가 아닌 문자열의 끝에는 "=", "=="으로 패딩된다. 24bit 단위인 문자열은 패딩 문자 "="가 붙지 않으므로 패딩 문자가 없다해서 base64가 아닐거..

[LOB] cobolt

소스코드 분석 gremlin과 비슷하게 인자 첫번째 값을 buffer에 복사한다. 여전히 취약한 함수인 strcpy를 이용한다.하지만 주석처리된 힌트를 보면 small buffer를 볼 수 있다. cobolt 문제에서는 배열의 크기가 16밖에 되지 않는다. 문제 풀이 cobolt도 역시 strace를 통해 바이너리를 추적하여 ret 주소를 덮어씌우는 위치를 찾아낸다.cobolt에서는 buffer의 크기 16byte + sfp의 크기 4byte를 가져 21byte 째부터 ret 주소를 덮어씌우는 것을 확인 할 수 있다.총 20byte의 쉘코드를 삽입 할 수 있지만, gremlin에서 사용했던 20byte가 넘는 쉘 코드를 사용할 수 없을 뿐 더러 20byte보다 작은 값을 쉘코드를 사용했다 하더라도 NOP..