WarGame 23

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..

[LOB] gremlin

소스코드 분석 argc가 2개 미만 즉 인자가 없으면 프로그램을 종료하고, 아니라면 첫 번째 인자 값을 버퍼에 복사한 뒤 출력한다.simple BOF문제이다. 문제 풀이위의 소스에서 보았듯이 BOF문제다. 문제는 strcpy 함수를 사용하고 있기 때문에 BOF가 발생한다.strcpy 함수는 메모리 경계를 검사하지 않아 buffer의 크기보다 큰 길이의 값을 복사하게 되면 buffer를 넘어서 다른 값 까지 덮어씌운다.그렇다면 buffer의 크기를 넘어선 값을 입력하게 되면 무슨 일이 일어나는지 확인해보자. 다음은 gremlin 프로그램에 A를 261개 삽입했을때 strace를 이용하여 바이너리를 추적한 결과값이다. ret 값을 덮어쓰기 시작하여 segmentation fault가 발생한 것을 알 수 있고..

webhacking.kr 14번 풀이

webhacking.kr 14번 풀이 자바스크립트가 어디서 동작하는지만 알면 클리어 되는 문제이다. [HINT] 1. javascript URL을 보면 알 수 있지만, JS, 자바스크립트에 관한 문제임을 알 수 있다.JavaScript와 PHP의 차이라고 한다면 어디서 소스가 실행되느냐를 따질 수 있다. 웹 페이지에서 실행되는 JS의 경우, PHP와 다르게 소스를 클라이언트가 볼 수 있고 그것을 변조할 수도 있다.그러므로 소스보기나 개발자 도구(F12)를 통해 소스를 보게 되면 javascript 구문을 볼 수 있다. 사이에 있는 이 소스가 js 소스이며 문제 페이지에 있는 입력 칸에 적은 값이 ul의 값과 같다면 password의 값을 내놓고 그 값은 ul의 제곱과 같다.(입력 값(pw.input_pw..