본문 바로가기

CTF

(53)
holyshield pwnit 우선 v3에 입력을 받고 v5를 넘겨준다. 힌트 함수에서 메모리 릭을 통해 스택 주소를 구할 수 있고 exploit 함수를 통해 ret을 덮어 쓸 수 있다 페이로드는 [NOP*48][Stack_Address][NOP][ShellCode] 스택 주소를 구해보자1234567891011121314151617181920212223242526272829303132333435from struct import *from socket import *import hexdumpimport time s = socket(AF_INET, SOCK_STREAM)s.connect(("192.168.153.139", 3720)) shell = "\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\..
codegate 2013 vuln200 이건 nc 서버 때문에 시간을 다 잡아먹었다.포트를 7777로 맞춰놓고 서버를 세팅해놔도 ㅂㄷㅂㄷ이다 Bind Error은 왜 자꾸 뜨는지 모르겠다..... 자 문제를 풀어보자 프로그램을 실행하면 이렇게 나오는데 ida로 보면 recv 함수의 리턴값은 recv 바이트 수를 리턴하는데 그 값이 sub_8048eeb 함수에 끝에 들어가고 0 초기화된 v13이 앞에 들어간다. 저 함수를 들어가보면 memcpy에서 취약점을 발견할 수 있다. 왜냐 a1은 v13으로 400바이트이다, len또한 400바이트이다.v13은 내가 입력한 값이 들어가는데 dest의 크기는 236바이트이다. 더 많이 입력할 수 있으므로 오버플로우가 일어난다. 위에 보이는 5개의 메뉴말고도 하나가 더있다. write라고 write를 입력해주..
Layer7 ctf 2015 IhaveLongDariYouHaveShotDari 프로그램을 실행하면 알람 함수가 있는데 타이머 같은거다 15초 제한 프로그램 실행 시 패스워드를 요구한다.다 적혀있으니 좋고 다음으로 숫자를 입력받는데 v5변수를 사용하고v8이 0x12C보다 높으면 아래의 메시지를 보여준다. v5 변수를 살펴보면 __int16인걸 알 수 있다. 즉 범위가 0~65535까지 인 것이다. 그리고 마지막으로 names:를 입력받는데 v7의 크기는 0x138로 312바이트 이다. 이제 실행해서 살펴보면 1단계 패스워드와 2단계 숫자는 무난하게 넘어갈 수 있다.__int16의 범위가 65535이니 +1를 해준 값을 넣는다. 마지막으로 3단계에서 바이트를 320개를 넣어주면 세그먼테이션 폴트가 뜨는걸 볼 수 있다. 그렇다면 마지막에 320바이트를 넣어주고 시스템 함수를 호출해보자/..
Pico ctf 2014 rop1 바이너리의 소스 코드는 이렇고 환경에서는 ASLR이 걸렸있다.ROP를 이용해서 풀 수 있지만 다른방법으로 풀 것이다. 우선 strcpy() 함수는 char * strcpy(char * dest, const char * src); 이렇게 구성되어 있는데 strcpy() 함수의 리턴 값은 문자열 dest에 대한 포인터이다. 그럼 이 함수를 이용해 문제를 풀어보자 (NX가 걸려있지 않기 때문에 쉘코드가 가능하다. ) 버퍼가 64이기 때문에 72개를 넣어주면strcpy() 때문에 EAX에 버퍼 값을 가리키는 포인터 주소가 들어간다. EIP도 90909090으로 되어있다. 현재 EAX레지스터 값을 실행할 수 있으면 쉘코드를 실행할 수 있다는 소리다. 근데 ASLR이 걸려있는데 어떻게 실행할까 call %eax라는..
NC 서버 만들기 보호되어 있는 글입니다.
NEWSECU CTF Write-up 내용이 너무 많아서 문서로 작성했다.
holyshield ppc 우선 이문제는 PowerPc로 되어있기 때문에 명령어를 모르는 나는 동적디버깅이 시급했다 대회 때 환경 구축을 못해서 못풀었었는데 이제야 풀 수 있게 되었다 이게다 갓희근형 덕분이다 우선 실행하면 이렇게 나오는데 입력을 받고 틀렸다고 출력해준다 우선 0x1B와 비교를 하는데 문자열 길이가 27자리이다 27자리를 입력해주고 여기서 qqqqqq함수를 분석하면 될거같다 이부분은 그냥 볼게 없는데 내가 입력한 값을 다른 위치에 옴기는 부분이다 이부분이 중요한 부분인데우선 내가 입력한 값중에 첫 번째 글자에 0x58D를 곱한다그리고 0~26까지 반복되니 반복에다가 +5를 해준다 다른 테이블 값에서 숫자를 하나씩 가져오는데 처음에는 3을 가져오고그걸 위에 5더한것과 또 더한다이렇게 더한것과 처음 0x58D를 곱한것..
PowerPC 환경 구축 보호되어 있는 글입니다.