본문 바로가기

CTF/Write-up

(44)
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라는..
NEWSECU CTF Write-up 내용이 너무 많아서 문서로 작성했다.
holyshield ppc 우선 이문제는 PowerPc로 되어있기 때문에 명령어를 모르는 나는 동적디버깅이 시급했다 대회 때 환경 구축을 못해서 못풀었었는데 이제야 풀 수 있게 되었다 이게다 갓희근형 덕분이다 우선 실행하면 이렇게 나오는데 입력을 받고 틀렸다고 출력해준다 우선 0x1B와 비교를 하는데 문자열 길이가 27자리이다 27자리를 입력해주고 여기서 qqqqqq함수를 분석하면 될거같다 이부분은 그냥 볼게 없는데 내가 입력한 값을 다른 위치에 옴기는 부분이다 이부분이 중요한 부분인데우선 내가 입력한 값중에 첫 번째 글자에 0x58D를 곱한다그리고 0~26까지 반복되니 반복에다가 +5를 해준다 다른 테이블 값에서 숫자를 하나씩 가져오는데 처음에는 3을 가져오고그걸 위에 5더한것과 또 더한다이렇게 더한것과 처음 0x58D를 곱한것..
holyshield BrokenPiano holyshield BrokenPiano이문제는 대회 때 아쉽게 못풀었던거같다 피아노 모양에 C#으로 된 바이너리이다 그리고 사진 처럼 버튼마다 클릭시 값을 가지게 되는데값을 다 누른 후 버튼 17을 누르면 된다 우선 버튼 17을 보면 this.code가 null과 같다면 return을 한다 그렇기 때문에 아무버튼이나 한번 눌러주고 버튼 17을 눌러준다버튼 17은 오른쪽 맨 끝 검은 건반이다 지금은 접속이 안되는데 저 위에 사이트에서 base64로 인코딩된 값이 나온다임시로 base64로 인코딩해서 값을 서버에 넣고 위에 부분에 아이피와 포트를 변경해서 풀도록 하겠다이런식으로 기존 바이너리를 인코딩해서 서버에 넣었다 엄청긴데 저걸 풀어서 a.exe로 만든다 그리고 a.exe가 있다면 해당 소스처럼 내가 ..
holyshield sound holyshield sound 앱을 실행하면 이렇게 나온다우선 아이디와 패스워드를 구해야하는데 로그인 실패 부분이있다아이디를 obj 변수에 저장하고패스워드를 obj2에 저장한다그리고 밑에 보면 i==length가 같아야하는데 결론은 아이디와 패스워드가 같아야한다obj를 이용해 b.a에 한글자씩 보게되는데 이렇게 나온다그래서 아이디를 한글자 입력하고 패스워드를 알아내야하는데b부분을 조금만 보면알 수 있다i2 = 33이다내가 입력한 문자를 carr2에서 찾고i가 증가한만큼 carr에서 찾는다그리고 더하는데하지만 리턴값에서 조금 변동될 수 있다고로 이렇게 4개를 찾았는데 이런식으로 패스워드는 엄청 많다아무거나 입력하고 로그인성공을하게 되면이런 판이 뜨게 되는데 소리를 아무리 질러도 90이 안넘어간다그래서 처음..
holyshield puzzle holyshield puzzle이런식으로 이미지가 주어지는데 이걸 합쳐서 하나의 이미지로 만들어야한다 http://swlock.blogspot.kr/2015/12/script-python-tile.html 우선 이 글을 참고했다파일 이름이 00_00.png이런식인데 1단계는 쉽게 통과할 수 있다2단계는 base64인데 디코딩을해서 파일이름을 위와같이 만들어주고 합치면된다이제 3단계인데 3단계는 MD5로 되어있다 md5는 복고화가 일일이 안되니반대로 생각해보면된다 파일 형식은 00_00.png이런식이다 그러므로 01_01.png이름을 md5로 해서 찾으면 된다12345678910111213import osimport hashlib for x in range(1, 100): for y in range(1, ..