전체 글 (88) 썸네일형 리스트형 해킹존 버그바운티 늦디 늦은 후기 https://hackingzone.net hackingzone hackingzone.net 때는 바야흐로 2020년 11월 전역후 한참 슬럼프에 빠져있을 때였습니다. 20년 4월즈음에 말차를 나와서 5월의 전역을 한 저는 한참 전역뽕에 차올라서 짱짱해커가 될 수 있을거라는 희망을 가졌었습니다. 군에서 훈련시에 취약점 점검을 하며 이것저것 취약점도 찾았겠다. 근무 끝나면 사지방에서 연등해가면서 해커원 버그바운티 리포트를 보면서 저는 나가면 저런 짱짱 해커가 되서 버그바운티 왕이 될 수 있을 거라 생각했습니다. 그리고 20년 11월 단 7개월 현실의 무서움을 깨달았습니다. 그동안 나가서 참가한 버그바운티들에서는 뭔가 실적도 안나오고 그저 학교에 다니면서 해킹과는 점점 멀어지나... 이게 재능없는 자의 말로.. [Tip] peda 와 Pwntools 설치 리버싱이나 pwnable을 하면 필수적으로 사용하는 프로그램이 있습니다. 동적분석을 무척이나 보기 쉽게 도와주는 gdb의 상위호환인 peda와 pwnable을 풀면서 귀찮은 코딩부를 생략해주고 여러 쓸모있는 모듈들을 다 갖고있는 Pwntools입니다. 특히 나중에 ROP등을 할때 자동화해주는 것 생각하면 정말 감동입니다. ============================================================================peda 설치 https://github.com/longld/peda longld/peda PEDA - Python Exploit Development Assistance for GDB - longld/peda github.com 위 주소에서 받을 수 .. shellcode 모음 https://xerxes-break.tistory.com/212 유용한 쉘코드(x86 Shellcode 로컬) 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. 쉘을 종료할.. xerxes-break.tistory.com 유용한 쉘코드 모음이 있어서 추천합니다~ https://r3dzone.tistory.com/15?category=670003 [Windows_System] Shellcoding 쉘코딩법 #1 ==========================.. [pwnable.kr]flag 풀이 음 무슨 파일을 던져주고 시작하네요 리버싱작업이 필요하답니다. 더보기 기본정보 얻으려고 HxD로 까보니까 파일시그니쳐가 ELF파일이네요 리눅스 실행파일입니다. 리눅스에서 다시 받아줍시다. flag를 실행시키니까 다음과 같이 출력되네요 peda로 까도 되겠지만 IDA를 사용해서 빠르게 분석합시다. 디컴파일러의 굉장함을 즐깁시다. 어라? 이상합니다. 뭔가 잘못된거같습니다. upx로 패킹되어있었네요 언팩해줍시다. 이제 코드가 제대로 디컴파일 되네요 strcpy에 bp걸고 봐주면 될것같네요 peda쓰러 리눅스로 갑시다. peda에서도 마찬가지로 언패킹을 안해주면 분석을 할수가 없습니다. upx도 참 짱짱하네요 언패킹된건 제대로 분석이 됩니다. 짜잔 클리어~ [pwnable.kr] collision 풀이 collision이라길래 무슨 collision일까 했더니 MD5 해쉬 충돌을 의미하나보네요 더보기 ssh에 접근해보니 바이너리와 소스와 플래그가 맞이해주네요 코드를 봅시다. main을 보니 전달된 인자의 갯수가 2개 미만일 경우는 argv[0]:실행경로를 출력해주고 종료합니다. 그리고 첫번째 인자의 길이가 20이 아니면 역시 종료합니다. 그리고 첫번째 인자를 check_password() 인자로 주고 나온 결과값이 0x21DD09EC이면 플래그를 출력해주네요 check_password()를 봤더니 인자로 준 argv[1]을 시작주소로 4바이트씩 값을 보아서 총 5개의 합을 반환해줍니다. 4바이트씩 5개를 보면 딱 20바이트로 argv[1]의 길이와도 일치하게 되네요 그럼 네개는 각각 113,626,82.. [pwnable.kr]fd 풀이 pwnable.kr의 첫번째 문제입니다. 접속해봅시다. 이쁜 로고가 맞이해주네요 더보기 flag파일이 있는데 권한이 부족해서 읽을 수가 없네요 fd실행파일을 이용해야합니다. fd파일의 소스를 보니 위와 같습니다. 보니까 strcmp로 buf와 "LETMEWIN"을 비교해서 같은 값을 가지면 flag파일을 띄어주네요 그럼 어떻게 buf에 값을 넣을 수 있을까요? ssize_t read (int fd, void *buf, size_t len) 출처: https://sonseungha.tistory.com/279 [Developer's Delight] [파일입출력] 2. read()로 파일 읽기 지난 번 파일을 열었다면, 이번엔 열려있는 파일을 읽어보겠습니다. 가장 대표적인 저수준 파일 입출력에서는 POSIX.. [pwnable.kr] bof 풀이 깔끔한 bof! 더보기 코드도 상당히 깔끔합니다! 0xdeadbeef가 func()에 전달되고 overflowme배열에 gets()로 입력을 받아 이걸로 key변수를 bof해서 0xcafebabe로 덮어씌워서 /bin/sh을 실행시키라는 것 같습니다. gdb로 대략적인 흐름을 봐줍시다. 사실 위에 코드를 보고 메모리 구조를 머리로 그려준뒤 차이가 있는지 정도만 봐주시면 됩니다. bp를 걸기전에 aslr에 맞추어서 한번 실행시켜서 주소를 갱신해줍시다. bp를 func에 걸어주고 실행해줍니다. 그 후 40행쯤 CMP에 bp를 걸고 스택을 한번 살펴봅시다. 입력으로는 a를 4개 주었습니다. cmp가 실행되는 ebp+0x8주소가 key의 주소공간으로 예상됩니다. 예상되로 key의 값인 deadbeef가 들어있네.. 메모리 구조와 스택 프레임 pwnable과 reversing을 하는데는 메모리 구조에 대한 숙지가 필요합니다! 스택을 탑쌓기 처럼 아래에서 위로 쌓아가는 구조로 표현하시는 분들도 계시지만 저는 일반적으로 가장 많이 쓰는 아래에서 위로 자라는 구조로 그렸습니다. 이때의 장점은 우리가 RET등을 변조하는 것을 이해할때 좀 더 직관적인것 같습니다! 이런 메모리구조는 pwnable의 핵심이고 해당 그림을 이해해놔야 나중에 RTL이나 ROP등의 기법을 이해할 수 있습니다. ============================================================================ 용어 정리 ====================================================================.. 이전 1 2 3 4 5 6 ··· 11 다음