본문 바로가기

wargame

[메모리 보호기법]PIE 출처 http://lazenca.net/display/TEC/02.TechNote https://bpsecblog.wordpress.com/2016/06/10/memory_protect_linux_4/ PIE PIE (Position Independent Executable) 위치 독립 코드로 이루어진 실행 가능한 바이너리 (위치 독립 코드 : 실행할 때마다 매핑되는 주소가 어디든지에 상관없이 실행되는 파일) → 바이너리의 주소를 랜덤화하여 바이너리의 특정 주소의 값을 수정하는 것과 같은 공격을 방어한다. vi PIE.c ./NoPIE ./PIE NoPIE를 실행하면 주소가 같다. PIE를 실행하면 주소가 달라진다. PIE가 적용되지 않은 바이너리의 경우 코드 영역의 값이 고정된 주소값이다. (print..
[메모리 보호기법]RELRO 출처 http://lazenca.net/display/TEC/02.TechNote https://bpsecblog.wordpress.com/2016/05/18/memory_protect_linux_2/ 이전에 알아야 할 것 PLT (Procedure Linkage Table) 외부 프로시저를 연결해주는 테이블. PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용할 수 있다. GOT (Global Offset Table) PLT가 참조하는 테이블. 프로시저들의 주소가 들어있다. "함수를 호출하면 (PLT를 호출하면) GOT로 점프하는데 GOT에는 함수의 실제 주소가 쓰여있다. 첫 번째 호출이라면 GOT는 함수의 주소를 가지고 있지 않고 어떤 과정을 거쳐 주소를 알아낸다. 두 번째 호출부터는 첫 번..
[메모리 보호기법]Canaries 출처 http://lazenca.net/display/TEC/02.TechNote https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ Canaries Canaries SFP와 return address를 저장할 때, 이 정보들이 공격자에 의해 덮어씌워지는 것으로부터 보호하기 위해 스택상의 변수들의 공간과 SFP 사이에 넣는 특정한 값 버퍼 오버 플로우가 발생하면 Canary 값이 손상되어 Canaries 데이터의 검증에 실패하여, 오버 플로에 대한 경고가 출력되고, 손상된 데이터를 무효화 처리된다. Terminator canaries Canary의 값을 문자열의 끝을 나타내는 문자(NULL 0x00, CR 0x0d, LF 0x0a, EO..
[메모리 보호기법]ASLR 출처 http://lazenca.net/display/TEC/02.TechNote https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ ASLR ASLR(address Space Layout Randomization) 메모리 손상 취약점 공격을 방지 하기 위한 기술 스택, 힙, 라이브러리 등의 주소를 랜덤한 영역에 배치하여, 공격에 필요한 target address를 예측하기 어렵게 만든다. 프로그램이 실행될 때마다 각 주소들이 변경된다. Return-to-libc 공격을 하기 위해서는 공유 라이브러리에서 사용하는 함수의 주소를 알아야 한다. ASLR의 적용으로 프로그램이 호출될 때마다 스택, 힙, 라이브러리 영역의 주소가 변경되면 공격이..
[메모리 보호기법]NX 출처 http://lazenca.net/display/TEC/02.TechNote https://bpsecblog.wordpress.com/2016/05/16/memory_protect_linux_1/ NX NX Bit(Never, eXecute bit) 프로세스 명령어나 코드 또는 데이터 저장을 위한 메모리 영역을 따로 분리하는 CPU 기술 NX 특성으로 지정된 모든 메모리 구역은 데이터 저장을 위해서만 사용된다. DEB(Data Execution Prevention) 마이크로소프트 윈도우 운영 체제에 포함된 보안 기능이며, 악의적인 코드가 실행되는 것을 방지하기 위해 메모리를 추가로 확인하는 하드웨어 및 소프트웨어 기술. 결과적으로 데이터 영역에서 코드가 실행되는 것을 막는다. 예시 vi DEP.c ..
[BOF]simpleBOF simpleBOF 문제 아이다. v5를 0xCAFEBABE이면 쉘을 딸 수 있다. scanf를 이용해 v4에서 v5까지 덮자. payload는 아무 값 0x3c + 0xCAFEBABE(v5에 덮을 값)으로 구성한다. 문제 해결
[BOF]justBOF justBOF 한 번 어셈블리 코드를 살펴보자. 귀찮으니 아이다로 확인해보자. retaddr과 savedRET이 다르면 win() 함수가 쉘을 실행한다. s를 이용해서 retaddr을 덮자. 아무 값이나 0x127 이상으로 stdin으로 넣자. ls 명령어를 통해 쉘을 따냈음을 확인했다. exploit.py를 만들어 문제를 풀어보자. 해결했다.
[hackCTF]pwnable x64 Buffer Overflow x64 Buffer Overflow 5번 문제 이전과 같이 다운로드 받고 실행 권한을 추가한다. 아이다를 통해 살펴보자. main함수는 다음과 같다. 별건 없다. callMeMaybe 함수를 살펴보자. execve 함수를 실행한다. ret이전의 메모리를 아무 값이나 채우고 ret을 callMeMaybe 함수의 주소로 채우면 될 거 같다. callMeMaybe 주소를 구했다. exploit.py를 작성했다. payload는 0x110+0x8(sfp)를 아무 값이나 채우고 callMeMaybe 주소 값으로 ret을 채운다. 실행시킨다. 원격으로 실행되도록 수정하자. 문제 해결 +) 참고 nx가 enable이어서 쉘코드가 실행이 안되는 것은 ret을 덮어서 함수를 실행시키는 것과 연관성이 없다.