본문 바로가기

Hacking/write-up

(HackCT)yes_or_no yes_or_no ida 코드 확인 실행결과 위와 같이 값의 계산이 필요하면 동적디버깅으로 편하게 원하는 값을 얻을 수 있습니다. 두번째 사진을 보면 gets함수로 bof를 일으킬 수 있으므로 if문 조건을 만족시켜야겠다는 생각이 듭니다. cmp 비교 구문에서 eax 값이 저희가 원하는 값입니다 0x960000을 10진수로 바꾸어 입력해보면 (16진수로 입력하면 x 때문에 atoi함수 결과가 0이 되겠죠) 이제 bof를 공격을 위한 gets함수까지 접근했네요. 이제 shell을 실행시킬 방법을 생각해봅니다. 코드 하단에 이 코드가 힌트 같습니다. do_system+1094를 찾아보니 rsp의 값이 16바이트로 채워져 있지 않으면 do_system+1094에 존재하는 명령어에서 오류가 나게 됩니다. 쉽게 .. 더보기
(HackCTF)bof_pie bof_pie 보호기법을 확인해보니 당연히 문제 이름과 연관이 있으려면 PIE보호기법이 걸려 있으니 이에 맞는 우회 방법을 사용합시다!. 먼저 PIE에 대해 간략히 집고 넘어 갑시다 PIE(Position Independent Executable): 위치 독립 코드로 이루어진 실행파일 == 바이너리 주소를 랜덤화 stack, heap, library 뿐만 아니라, executable 의 base address 까지 매번 바꿔지는 상대주소로 심볼 주소가 설정되어있다. 위 개념과 같이 PIE 보호기법이 걸리게 되면 저희가 사용해야할 j0n9hyun 함수의 주소는 실행할 때마다 랜덤으로 변할 것입니다. 상대주소로 주소값을 가지게 되므로 실행했을 때 주어지는 welcome함수의 주소값을 이용해 j0n9hyun .. 더보기
(HackCTF)offset offset flag 출력해주는 함수 main가봅시다. select_func함수를 살펴보니 v3는 two함수가 되어있는데 strncpy에서 src문자열을 dest에 복사해주네요. src 문자열에 one이 저장되어 있을 경우 dest 문자열도 one이 되고 그럼 if문이 실행되어서 v3는 one함수가 되네요. one함수와 two함수가 각각 무엇인지 살펴봅시다. 음.. 일단 실행 결과를 봐봅시다 이제 풀이과정 시작합니다. 앞서 살펴본 것에 의하면 select_func함수의 중요도가 높아보이기에 좀 째려본 결론을 풀어보겠습니다. 변수 src는 main에서 gets함수로 입력받은 아이입니다. dest와 v3 사이 offset+print_flag 함수 주소를 넣어준다면 strncpy에 의해 v3에 printf_f.. 더보기
(HackCTF)basic_bof2 basic_bof2 v5 = (void (*)(void))sup; 이 코드는 sup함수의 주소값을 v5에 준것이다. 즉, sup()=v5() 라는 말씀 그럼 sup()함수가 무얼 하는지 봅시다 puts함수는 반환 값은 성공 시에 음수가 아닌 값을 반환해요. 만약 실패하면 -1인 EOF를 반환합니다. 좀 더 찾아보니 shell이라는 함수가 눈에 띄이네요 v5()를 shell()로 하기위해 v5위치에 shell함수 시작 주소 넣어줍시다용 -pwntools 코드 더보기