네 이 영상에서는 첫 번째 힙랩을 살펴볼 겁니다 2부 도전 바이너리입니다 단일 null 바이트 오버플로에
대해 배운 모든 것을 테스트할 수 있습니다
도전-포이즌_null_bte directory로 탐색하는 것으로 시작합니다 네 알겠습니다 이 바이너리의 보안 상태는
이미 살펴봤지만 한 번 더 보는 것도 괜찮겠지 포이즌_null
바이트 바이너리와 대조해 봐
네 보호 기능은 다 갖췄네요 렐로 스택과 카나리아 NX 포지션 인디펜던스도요 아까 영상에서
봤듯이 글립코 버전 2와 링크돼 있어요 25
2 25는 pre-tcache와 pre-sache입니다 prev_size 확인
안녕하세요 목표물 글립코 버전에 어떤 취약점이 있는지 궁금하다면 '히랩랩
PDF'의 '조정' 부분을 확인하세요
명령줄에서 실행해 이 바이너리가 어떻게 작동하는지 알아보죠
네 번호가 적힌 메뉴가 바로 나왔고 공짜로 유출되는 것도 없는 것 같습니다
네 옵션 1은 최대 14개의 청크를 요청하는데 1,000바이트 이하의 사용자 데이터와
작은 청크로 제한됩니다 ? 네
옵션 2는 인덱스에 따라 편집합니다 사용자 데이터에 쓸 수 있다는 뜻이죠
옵션 3은 인덱스에 의해 자유롭게 덩어리를 나누며 옵션 4는 데이터를 읽게 합니다
옵션 5는 프로그램을 중단합니다
하이랩랩 1부의 중위 트레이스 기억나?
이 바이너가 메모리 요청을 할 때 무슨 일이 일어나는지 알아보죠 e 옵션을 써서 'alloc'으로
끝나는 함수 이름을 분리해요
네 옵션 1로 메모리를 요청하면 ltr레이스는
프로그램이 이런 요청을 하기 위해 캘록() 기능을 사용한다는 걸 밝힙니다 ?????
1부에서 캘록은 말록을 감싸는 포장일 뿐임을 배웠죠 할당 전에 힙 메모리를 0으로
설정합니다
네 네 ,
여러분 1부를 완료한 지 좀 되셨다면 이 도전이 어떤 건지 다시 알려드리죠
버그를 찾는 게 목표일 겁니다 그리고 지금까지 배운 걸 활용해서 이 바이너리에서
셸을 제거하세요
보통 먼저 해야 할 일은 libc를 유출하는 거예요 필요하다면 그 뒤를 따르고요
여러분 어렵다고 해도 걱정하지 마세요 이런 도전은 난이도가 높기 때문에 개발
개발이 처음이라면 몇 시간, 며칠, 몇 주가 걸릴 수도 있습니다
네 저는 주로 마지막에 반전을 넣어서 노련한 개발자들을 잡아내곤 하니까 그것도 주의해
주세요
이 영상의 나머지 부분은 점진적으로 힌트와 지침을 제공해서 효과적인 착취를 얻어낼
겁니다
좋습니다 이 시점에서 일시 정지 화면이 뜨면 비디오를 정지하고 도전 바이너리에
익숙해질 기회를 이용하세요 물론 버그를 찾으세요 ,
네 자신감이 있다면 계속 개발을 시도할 수 있습니다 영상을 복구하지
않고도 최대한 진전을 이루길 바랍니다
네 하지만 정말 막혔거나 힌트가 필요하다면 다시 영상을 보세요 이번 과제에
대해 알려드릴게요
네 이번 게임에서 버그가 뭔지 이미 짐작하셨겠죠 결국 이 과정의 독성인
널 섹션에 있으니까요
어쨌든 놓친 건 없는지 확인해야죠
네 바이너리를 GDB에 로딩할게요 실행하고
다른 크기의
덩어리를 요청합니다 , 시작하세요
네 GDB를 분석하고 더미를 조사하면
제가 요청한 덩어리가 나옵니다 크기는 0x20 0x110 0x90과 0x20입니다
이 과정에서 다룬 각 버그 카테고리를 확인해 보죠 계속하겠습니다 메뉴 프린트 리턴을
누르고 버그가 두 번 없는 걸 확인합니다
더블 프리 없어요
네 그건 그렇고 이 시나리오에서 전 이 오류 메시지를 갖고 있어요 제가 코드를 작성했으니까요
하지만 프로덕션 바이너가 오류를 잡았다고 주장한다고 반드시 올바르게 처리했다는 의미는
아닙니다 , 그 결과
항상 확인하세요
네 넘어가죠 좋아요, '읽기'와 '편집' 옵션을 사용해서 버그가 읽고
쓰거나 하는지 확인해 볼게요
사용 후 버그는 안 됩니다 넘칩니다 그럼 넘쳐흐르죠 그럼 첫 0x20 크기의 사용자
데이터에 24바이트 이상의 가비지를 적겠습니다
GDB를 이용해 '비스'로 짐을 검사합니다
그렇군요 당연하게도 null 프로그램은 잘못 입력된 입력값을 종료시켜서 하나의 바이트 null이 넘쳐나게 된 겁니다
?
이게 우리 벌레예요
이제 여러분에게 달려 있습니다 여러분은 우리가 다뤘던 단일 바이트 오버플로 기술 중 하나를 활용할 수
있습니다
예를 들어 여기에 prev_size 필드를 위조해서 0x100 덩어리를 빼낸다면 에인헤랴르 가문이 공격당했을
가능성이 있어요
명심하세요 에인헤랴르 집은 압력을 가하면 됩니다 가짜도 그렇지만
합법적인 공짜도 있으니까요
1부에서 배웠던 sbrk_base 트릭을 이용해서 디폴트 힙 메모리를 버리면 이 바이너리에 대한
Google Poison Null 기술을 활용할 수 있습니다
네 0x110이 우리가 가장 작은 바이트만 제거하기 전에 사라졌다면 남은 공간에 덩어리
몇 개를 요청할 수 있고 0x90의 프리v_사이즈와 프리v_인퓨즈 메타데이터가 업데이트되지
않겠죠
어느 쪽이든 이 2진법으로 껍데기를 얻을 수 있다면 선택은 당신 몫입니다
기억나게 해드리고 싶다면 이 부분에 있는 이전 비디오들을 다시 보시기
바랍니다
네 말록을 시험하는 거 잊지 마세요 취약점 공격의 시제품을
원한다면 libc 주소를 유출하는 게 우선이야 그럼 시스템 같은
코드에 접근할 수 있어 말록 훅 같은 납치 지점의 주소도 알 수 있지
네 물론 이 디렉토리엔 pwntools 템플릿 스크립트도 있어요 시작을 돕는 모든 도우미
함수들과 함께요
다시 비디오를 정지시키고 단일 null 오버플로로 어떤 피해를 줄 수 있는지 보겠습니다 막혔거나
힌트가 필요하다면 여기로 돌아오세요
네 Pwntools 템플릿 스크립트에 코드를 추가했습니다 지금 화면에서 보실 수 있죠
이해하셨다면 저희 강의 자료에서 복사본을 받아 보세요 템플릿
2번이라고 적혀 있어요
네 이번에는 솔루션 스크립트에서 보셨을 수도 있는 이름 규칙을 이용했습니다
네 보통 라벨을 붙이는데 할당된 순서대로 붙입니다 a, b c 등등
여기선 그 목적에 따라 이름을 붙이죠 '넘친다',
'피해자' '합집하다' '가드'
네 이름 때문에 다른 걸 고를 필요는 없죠 어차피
착취에는 영향이 없으니까요
오늘은 이걸 쓸까 해요
스크립트에요. 제가 이 스크립트에 Google Poison Null 공격을 설정해
놓은 걸 보셨을 거예요. 단일 Null 오버플로를 사용해서 '피해자' 덩어리의 크기 값을 줄이고 있어요
여러분 네 그 경로에 대한 해결책 스크립트도 있으니 두
기법이 만나는 지점을 알려 드리겠습니다 ,
네 '피해자' 덩어리를 꺼내기 전에 가짜 메타데이터를 준비하는 주석 달린 줄을 추가했죠 , 크기를 조절하기
위해서요 prev_size check
물론 이 도전과 연관된 글립벡의 버전은 2입니다 네 25 그 수표는 없지만 글립벡의
후기 버전에서도 이
기술이 유용할 수 있다는 걸 확실히 해 두기 위해 보관해 뒀죠
그리고 다음 줄로 '피해자' 덩어리가 나오고 그 뒤엔 '넘친' 부분이 쓰레기 데이터로 가득 차요 그러면
하나의 널 바이트가 넘쳐나면서 희생자 크기의 바이트에서 덜 중요한 부분이 없어지죠
안 보여요
네 제 대본에서는 '피해자' 덩어리가 0x210 크기라서 물이 넘치면 0x200
덩어리로 남아요
구글 포이즌 널 바이트 비디오에서 말씀드렸듯이 안전하게 다양한 크기를 선택할 수 있습니다 '피해자'
척을 위해서요
네 왜 0x90을 골랐는지 궁금하실 겁니다 그냥 0x20 덩어리로 만들
수도 있었는데요 이유는 나중에 알게 될 겁니다
네 이 템플릿에 남은 선들은 구글 포이즌 널 바이트 기술을 완성합니다 앞서
맬록을 테스트한 것처럼요
네 네 '피해자'가 남긴 공간에 덩어리 2개를 요청해요 '피해자 A'와 '피해자 B'로 표시돼 있죠
네 그럼 피해자_A가 풀리고 이어서 통합된 덩어리가 풀려요 피해자_b보다 피해자_A와
거꾸로 통합돼 덩어리가 겹쳐지죠 ?
그럼 여기 보이는 것과 비슷한 구조가 남아요
네 네 여전히 할당돼 있어요 읽고 쓸 수 있죠 사용자 데이터로요
겹치는 피해자_B는 무료 0x2a0 크기의 덩어리로 피해자_A가 '합성' 덩어리와 합쳐집니다
"합성이" "합성"
GDB 옵션으로 스크립트를 실행하면
힙을 분석할 수 있습니다.
0x2a0 크기의 덩어리가 보이죠
네 피해자_비 청크의 사용자 데이터는 여기서 시작해요 말씀드렸듯이 읽고 쓸 수 있죠
? 네
두 바이트의 독성 기술이 이 단계에서 수렴됩니다 자, 그럼 에인헤랴르 기법으로
덩어리를 겹쳐 놓으면 나머지는 나와 아주 비슷할 거예요
여기까지 오느라 고생을 많이 하셨다면 이 견본을 토대로 앞으로 더 많이 활용해
보세요
네 말로크 레벨에서는 깊이 파고들지 않았습니다 왜냐하면 이번 시간에는 이전의 영상에서
보았던 구글 포이즌 널 기술을 가르쳐드릴
수 없기 때문입니다
오히려 그걸 이용할 기회를 주는 거죠
네 독극물이나 널 테크닉에 대해 기억이 안 난다면 다음 단계로 넘어가기 전에 기억해두세요
네 이제 여러 자료를 겹치게 했으니 libc 기밀을 위조할 차례입니다 유출이 많을 수도 있어요 이용
가치가 있다고 생각한다면요 ?
네 영감이 필요하면 히랩에서 1바이트 챌린지를 개발한 1부를
보세요
다시 비디오를 멈추고 어떻게 할지 생각해 보세요
천천히 생각해 보고 스스로 얼마나 발전할 수 있는지 봐요 좋아요 리bc를 유출하기 힘들면 다시 와서 영상을
다시 틀어요 다음 단계를 설명해 줄게요 , 알았죠?
스크립트에 몇 줄 더 추가해서 libc 주소를 유출했어요 강의 자료에서 다운로드받을
수 있어요 템플릿 넘버 3...
맞습니다. 템플릿2는 하나의 널바리 플로를 이용해서 구글 포이즌 널바리 공격을
했습니다.
libc 주소를 유출하려고
0x100 사이즈만 요청했어요
그 요청은 the0x2a0 청크의 재설정으로 서비스되어 피해자_b 청크의
사용자 데이터에 메타데이터가 기록되었습니다
한 바이트 챌린지를 할 때 libc를 유출할 때 썼던 기술이에요
보세요, 피해자_b 청크를 통해 맬록 메타데이터를 유출하기 전에 '오버플로' 청크를 풀어놨죠
그래서 '오버플로' 청크를 작은 게 아니라 0x90으로 설정했어요
네 이걸 풀면 무체중 빈에 연결돼요 그 후에 겹쳐진 피해자_b는 fd-가
메인 경기장의 무체중 빈을 가리키고 bk는 '오버 플로우'를 가리키죠 "오버
플로우"
한 번에 리bc와 돈을 유출할 수 있다는 뜻이죠
이 대본의 마지막 줄이 피해자_b 청크의 사용자 데이터를 읽으면 libc와 힙 주소를 유출할
수 있어요 '() 도우미 기능'
읽기 읽어보세요 도움은 두 개의 인수를 가져요 읽을 덩어리의 인덱스와 반환할
데이터의 양이죠
네 기본적으로 챌린지 바이너리의 메뉴를 읽으면 사용자 데이터 전체가 나옵니다 두
번째 인수를 사용해 필요한 정보를 분리할 수 있죠 ?
이 선은 읽기만 해요 () 도우미 함수로 피해자_b 청크의 사용자 데이터를 처음 16바이트
잡아냅니다 현재 무체포트빈 fd와 bk 포인터스가 있죠
다음 줄은 첫 8바이트의 데이터를 사용합니다 메인 경기장의 무체계 주소로 libc
부하 주소를 계산하죠
폰툴의 짐 풀기 () 기능은 작은 엔드리아 데이터를 정수로 변환합니다
다음 줄입니다 힙 시작 주소를 캡처합니다 유출된 데이터의 마지막 8바이트 그리고 마지막
두 줄입니다 이 정보를 단말기에 기록합니다
네 네 안 돼요!
네 네 흐트러진 상태입니다 이제 정리가 안
됐어요
그 후엔 0x100을 할당받죠 이게 두 번째 피해자_A의 화신이에요
또 다른 덩어리가 있어요
네 네 "넘쳐 나온 부분'을 가리키고요
네 여전히 할당된 피해자_b 청크도 겹쳐요 fd와 bk 포인터를 유출할 때 그걸
쓰죠
알트 alt+를 프로그램 창에 하면 스크립트가 계산을 한 걸 볼 수 있습니다 libc
load 주소와 힙 시작 주소를 단말기에 기록한 걸 알 수 있죠
네 GDB 창으로 돌아가 힙 시작 주소가 일치하는지 확인하고 'vmmap-
libc' 커맨드를 발령해 libc 시작 주소가 일치하는지도 확인합니다 ,
네 그래서 아까 선택하신 게 구글 포이즌 Null 기술인 에인헤랴르 집이라면
단일 바이트 오버플로를 이용해 libc와 디폴트 힙을 유출했습니다
이제 남은 건 집행의 흐름을 장악하는 겁니다
네 마지막 단계에 대한 아이디어를 생각해
보고 괜찮은 게 있으면 시도해 보세요
네 제가 강의 리소스에서 사용한 스크립트 템플릿은 다운로드 받으시면 되고
테스팅베드와 PDF가 있으니 참고하세요 다시 비디오를 멈추고 최대한 집행의
흐름을 가로채요
힌트를 더 원하시면 여기로 돌아와서 다시 켜세요
하지만 명심하세요 마지막 단계에는 보통 장애물이 더 있습니다
그러니 시간을 들여 창의력을 발휘해 보세요
좋아요 그럼 원시적인 구성을 겹쳐 써서 실행의 흐름을 장악해 보죠
1부에서 한 바이트 챌린지 바이너리의 셸을 투하할 때 오렌지 하우스 기법을 사용했죠 오렌지 하우스
기법
하지만 쉬운 길이 없어서 그렇게 한 거예요
기억하시죠? 1바이트 프로그램 때문에 0x70 크기의 덩어리를 요청할 수 없어서 아까 배운
잘못된 위치 조정 트릭으로는 말록 갈고리를 속일 수 없었습니다 안 돼요!
네 네 그래서 몇 가지 라인을 추가해서 말록 갈고리
위로 패스트빈 덩크를 할 수 있게 했죠 ,
여러분 제 취약점 자료를 원하신다면 여기 자료에서 한 부 받으세요 템플릿 4번이라고
적혀 있어요
네 명심하세요 코드 실행을 다른 방식으로 하고 싶다면 하우스 오브
오렌지처럼요 지금 다룰 글립코에는 리바이오 윤활성 경화 패치가 있어서 파일 착취가
좀 더 단단합니다 ,
좋아요, 제가 추가한 첫 줄은 "넘친" 부분을 할당해줘요 '넘친 물' 부분을
풀어줘서 libc를 유출하는 동시에 더미를 유출할 수 있다면 이 부분은
필요 없죠
맞아요 사실 이번 일에는 정보가 새지 않을 테니
둘 다 제거해도 돼요
다음 줄 다음 줄에 0x70 크기의 숫자를 요청하면 다시 피해자_b를 재분배하는
거죠 libc 주소를 유출한 곳요 , 바로 거기서요
'빠르게'라고 라벨을 붙인 후 바로 풀어줍니다
네 이제 피해자_b에 0x70 청크가 무료로 겹쳐져서
패스트빈 메타데이터를 조작할 수 있어요
패스트빈 둡 1부 취득 공략에서 방금 빌려왔어요 이 0x70 fd를
메일로 쓰고 0x23 주소를 입력하죠
0x23이 마법의 숫자처럼 느껴진다면 패스트빈 둡의 원단을 다시 찾아보세요
네 제 스크립트를 GDB와 NOASLR 옵션과 함께
실행하면 힙을 살펴볼 수 있습니다
0x70 덩어리가 피해자_B와 겹쳐져 있죠 ?
패스트빈을 살펴보니 0x70
패스트빈 메타데이터가 손상됐더군요
네 이 통에 넣은 가짜 덩어리에 네 단어를 넣으면
0x7f 크기의 자기장이 나오고
말록 바늘과 겹쳐요
네 이 시점에서 0x70 크기 두 개를 요청할 수 있고 두 번째 요청으로 이 가짜 덩어리를 할 수 있어요
? 네
고리를 덮어씌울 수 있어요 가전제품의 주소를 넣는 거죠
좋아요, 그럼 PDF 파일에서 부록 A의 마지막 부분을 확인하세요 일회용 기기 검색법을 다시 알려드릴
수도 있어요
이 착취 사건은 혼자 마무리하세요
아까도 말했지만 마지막 장애물이 있어요
다음 마지막 영상에서는 취약점을 찾는 방법을 보여 드릴
테니 가능한
방법은 다 써 보고 다시 시작하세요
좋아요 잠시 멈추고 혹시라도 아이디어가 없거나 아이디어가 바닥나면 다시 여기로
와서 같이 마무리 작업을 하죠
네 네 축하해요 자부심을 가져도
돼요 ? 네 그게... 혹시 당신이 무슨 짓을
해도 기계가 말을 안 들어서 걱정 말아요
내가 도와줄게요
네 중단하기 전에 하나의 널 바이트 버그를 이용해 덩어리를 겹쳐 만들었습니다 ? 네 네 네
안 돼요!
네 이것도 시도해 보셨길 바라요 이진법이 너무 큰 요청을 허용하지 않으니
가전제품 주소로 맬록 갈고리를 덮어쓰는 건 합리적인 방법 같았어요
하지만 제한된 장비를 만족시키는 건 어렵습니다
네 이 시점에서 여러분은 파일 스트림 익스플레션이나 소품을 생각해 봤을 거예요 하지만
불행히도 글리벡은 2번이에요 25번, 파일 스트림 착취를
완화합니다
공부 좀 하고 이 경감에 대해 읽어 봤다면 dlopen 훅에 비제로의
값을 입력하면 가볍게 우회할 수 있다는 걸 알 거예요 혼란스러운 빈 공격을 통해서요
네 이렇게 하면 체계적이지 않은 공격을 연속적으로 하는 게 쉽지 않다는 결론을 내리게
될 겁니다
하나는 네
?
패스트빈 둡과 무체중인 빈이 실패했지만 둘을 합치면 어떨까요?
패스트빈 둡 기술은 가짜 덩어리 덩어리가 있어야 가능하죠
네 말록 바늘을 겹치는 가짜 덩어리의 경우 포인터가 라이브러리 주소로
보내는데 0x7f라는 값으로 일관되게 시작하고 null padding 사분어로 뒤따릅니다 ??
그렇군요 네 거나요,
하지만 혼란스러운 공격으로 혼란을 일으킬 수 있죠 명심하세요 혼란스러운 공격에 대비해 우리가
선택한 경기장의 주소를 적어 놓습니다
맞아요 왜냐하면 아레나 주와 그 외의 모든 것이 0x00007f 주소에서 매핑되기 때문이죠
프리 훅 전에 메모리를 공격하면 거기에 가능한 가짜 사이즈를 쓸 거예요
네 지금 화면에 보이는 건 제 pwntools 템플릿 스크립트 5번입니다 이 강의 리소스에서 다운로드
받을 수 있어요 ,
이 마지막 호출만 수정했어요
네 멈추기 전에 그 편집본은 도우미가 0x70 fd를 덮어쓰는 데 사용됐어요 말록 훅에 겹쳐진
가짜 덩어리의 주소로요
네 이번엔 가짜 청크 주소를 겹쳐 썼어요 프리 훅을 겹쳐 쓸게요
좋아요, 네 남은 덩어리가 정서가 혼란스러운 부분과
연결돼 있죠 ? 네
네 할당된 피해자_b 청크는 0x70의 fd를 0x100 크기로 덮어썼어요
그 후의 메타데이터를 조작할 수 있다는 뜻이죠
네 다음 덩어리 사이즈를 위해 가공할 데이터를 작성했어요 0x20 값으로
대체했죠
네 이 경우는 특별한 게 없어요 이 덩어리를 분배해서 정리가
아니라 마비 발작을 일으켜야 해요 마비 발작 후에도 할 일이 많으니까요
네 다른 값을 사용할 수도 있어요
예를 들어 0x130요 모든 게 정렬되길 원한다면요
네 일부 언링크는 fd를 무시하죠 그래서
null을 썼어요 그리고 마지막으로 0x20 크기의 fd를 무료 훅 전의 메모리
주소로 바꿨습니다
왜 0x23을 선택했는지 곧 알게 될 거예요
상황을 시각화하기 위해 GDB와 NOASLR 옵션으로 스크립트를 실행하겠습니다
'시계로 차를 조사하라'
지난 번 멈춘 후로 우리가 건드린
0x70 크기의 공짜예요
거기서 피해자_B가 시작돼요
네 피해자_B로 0x70 패스트빈 fd를 치고 무료 후크 0x16 주소를...
지금은 아무것도 없지만 가짜 덩어리를 준비하려고요
0x70 다음에 0x20을 줄여서 크기를 늘렸어요 원하면 바꿀 수 있어요
네 네 안 돼요!
네 혼란스러운 설정이 완료되었습니다 프로그램 창으로
변경하여 혼란스러운 0x20을 할당해 달라고 요청하면 실행할 수 있습니다
네 다시 메모리로
돌아가서 다시 한 번 메모리를 검사합니다 0x16 바이트 후에 프리 훅은 혼란스러운
공격의 결과인 0x7f 크기의 필드가 나타납니다
네 프리 훅 마이너스 0x16이 이 가짜 훅과 가장 비슷한 크기입니다 그래서
프리 훅 마이너스 0x23을 선택했죠 무체정돈된 공격 장소로요
네 프리 훅 근처의 여러 주소에서 정리가 안 된 공격을 해
봤다면 어떤 건 무효화돼서 안 된다는 걸 아실 겁니다
왜 이런 일이 생기는지 알아내도록 해요
네 중요한 건 후크 위에 가짜 고리를 걸 수 있다는 거예요 그럼 하나만 쓸 필요가
없죠 대신 그냥 후크를 덮어쓸 수 있어요 시스템 주소로요 그리고 'bin/sh'가
들어 있는 줄을 걸면 돼요
GDB를 닫고 에디터로 돌아가서 변화를 주겠습니다
네 먼저, 정서불안 발작을 일으키는 0x20 크기의 덩어리를 요청해야 해요
낚싯바늘 사이에 가짜 덩어리가 껴서 쓸 만한 크기가 되죠
네 다음은 0x70 크기의 덩어리를 두 개 요청하고 두 번째 덩어리는 Fake 덩어리로 서비스할 거예요
'오버쓰기'라고 라벨을 붙일게요
네 다음 다음은 ' free훅 위에 기능'
네 페이크 청크의 사용자 데이터에서 후크까지 거리를 두려면 패도그 6개만
사용하면 됩니다
네 네 이걸 위해 안 돼요! 가드 덩어리를 사용할게요 착취를 시작할
때 사용했던 덩어리를 보호하기 위해서요 상위 덩어리와 통합되는
것을요
그렇게 변경했으니 생산 조건에서 착취를 진행하겠습니다
그리고 독극물_null_bte 챌린지 바이너리에서 셸을 성공적으로 제거한 것 같네요
요약하자면 이 프로그램은 하나의 바이트 버그가 있었습니다 그래서 독이 되는
두 가지 기술 중 하나를 활용했죠
그 기술로 네 ??
네 그리고 다시 뭉쳐서 사용했어요 주소를
공격하기 전에 0x70 패스트빈 메타데이터를 조작하기 위해서요
네 정서가 흐트러진 채 공격을 개시했고 프리 훅 앞에 가짜 크기를 만들어 냈어요
기억하시죠? 이 경우 표적은 후크라는 걸 기억하세요 말록 후크를 못 쓰게
만드는 한 가지 장치 제약을 충족시킬 수 없었기 때문이죠
네 낚싯바늘을 덮는 가짜 덩이를 설치할 수 있었어요 혼란스러운 공격으로 가짜
크기 필드가 생긴 덕분이죠
가짜예요 가짜 고리를 덮어씌우려고 글립벡 시스템 주소를 입력했어요
네 마지막으로 사용자 데이터에서 문자열을 추출했는데 이는 시스템에 보내는
호출로 해석되어 껍데기를 던지고 과제를 완료했습니다
네 혼자 진전을 보이거나 도움 없이 독극물_null_btequery를 완료할 수 있었다면
정말 인상적입니다
네 어려운 도전이었고 한 바이트의 널 넘치는 양만으로 껍데기를 날렸습니다
네 렐로 스택이 다 있었어요 포지션 독립형 카나리아 NX 메모리 할당을 전부 0으로 사용했습니다
여기 네 pwntools_솔루션이라는 이 섹션 리소스에 있습니다.
파이
네 에인헤랴르 집을 이용해 덩어리를 겹치게 하는 다른 방법도 있습니다 폰툴_솔루션_2로
라벨된 구글 포이즌 널 바이트 기술과는 다르죠 그리고 명확성을 위해 둘 다 언급됐어요
항상 그렇듯이 독극물인 널바이트 기술에 대해 기억을 되살리고 싶다면 각각 pdf
파일에 요약본이 있습니다 울록 내부 자료와 함께요
글록 글록의 후대 버전을 어떻게 활용할지 궁금하다면 말록의
실험실로 가 보면 됩니다
독극물 널바이트 테니크는 여기까지가
다입니다 다음 비디오에선 아주 큰 덩어리를 요청할 테니 함께 보시죠 토끼의 집을 배우면서요