SlideShare uma empresa Scribd logo
1 de 34
ropasaurusrex
Plaid CTF 2013
2017.04.25
홍승표(Phantom)
『머리말』
처음 푼 CTF 문제이기에 삽질이 매우 많았다.
그래서 환경도 몇 번이나 새로 설정하고
분석을 안하고 어렴풋이 풀려 하니 페이로드가 너무나 헷갈렸다.
이 교육자료를 통해 ROP에 대한 개념을 조금이나마 숙지하고
조금 더 나아가 다른 풀 수 있는 계기가 된다면 좋겠다.
I. Plaid CTF 2013 - ropasaurusrex
II. What is ROP??
III. 개요 및 기초 분석
IV. 정보 수집
V. Exploit
Contents
I. Plaid CTF 2013 - ropasaurusrex
Contents
1. 개요
파일을 실행하고 아무거나 입력하면 “WIN”이라는 문자열을 출력하고
종료한다.
II. What is ROP??
Contents
ROP(Returned Oriented Programming)
취약한 프로그램 내부에 있는 기계어 코드 섹션들(Gadget)을
이용하여 BOF공격 시 특정 명령을 실행시키는 방법
PLT, GOT
PLT(Procedure Linkage Table) : 외부 프로시저(함수)를 연결해주는 테이블
GOT(Global Offset Table) : PLT가 참조하는 테이블
PLT, GOT
함수를 호출하면(PLT를 호출하면) GOT로 점프하는데 GOT에는 함수의 실제 주소가 쓰여있다.
첫 번째 호출이라면 GOT는 함수의 주소를 가지고 있지 않고 ‘어떤과정’ 을 거쳐 주소를 알아낸다.
두 번째 호출부터는 첫 번째 호출 때 알아낸 주소로 바로 점프한다.
III. 개요 및 기초분석
Contents
1. 파일 분석
32bit ELF Binary
Stripped
2. 메모리 보호기법
NX(No Excutable)
해당 메모리 영역에 w권한과 x권한을 동시에 갖지 않도록 설정하는 것
2. 메모리 보호기법
ASLR(Address Space Layout Randomization)
메모리상의 공격을 방어하기 위해 주소 공간배치를 난수화 시키는 기법.
3. 정적 분석
3. 정적 분석
3. 정적 분석
4. 동적분석
4. 동적분석
4. 동적분석
BUF[136] SFP[4] RET[4]
IV. 정보 수집
Contents
1. PLT, GOT 수집
write@plt – 0x804830c
read@plt – 0x804832c
read@got – 0x804961c
2. 입력 데이터 저장 영역 탐색
.dynamic – 0xd0 byte
.data – 0x8 byte
.bss – 0x8 byte
2. 입력 데이터 저장 영역 탐색
.dynamic – 0xd0 byte
.data – 0x8 byte
.bss – 0x8 byte
3. 함수 간 Offset
read() addr – 0xf7edc1c0
system() addr – 0xf7e42940
read – system offset – 0x99880
4. Gadget
pop_pop_pop_ret – 0x80484b6
V. Exploit
Contents
1. Exploit 전 서비스 등록
2. libc 추가
3. Payload 작성
4. Exploit
『마치며』
스스로 이 문제를 풀기 위해 3일간 삽질을 했고
부족했던 개념들을 다시 이해하기 위해 2일을 더 배워야 했습니다
이 자료를 보시는 분들도 이 자료를 통해 많은 공부가 되고
이해가 안되는 부분을 더 많이 스스로 찾고 탐구하는
그래서 자신만의 첫 CTF문제를 풀게 되는 순간이
모두들 오게 되었으면 좋겠습니다.
Thanks to
가장 먼저 이 기법에 대한 문제들을 소개해준 정경빈 군
문제 풀며 삽질할 때 아주 많은 도움을 준 심상현 군
자료를 만들며 많은 이해와 자료의 도움을 주신
Blackperl Security의 안소희 연구원님과 김민정 연구원님
마지막으로 이 자료를 만드는 모든 기회와 계기를 주신
보안 프로젝트 조정원 대표님
Reference to
• ropasaurusrex_salen – link
• [PlaidCTF] ropasaurusrex_conchi – link
• PLT와 GOT 자세히 알기 1 - link
• Plaid CTF 2013 ropasaurusrex_confus3r – link
• remote BOF1 - [xinetd 데몬으로 작동하는 프로그램] – link
• LD_LIBRARY_PATH 에 경로 추가 - link
감사합니다

Mais conteúdo relacionado

Mais procurados

해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹totodeung
 
모의해킹 전문가 되기
모의해킹 전문가 되기모의해킹 전문가 되기
모의해킹 전문가 되기Jeremy Bae
 
초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인H4C
 
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다GangSeok Lee
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정중선 곽
 
Memory corruption stack
Memory corruption stackMemory corruption stack
Memory corruption stackcodevania
 
소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해중선 곽
 

Mais procurados (20)

서울 R&D 캠퍼스 자연어 수업자료
서울 R&D 캠퍼스 자연어 수업자료서울 R&D 캠퍼스 자연어 수업자료
서울 R&D 캠퍼스 자연어 수업자료
 
파이썬과 자연어 4 | word/doc2vec
파이썬과 자연어 4 | word/doc2vec파이썬과 자연어 4 | word/doc2vec
파이썬과 자연어 4 | word/doc2vec
 
파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud파이썬과 자연어 1 | Word Cloud
파이썬과 자연어 1 | Word Cloud
 
해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹해킹 대회 리뷰 및 실전 해킹
해킹 대회 리뷰 및 실전 해킹
 
파이썬과 자연어 3 | 문장구조
파이썬과 자연어 3 | 문장구조파이썬과 자연어 3 | 문장구조
파이썬과 자연어 3 | 문장구조
 
파이썬과 자연어 5 | 딥러닝
파이썬과 자연어 5 | 딥러닝파이썬과 자연어 5 | 딥러닝
파이썬과 자연어 5 | 딥러닝
 
모의해킹 전문가 되기
모의해킹 전문가 되기모의해킹 전문가 되기
모의해킹 전문가 되기
 
파이썬을 활용한 자연어 분석 - 추가분
파이썬을 활용한 자연어 분석 - 추가분파이썬을 활용한 자연어 분석 - 추가분
파이썬을 활용한 자연어 분석 - 추가분
 
자연어1 | 1차강의
자연어1 | 1차강의자연어1 | 1차강의
자연어1 | 1차강의
 
메이크챗봇 자연어기초
메이크챗봇 자연어기초메이크챗봇 자연어기초
메이크챗봇 자연어기초
 
초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인초보자를 위한 시스템 해킹 공부 가이드라인
초보자를 위한 시스템 해킹 공부 가이드라인
 
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다[2014 CodeEngn Conference 10] 심준보 -  급전이 필요합니다
[2014 CodeEngn Conference 10] 심준보 - 급전이 필요합니다
 
파이썬을 활용한 자연어분석 기초
파이썬을 활용한 자연어분석 기초파이썬을 활용한 자연어분석 기초
파이썬을 활용한 자연어분석 기초
 
자연어2 | 1차강의
자연어2 | 1차강의자연어2 | 1차강의
자연어2 | 1차강의
 
프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정프로그래밍 방식의 변천 과정
프로그래밍 방식의 변천 과정
 
Memory corruption stack
Memory corruption stackMemory corruption stack
Memory corruption stack
 
Quick bcc
Quick bccQuick bcc
Quick bcc
 
자연어3 | 1차강의
자연어3 | 1차강의자연어3 | 1차강의
자연어3 | 1차강의
 
02.모의해킹전문가되기
02.모의해킹전문가되기02.모의해킹전문가되기
02.모의해킹전문가되기
 
소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해소프트웨어의 동작 방식 이해
소프트웨어의 동작 방식 이해
 

Semelhante a Ropasaurusrex

Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)one_two_12
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용Susang Kim
 
언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptx언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptxMUUMUMUMU
 
Intern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_missionIntern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_missionJeong-gyu Kim
 
Lecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowLecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowSang Jun Lee
 
Ssscon forensic pt
Ssscon forensic ptSsscon forensic pt
Ssscon forensic pt윤아 황
 
Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Taekyung Han
 
Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Taekyung Han
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl승혁 조
 
PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기Changwan Jun
 
Foss open sorucesw_6902
Foss open sorucesw_6902Foss open sorucesw_6902
Foss open sorucesw_6902승우 백
 
Coding interview
Coding interviewCoding interview
Coding interviewSoohan Ahn
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기ksdc2019
 
Machine Learning with Apache Spark and Zeppelin
Machine Learning with Apache Spark and ZeppelinMachine Learning with Apache Spark and Zeppelin
Machine Learning with Apache Spark and ZeppelinDataya Nolja
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Inho Kwon
 
파이선 문법 조금만더
파이선 문법 조금만더파이선 문법 조금만더
파이선 문법 조금만더Woojing Seok
 
머신러닝 + 주식 삽질기
머신러닝 + 주식 삽질기머신러닝 + 주식 삽질기
머신러닝 + 주식 삽질기HoChul Shin
 
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Taejun Kim
 

Semelhante a Ropasaurusrex (20)

Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)Buffer Overflow PPT (OneTwo)
Buffer Overflow PPT (OneTwo)
 
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용Python과 Tensorflow를 활용한  AI Chatbot 개발 및 실무 적용
Python과 Tensorflow를 활용한 AI Chatbot 개발 및 실무 적용
 
언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptx언리얼 리플렉션 & CDO.pptx
언리얼 리플렉션 & CDO.pptx
 
Intern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_missionIntern pt sw_r&d_len_second_mission
Intern pt sw_r&d_len_second_mission
 
Lecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlowLecture 1: Introduction to Python and TensorFlow
Lecture 1: Introduction to Python and TensorFlow
 
Ssscon forensic pt
Ssscon forensic ptSsscon forensic pt
Ssscon forensic pt
 
Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차Python을 활용한 챗봇 서비스 개발 2일차
Python을 활용한 챗봇 서비스 개발 2일차
 
20160126_python
20160126_python20160126_python
20160126_python
 
Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차Python을 활용한 챗봇 서비스 개발 1일차
Python을 활용한 챗봇 서비스 개발 1일차
 
02. data structure and stl
02. data structure and stl02. data structure and stl
02. data structure and stl
 
PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기PHP로 Slack Bot 만들기
PHP로 Slack Bot 만들기
 
파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝파이썬으로 익히는 딥러닝
파이썬으로 익히는 딥러닝
 
Foss open sorucesw_6902
Foss open sorucesw_6902Foss open sorucesw_6902
Foss open sorucesw_6902
 
Coding interview
Coding interviewCoding interview
Coding interview
 
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
초초초 (초고속 초저지연 초연결) 5G IoT 플랫폼 개발 이야기
 
Machine Learning with Apache Spark and Zeppelin
Machine Learning with Apache Spark and ZeppelinMachine Learning with Apache Spark and Zeppelin
Machine Learning with Apache Spark and Zeppelin
 
Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기Node.js에서 공공API를 활용해서 개발하기
Node.js에서 공공API를 활용해서 개발하기
 
파이선 문법 조금만더
파이선 문법 조금만더파이선 문법 조금만더
파이선 문법 조금만더
 
머신러닝 + 주식 삽질기
머신러닝 + 주식 삽질기머신러닝 + 주식 삽질기
머신러닝 + 주식 삽질기
 
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기Spark & Zeppelin을 활용한 머신러닝 실전 적용기
Spark & Zeppelin을 활용한 머신러닝 실전 적용기
 

Ropasaurusrex

Notas do Editor

  1. 보통 Gadget은 함수 끝에 있는 ret 명령어를 포함, 상위 몇가지 명령어들의 집합이며 이를 이용하여 공격을 한다.
  2. PLT를 통해 다른 라이브러리에 있는 프로시저를 호출해 사용할 수 있다. 프로시저(함수)들의 주소가 들어있다.
  3. GOT (Global Offset Table) : PLT가 참조하는 테이블..
  4. 보호기법으로는 NX가 걸려 있다. 그리고 OS환경상 ASLR이 걸려 있다
  5. 예시 : overflow가 발생하는 바이너리가 있다고 하자. 만약 NX가 활성화 되어 있지 않다면 스택 메모리에 쉘코드를 넣고 ret에 BOF가 가능하다.
  6. 스택, 힙, 라이브러리 등의 데이터 영역 주소 등을 난수화 시킨 주소로 프로세스의 주소 공간에 배치하는 것.
  7. 취약점 설명
  8. Hand + hex-ray = Hand-ray
  9. .text영역에서 main과 vuln_func()로 추측되는 부분을 가져온 것 read함수와 write함수 밖에 없다 NX와 ASLR을 우회하라
  10. 버퍼만큼 넣었을때
  11. 140을 넣었을 때
  12. EIP 변조 가능