본문 바로가기

분류 전체보기

FTZ level 4 FTZ level 4 hint finger : 리눅스에서 사용자들의 정보를 확인하는 명령어 +)xinetd? 서버데몬이 항상 메모리에 상주하면서 외부접속을 대기하고 있으면서 그 데몬을 사용하지 않는 시간(접속이 없는 시간)에는 시스템 자원을 낭비하게 된다. 이를 조금이나마 줄이기 위해 xinetd라는 데몬이 다른 서버데몬을 총괄 관리하게 된다. xinetd는 메모리에 상주해 있다가, 접속 요청이 들어오면 그 요청된 데몬을 실행시키고 접속을 연결해준다. 그리고 접속 요청이 없을 땐 서버데몬들을 모두 종료시켜 잠재운 상태로 둔다. backdoor파일은 사용자가 finger 데몬 포트로 접속 했을 때, level5의 권한으로 /home/level4/tmp/backdoor파일을 실행시키게 된다는 것이다. 근데 .. 더보기
Python Challenge level 6 Python challenge level 6 2016.12.22. 주석 처리된 부분을 보면 zip과 뭐 기부하면 감사 하겠다 하는 것 같은데 저기 아래 PayPal을 눌렀을 때 그런 페이지로 이동하는 것 같았다. 그래서 PayPal은 문제 푸는 데 필요 없는 것 같고 바지의 zipper사진과 주석에 zip이 있는 걸 보면 zip파일을 사용해야하는 거 같은데 zip파일이 당최 어디 있는지 모르겠다. 주석 풀어서 눌러봤다가 드래그 해봤다가 의미없는 행동을 하다 이전 문제에서 주소 뒤에 banner.p를 입력해 문제 푸는 것에 접근한 것처럼 그냥 zip을 입력하면 zip파일이 받아지지 않나 싶어 channel.zip을 입력해보았다. channel.html대신 channel.zip을 입력하니 zip파일이 받아졌.. 더보기
Python Challenge level 5 Python Challenge level 5 2016.12.22. 처음에 접속했을 때 산 사진과 ‘pronounce it’만 있어서 일단 소스 코드를 보았다. 주석 처리된 부분이 있길 레 주석 처리부터 없애보았다. banner.p부분에 마우스를 올리니 주소가 뜬다. 이동해보자 이동을 하면 이런 식으로 계속 이상한 문자들이 써져있다. 나는 처음에 banner.p니까 p 언어라는 언어로 쓴 페이지니까 p 언어로 뭐 어떻게 하면 나오지 않을까 싶어서 p 언어를 검색해보았다. p 언어는 예전 명칭은 ‘data p’로 한국어로 프로그래밍을 할 수 있는 언어라고 한다. 신기해하며 이걸로 푸는 건 아니겠다 싶어 창을 닫고 계속 생각해보았다. 글자가 너무 많아서 딱 봐도 무슨 형태로 변환시켜서 그 크기를 줄이고 줄이다.. 더보기
Python Challenge level 4 Python Challenge level 42016.12.21. 우선 linkedlist.html로 접속을 하면이렇게 뜬다.그래서 다시 linkedlist.php로 접속을 하면 문제가 나온다. 우선 페이지 소스를 보면 주석 처리된 부분이 있다.urllib을 활용해야하는 것 같다. 사실 이것만 봐선 감이 안온다. url 주소를 이용해 뭐 400번 정도만 부르트 포싱을 하면 되는 것 같은데 아직 잘 모르겠다.그런데 마우스를 움직이다가 사진 위에 마우스를 올렸을 때 마우스 모양이 누를 수 있도록 바뀌는 걸 확인했다. 그래서 사진을 눌렀더니 새로운 페이지가 열렸다.뭔가 nothing값을 400번 정도 노가다하며 바꿔야하는 거 같은 느낌이 들지만 일단 nothing에 44827을 넣어보자. 또 nothing값을 .. 더보기
DL(Dynamic Loading) 동적 적재 겉햝기 하드 디스크에 있는 프로그램을 실행시키기 위해 메모리로 올려 프로세스로 실행을 시킨다. 여기서 프로그램이 메모리보다 크거나 많은 양의 코드를 포함하고 있는 경우를 위해 메모리를 효율적으로 쓰기 위해 동적 적재를 한다. 라이브러리가 함수들이 정의되어 있고 모아져 있는 곳인데 정적 적재의 경우 라이브러리도 같이 메모리에 올라가는 데 이렇게 되면 파일의 크기가 너무 커진다. 그래서 라이브러리는 하드디스크에 있고 그 라이브러리 안에 필요한 함수를 그때 그때 메모리에 올려 사용하는게 동적 적재(DL, Dynamic Loaing) 라는 것이다. DL과 관련해 대표적으로 쓰이는 함수 3개를 알아보았다. 1) dlopen(FILENAME, flag) FILENAME에는 파일이름이나 경로가 들어가는 것이고 flag에는 .. 더보기
Python Challenge level 3 Python Challenge Level 3 3번 화면을 보면 세 개의 큰 촛불이 양 옆으로 작은 촛불 하나를 감싸고 있다. 소스를 보면 주석 처리된 부분에 알파벳들이 길게 있는데 자세히 보다보면 ABCaDEF 이런 식으로 대문자 세 개 소문자 한 개 대문자 세 개로 된 부분이 있다. 여기서 이런 식으로 된 곳의 소문자를 찾아내면 된다.정규표현식을 사용하면 쉽다고 한다.정규표현식에 관한 정보는 http://devanix.tistory.com/296 여기를 참고하면 좋을 것 같다. 2번 문제에서도 똑같이 주석부분만 사용하기 위해 rindex함수를 사용join함수 앞에 "".join을 하면 찾은 소문자들을 문자열로 반환할 때 찾은 요소들 사이에 공백이나 구분자를 넣지 않고 하나로 연결한다는 뜻이 된다.위의 .. 더보기
LOB 17번( zombie_assassin → succubus ) cat succubus.c우선 calling functions continuously를 보면 함수를 연속적으로 호출한다. 코드도 보면 전역변수 check의 값을 확인하면서 순서대로 불러야하는 거 같은데 check값 보면 DO, GYE, GUL, YUT, MO순으로 함수를 불러서 MO의 system함수를 통해 쉘을 따면 될 거 같다. 그리고 //check address부분을 보면 addr에 DO함수의 주소를 넣고 ret의 주소가 DO함수가 아니면 You must fall in love with DO를 출력하고 종료시키는 걸 보면 ret의 주소가 DO함수의 주소여야 한다. 그리고 //stack destroyer 부분을 보면 buffer+48+100 즉 buffer와 SFP,RET 영역과 100byte를 빼고.. 더보기
LOB 16번 ( assassin → zombie_assassin ) cat zombie_assassin.c우선 주석에 FEBP가 있으니 무엇인지 찾아보자FEBP는 Fake EBP로 ebp를 속이는 기법이다. 스택을 그려보면서 이해해보자.strncpy로 48byte만 복사를 하므로 ret까지 저렇게 채워준다고 생각했을 때 ebp를 이용하여 쉘코드를 따는 것인데 일단 처음에 buffer 40byte를 지나고 나면 esp, ebp의 위치가 이렇게 되는데 여기서 leave가 실행되는데 leave는 mov esp, ebp와 pop ebp이므로 우선 mov esp, ebp를 하고나면이렇게 되고 그다음 pop ebp를 하면그리고 ret(pop eip + jmp eip)를 수행하는데 eip에 leave가 들어가니까 다시 mov esp,ebp를 하는데 ebp에는 buffer 시작주소가 .. 더보기
Python Challenge level 2 페이지 소스에 있다고 해서 ocr.html의 페이지 소스를 보았다. 주석 처리된 부분에 적은 문자들을 찾으라고 하고 특수문자들로 엄청 길게 쓰여진 게 있다.처음엔 긴 문자열을 복사 붙여 넣어서 코드를 짜야하나 싶었는데 파싱을 하면 코드를 어지럽게 하지 않아도 저 문자열을 빼올 수 있다.url의 소스를 보기위해 urllib을 import 해주고 저기 문자열 부분만 빼오기 위해 find함수로 %%$@_$^__부분을 찾는다. find함수는 괄호 안의 부분이 전체에서 몇 번째에 있는지 찾아주는 함수인데 직접 확인하는 게 더 이해가 빠르다. 일단 저기 m 부분만 출력시켜서 확인해보면 즉, url 소스의 843번째 문자가 %%$@_$^__의 시작이라는 것이다.[m:len(response)-5]은 843부터 url .. 더보기
Python Challenge level 1 사진을 보자마자 시저암호라는 걸 파악할 수 있다.보면 원래 값에서 아스키 값이 2가 증가한 값으로 나온다.여기서 무작정 2씩 증가시키면 안되는 게 y나 z의 경우 2씩 증가되었을 때 다시 a,b로 돌아가야 하는데 아스키 숫자를 2씩 증가시키기만 하면 a,b로 돌아가지 않는다. +) def? 함수 정의하는 키워드 +) ord? 문자를 아스키 값으로 변환 +) chr? 아스키 값을 문자로 변환 +) elif? else if우선 temp 값에 아무것도 넣지 말고 str을 하나하나 검사하면서 아스키값이 2 증가된 문자를 temp에 넣는다.띄어쓰기나 ‘나 .인 경우에는 그냥 그대로 출력시켜주고 y와 z의 경우를 고려하기 위해 우선 원래 문자를 아스키 값으로 변환 후 알파벳 개수만큼 더해주고 2를 증가시켜 반환시킨.. 더보기