시스템해킹 5

Win-AFL 퍼저 빌드과정

#퍼징 #AFL-FUZZ #Win-AFL 리눅스에서는 AFL-FUZZ 를 사용했듯이 윈도우 환경에서도 Win-AFL 을 통해 퍼징을 진행할 수 있다. GUI 바이너리에도 가능하고, 커스텀해서 퍼징도 가능한듯..? 하다. 무엇보다도 단순 AFL-FUZZ 보다 확장된 기능이 있는데, Syzygy 를 통한 정적 명령어 삽입, DynamoRIO 를 이용한 동적분석 시 명령어 삽입, 하드웨어 트레이싱 등등... 이 있다고 한다. 일단은 빌드 부터 해보기로! 매우 쉽다. 1. CMAKE 설치 Win-AFL 을 빌드하는데에는 CMAKE 가 필요하다. DynamoRIO 기능을 cmake 를 통해 넣어주는 부분에서 필요한 것 같다. https://cmake.org/download/ 위 링크에 가서 자기한테 맞는 걸로 다..

[Pwnable.xyz] note

note #got_overwrite #BOF 바로 들어가보자. 파일은 일반 ELF 파일이다. 별다른 점은 없다. main 함수를 보면 메뉴번호를 고를 때 read_int32 함수를 통해 번호를 전달받는다. 이는 얼마안가서 취약점을 촉발시키는 매개가 되는데, read_int32 함수를 알아보자. 이 함수를 보자마자 눈여겨봐야겠다고 느낀게 문자열 형태의 숫자 를 atoi로 정수 로 바꿔주고 있었기에 얼마나 큰 수를 입력해도 검증과정없이 정수로 바꿔주는 과정이 조금 이상해보였다. 뭐 결론적으론... 좋은 발견이었지만. 그리고 1번 메뉴를 선택하면 edit_note 함수로 들어오는데 모습은 이렇다. 이 부분에서 read_int32 함수의 좋은 기능을 활용할 수 있는데, 일단 s 는 전역배열로 선언되어있는 32바..

[Pwnable.xyz] UAF

UAF #pwnable.xyz #not UAF #overwrite #heap 배점에 비해 쉬웠던 문제. 핵심만 언급하려한다. 결론적으로 본 문제는 UAF를 이용하지 않아도 된다. UAF로 풀이하는 루트도 있을런지는 모르겠지만 필자는 그냥 overwrite를 이용해서 문제를 풀었다. 바이너리의 기능은 총 5가지이다. 게임을 시작하거나, 저장하거나, 지우거나, 게임이름을 출력하거나, 게임 이름을 수정하거나... 여기서 게임은 단순히 두 숫자를 받아서 xor한 값을 특정 heap영역에 저장하는 행동을 한다. 이 문제의 목표는 win 함수를 실행 시키는 것 같다. 우선 IDA로 보면 바이너리 실행직후, initialize_game 함수를 통해 특정 heap영역과 data영역을 구성한다. 구조는 대략 이러하다. ..

[Pwnable.xyz] GrownUp

GrownUp #pwnable.xyz #baby_fsb 오랜만에 pwnable.xyz 를 하였다. 몸풀기로 낮은 점수의 GrownUp 문제를 풀어보았다. 플래그는 바이너리에 내장되어있다고 한다. 바이너리 문자열을 검색해보면 진짜로 플래그 (물론 페이크 플래그)가 내장되어있다. 0x601080 이 주소를 기억하라. PIE가 적용되어있지 않아서 이 data영역의 주소는 서버에서도 동일하게 매핑되어있을 것이다. 바이너리 실행결과는 이렇다. 봐야할 주요부분은 main함수이다. 처음에는 setup 함수가 실행된다. setup 함수는 ... data영역의 0x601160 부분에 %s\n 문자열을 넣는다. 후에 0x601160은 main함수의 printf의 서식문자로 이용된다. 그리고 y or N에 대한 응답을 re..

RTL기법이란? (Return To Library)

RTL 기법. 프로그램은 printf나 scanf 등등.. 의 함수들을 프로그램에 적용 된 라이브러리(Library)파일에서 갖고 온다.여기서 함수의 plt와 got를 이해해야한다. PLT는 간단히 말하면,got를 비롯한 여러가지의 함수 프로시져를 모아놓은 테이블. PLT안에 자리 잡은 GOT를 간단히 말하자면,함수의 본래 실제주소를 담고있는 테이블. 함수가 호출되면 PLT를 거쳐 GOT를 거쳐 결국엔 함수의 실제주소에 도달하게 된다는 것이다. (자세한 도달 과정은 따로 더 공부하기 !)이 과정에서 실제주소에 영향을 미치는 라이브러리 파일을 이용할 수 밖에 없는데 그것을 이용한 공격기법이다.예시를 들면 라이브러리에 있는 system함수를 ret에 덮어씌워서(복귀주소에 복귀할 곳을 system함수로 바꿔주..

반응형