wargame (35) 썸네일형 리스트형 [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가 들어있네.. [Reversing.kr]Music Player 풀이 이번문제는 MP3 Player의 1분 미리듣기 기능을 우회해서 풀로 들을 수 있도록 하는 문제입니다. 저번 Easy Keygen에 이어 상당히 리버싱의 정석적인 문제가 나왔네요! 재미있을 것 같습니다. 이번에도 별다른 정보는 없네요 비베로 짜여진 것 정도만 기억해둡시다. 더보기 IDA로 까보니까 함수도 별로 없고 내용 자체도 특별한 부분이 없는 것 같습니다. 같이 있던 DLL파일이 의심스럽네요 IDA로 동적 디버깅 하려고 했으나 상태가 안좋네요... 그냥 쓰던 Immunity로 일단 합시다. 일단 사용된 strings를 봐줍시다. 럭키하게도 시간이 표시되는 부분으로 추측되는 부분이 있습니다! 01:00이라는 1분 표시부분이 의심되니 저부분을 자세히 보도록 합시다. 저 언저리를 분석하고 싶어서 실행시켰더니.. [Reversing.kr] Easy Unpack 풀이 & MUP(매뉴얼 언패킹) 이번엔 Easy Unpack 풀이 입니다. 더보기 OEP를 찾으랍니다. OEP란 Original Entry Point 였던걸로 기억합니다. 이름으로 진작하자면 패킹되어있으니까 패킹전에 프로그램이 시작되던 위치를 찾으라는 소리입니다. 뭔가 패킹이 되어있을거 같은데 PEiD로는 딱히 탐지가 안되네요 Enrtrypoint로 검색되는 부분도 역시 찾아야하는 OEP는 아닙니다. 실행시켜보면 별다른 동작도 없습니다. IDA와 함께 든든한 친구가 되어주는 immunity DBG로 까보니 위와 같이 코드섹션이 변조되었음을 알려줍니다. https://bob3rdnewbie.tistory.com/91 Manual Unpack (매뉴얼 언팩) - ESP Trick 원본 링크 : http://www.websense.com/s.. [Revesing.kr]Easy Keygen 풀이 Easy Keygen 풀이입니다. 더보기 문제 파일을 받아서 열어보니 실행 파일과 텍스트 파일이 있습니다. 텍스트 파일을 보니 시리얼을 주고 이때 맞는 이름을 찾는것 같네요 문제명처럼 키젠을 만들라는 것 같습니다! 정석적인 리버싱 문제네요 Peid로 까보니까 뭐 특별히 이상한건 없는 일반 32비트 실행파일입니다. 실행해보니까 이름과 시리얼을 입력받고 별다른 동작없이 종료합니다. 텍스트 파일 내용을 생각해보면 시리얼에 맞는 이름을 넣어주면 뭔가 동작을 할것같네요 만능인 리버서의 친구 IDA로 까줍니다. main 함수를 보니 바로 aCorrect랑 aWrong이라는게 눈에 들어오네요 v9 변수와 v13으로 비교해서 분기를 가르고 있는게 보입니다. 위쪽에서는 v13을 손보는 알고리즘이 보이고 그위에 29라인을.. [LOS] #5 wolfman 풀이 이번엔 별다른건 없고 공백을 우회하면 되는 것 같네요 더보기 특별히 할만한건 없는 것 같고 or 나 and같은 걸 || 나 && 로 표현해서 공백을 없애줍시다. 이전 1 2 3 4 5 다음 목록 더보기