포너블(10)
-
DSFSB
"Double Stage Format String Bug"는 프로그래밍에서 발생하는 보안 취약점 중 하나이다. 포맷 문자열 버그는 사용자 입력을 제대로 검증하지 않고 포맷 문자열 함수에 직접 전달할 때 발생하는 취약점이다. 이 취약점을 통해 공격자는 스택에 있는 데이터를 읽거나 쓸 수 있다. 따라서 메모리 내용의 유출이나 임의의 코드 실행과 같은 공격이 가능하다. "Double Stage Format String Bug"는 포맷 문자열 버그의 한 변형이다. 공격자가 한 번의 공격만으로는 메모리 주소를 파악하거나 조작하기 어려운 경우, 두 단계의 공격을 통해 원하는 정보나 조작을 달성한다. 첫 번째 단계는 메모리에서 필요한 정보를 추출하는 데 사용되며, 두 번째 단계는 그 정보를 바탕으로 실제 공격을 수행..
2023.11.05 -
pwnable.kr simplelogin
다음의 코드를 보면 30만큼을 입력받습니다. 그리고 base64로 디코드하게 됩니다. 여기서 알아할 점은 입력을 진행할 때는 base64로 암호화한 상태로 진행해야됩니다! 입력을 받은 이후에 memset을 하게 되는데 0xc만큼 하게됩니다. 0xc=12입니다. 따라서 12만큼의 길이를 입력하여 보겠습니다. 그리고 memcpy에서 취약점이 발생합니다. lob를 클리어하신 분이라면 febp 문제를 알 것입니다. 그 문제의 풀이와 비슷하니 참고해서 풀이를 진행하는 것도 나쁘지 않은 방법인 것 같네요. 리눅스 환경에서 gdb로 돌려보았습니다. ubuntu@ubuntu:~/Desktop$ gdb -q login Reading symbols from login...(no debugging symbols found)..
2023.10.22 -
64bit format string bug 문제 풀이
오늘은 sschall에 있는beginner_fsb문제를 풀어보고자 한다. beginner_fsb는 64비트로 컴파일된 elf파일이다. 먼저 이 바이너리의 보호기법을 알아보겠다. 보호기법을 확인해보면 parial relro와 카나리, nx bit가 켜져 있는 것을 확인할 수 있다. 하지만 해당 보호기법들은 포맷스트링 버그와 연관되어 있지 않기 때문에 보호기법을 우회하거나 할 필요는 없다. 소스 코드를 살펴보면, 먼저 메인함수 시작점에서 input 0x20만큼의 데이터가 \0으로 초기화된다. 그 다음 우리가 덮어씌워야될 can_you_overwrite_me 변수가 나온다. 해당 변수를 변경하기위해서 포맷스트링 버그가 필요하다. read함수에서 0x1f만큼 데이터를 입력받음으로써 오버플로 취약점이 발생하고 다..
2023.10.08 -
64bit format string bug
저번 시간에 이어 이번엔 64bit format string bug에 대해 알아보고자 한다. 지난 시간에 설명한 32bit format string bug와는 조금 다른 구성을 가진다. 32비트에서는 주소를 앞에 쓰는 방식으로 포맷스트링 버그를 유발했다면 이번엔 변조하고자 하는 주소를 뒤에 써줘야된다. 이 이유를 다음 예제를 통해서 설명하고자 한다. 먼저 지난 번과 같은 코드인지 64비트로 컴파일 했다는 점에서 차이가 존재한다. 글로벌 변수를 0x12345678로 맞춰줘야지 correct문자열이 뜬다. 메모리 상에서 보면 0x7ffc1eae8560부터 우리가 덮어쓸 주소가 들어가고 offset이 6이니 우리가 덮어 쓸 주소의 offset은 9가 된다. 따라서 2바이트 씩 나눠서 입력을 해준다. 4660은..
2023.10.01 -
format string bug 32bit
오늘은 포맷스트링 버그에 대해 이야기하고 한다. 포맷 스트링 버그(Format String bug,이하 FSB)란 포맷팅을 수행하는 printf() 같은 특정한 C 함수들에서 검사되지 않는 입력 값을 포맷 스트링 파라미터로 사용하는 것으로부터 나온다. 이를 설명하는 예제 코드를 준비 했다. 해당 코드는 printf 함수에서 파라미터를 검색하지 않은 상태에서 입력 값을 받은 뒤 그 입력 값들에 의해서 메모리의 값이 leak되는 현상이 존재한다. 일반 문자를 입력했을 때는 문제가 되지 않지만 %p, %x를 통해 메모리에 있는 값들을 leak할 수 있다. 예를 들면 위 사진과 같다. 일반 문자열을 입력했을 때는 문제가 되지 않지만 서식 문자를 집어 넣는 경우, 메모리가 가리키고 있는 값을 노출시킬 수 있다. ..
2023.09.30 -
Dreamhack - oneshot
오늘은 oneshot에 대해 알아보고자 한다. 그전에 어떤 보호기법이 있는 지 살펴보겠다. 먼저 Partial RELRO가 걸려져 있고 카나리 보호기법은 해제되어 있으면 nx비트가 enable됨에 따라 쉘코드를 스택 영역에 실행할 수 없으며, PIE가 걸려져 있음으로 바이너리 주소가 랜덤하게 바뀌기 때문에 libc_Base주소를 구해야 한다. 다음 코드를 살펴보겠다. stdout주소를 출력하는 것을 볼 수 있다. 그 다음 msg의 사이즈는 16인데 46만큼 입력받음으로써 버퍼오버플로 취약점이 발생하게 된다. 이후 check 값에 대한 검증이 이루어지고 msg를 msg의 사이즈만큼 0으로 초기화 시킨다. 먼저 objdump -D 옵션을 활용하여 stdout의 이름을 확인하였다. 이름은 IO_2_1_stdo..
2023.09.24