프롤로그화이트햇 하면서 공책받고나서 거기다가 열심히 적으면서 하다가 블로그 정리 안 하긴 했는데블로그 정리가 훨씬 더 좋은 거 같다. 문제 문제코드#app.pyimport osfrom flask import Flask, requestfrom flask_mysqldb import MySQLapp = Flask(__name__)app.config['MYSQL_HOST'] = os.environ.get('MYSQL_HOST', 'localhost')app.config['MYSQL_USER'] = os.environ.get('MYSQL_USER', 'user')app.config['MYSQL_PASSWORD'] = os.environ.get('MYSQL_PASSWORD', 'pass')app.config['..
분류 전체보기
0. 프롤로그https://dreamhack.io/wargame/challenges/353 Return to LibraryDescription Exploit Tech: Return to Library에서 실습하는 문제입니다.dreamhack.io 1. 사전 공부 및 작업2. 문제 3. 코드 분석 4. 스택 구조 5. 예상 공격 방법 6. 카나리 값 획득 7. system.의 plt 주소 확인8. 리턴 가젯 9. /bin/sh의 주소 찾기10. 실행 11. 에필로그시간 투자를 굉장히 많이함.
프롤로그 지금까지 내용들 정리해보면Return Address Overwrite : 반환 주소를 악성 함수의 주소로 덮어서 셸 획득Stack Canary : 스택 프레임의 반환 주소 전에 랜덤한 카나리를 주입하여 반환 주소를 덮기 어렵게 함Return to Shellcode : 카나리를 우회하고, 셸 코드를 주입한 버퍼의 주소로 반환 주소를 덮어서 셸 획득ASLR : 임의 버퍼의 주소를 알기 어렵게 함NX : 각 세그먼트의 불필요한 실행권한을 제거함으로써 공격자가 임의 버퍼에 주입한 코드를 실행하기 어렵게함 NX를 우회하기 위해 RTL(Return To Libaray)가 나옴 Return to LibraryNX로 인해 공격자가 버퍼에 주입된 셸 코드를 실행하기는 어려워졌으나, 반환 주소 덮는 것은 여전히..
라이브러리컴퓨터 시스템에서 , 프로그램들이 함수나 , 변수를 공유해서 사용할 수 있게 함.printf, scanf, strlen 등 C프로그래머들이 코드를 작성하면서 자주 사용하는 함수들의 정의를 묶어서 하나의 라이브러리 파일로 만들고, 이를 여러 프로그램들이 공유해서 사용할 수 있도록 지원함.-> 같은 함수를 반복적으로 정의해야하는 수고를 덜 수 있어서 코드 개발의 효율이 높아짐 각 언어에서는 범용적으로 많이 사용하는 함수들(printf...)은 표준 라이브러리로 제작되어있음.C의 표준 라이브러리인 libc는 우분투에 기본적으로 탑재됨./lib/x86-64-linux-gnu/libc.so.6에 위치. 링크컴파일 되는 과정전처리(.i) -> 컴파일(.s) -> 어셈블(.o) -> 링킹 즉 어셈블 까지..
프롤로그 화이트햇 하면서, 스택오버플로우랑 카나리 기법 공부하고, 따로 정리는 안 하였다. NX No-eXecute(NX) : 실행에 사용되는 메모리 영역과 쓰기에 사용되는 메모리 영역을 분리하는 보호 기법. 메모리 영역에 대해 쓰기 권한과 실행 권한이 함께 있으면 시스템이 취약해 지기 쉽다. 그래서 CPU가 NX를 지원하면, 컴퍼알러 옵션을 통해 바이너리에 NX를 적용할 수 있고, NX가 적용된 바이너리는 실행될 때 각 메모리 영역에 필요한 권한만을 부여받는다. 어떤 보호 기법이 적용되었는지 확인하려면 checksec 파일 를 쓰면 보호 기법이 나온다 $ checksec ./nx [*] '/home/dreamhack/nx' Arch: amd64-64-little RELRO: Partial RELRO S..
프롤로그 2주간 말레이시아 해외 인턴십을 다녀오고, 현재 코로나 걸려서 3주간 블로그를 쉬고 있다. 그래서 pom 프로젝트나 쉬는 동안 끝내보자. 모델생성 임시적으로 사용가능한 이메일인지 체크만 할 것을 구상하였기에 임시 데이터베이스를 만들었다. class TempEmailVerify(models.Model): email = models.EmailField(unique=True) verification_code = models.CharField(max_length=6) created_at = models.DateTimeField(auto_now_add=True) def is_expired(self): # 인증 코드의 유효 시간을 1시간으로 설정 return self.created_at < (datetim..
프롤로그 이메일 인증 이것도 처음인데 일단 시도는 해보기 위해서 넣을 것이다. 이메일 인증 주소 : [ip]/signup/email_verify/ 이메일 인증 완료 [ip]/signup/activate_email/// ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 밑에 글들을 참고하였음. https://woongsin94.tistory.com/300 Django 회원가입 이메일 인증(SMTP) 많은 포털 사이트에서 회원가입 시 웹 메일 인증 시스템을 채택하고 있다. (현재는 대부분 보안성 때문에 기기 인증 등도 활용되고 있다고 한다...) 프로젝트를 진행하면서 해당 부분이 필요하게 woongsin94.tistory.com https://ssungkang.tistory.com/entry/..
프롤로그 JWT 코드 관련해서 뭔가 이상함을 느끼고 계속해서 코드를 수정하고 있다. 2024.01.31 - [웹 개발] - [장고] 장고로 JWT 사용하기 #3 처음 공부하는 부분이고 이것저것 잘못된 정보를 배워와서 그런 가 잘못된 정보를 많이 넣어놨기에.. .코드만 수정하겠다. userid, 이름, 이메일, 닉네임, 유저타입, 그 유저타입에 따른 정보들이 토큰에 추가가 될 것이다. serializers.py from rest_framework_simplejwt.serializers import TokenObtainPairSerializer from django.contrib.auth import get_user_model User = get_user_model() class CustomTokenObta..
프롤로그 일단은...로그인 기능들과 JWT를 한 번에 하려고 했는데 양이 매우 많을 것으로 판단되어 양산형 글 처럼 작성할 거 같다. JWT사용법과 개념들에 대해서 알아보자. 장고에 JWT 설치하기 pip install djangorestframework djangorestframework-simplejwt 가상환경에서 해당 명령어를 작성한다. simple jwt 라는 것을 설치하는 것이다 설치가 잘 되었다. 그 후에, 장고 작업하는 곳의 settings.py 에서 설정에 추가하자 INSTALLED_APPS = [ ... "rest_framework", ... ] INSTALLED_APPS 부분에 하나 추가하고 REST_FRAMEWORK = { 'DEFAULT_AUTHENTICATION_CLASSES':..
프롤로그 장고 책 2권을 보면서 페이지 만드는 작업을 하였었는데, API라든지, JSON 형식이라든지 이런 기능을 설명해주는 책은 없었고, 스스로 알아내가야했다. 그리고...이 작업에 관련된 자료들이 진짜 매우매우 없다;; 그래서 일단 내가 따로 찾아보면서 공부한 내용들을 정리해보고자 한다. 살짝 개념 정리 몇 개를 해보자면 DRF Django Rest Framework 의 약자로, Django를 위한 강력하고 유연한 웹 API 구축을 위한 오픈소스 프레임 워크이다. DRF는 직렬화(Serialization) , 인증(Authentication) 및 권한(Permission), 브라우저블 API, ORM및 비ORM 데이터 소스 지원, 클래스 기반 뷰의 특징을 가지고 있다. 직렬화의 경우, 파이썬 데이터 ..
프롤로그 일단 PoM서비스에서 내가 맡은 역할은 로그인/회원가입 기능이다. 그래서 프론트엔드와도 작업해야하니까, 일단 회원가입 할 때 모델링 부터 진행하겠다. 회원가입 모델링 일단 이렇게 각각 테이블을 생성해두고 ALTER TABLE individual ADD FOREIGN KEY (idx) REFERENCES user (idx) ALTER TABLE enterprise ADD FOREIGN KEY (idx) REFERENCES user (idx) 로 기본키외래키 참조 연결해주면 위와 같이 연결이 된 것을 확인할 수 있다. 그냥 다이어그램만 작성한 것이지, 데이터베이스 MySQL이랑은 일단은 관계없다. 나중에 연결할때면 필요할 수도 있으나, 데이터베이스는 나도 이제 막 기초 배우기 시작한 데린이기에.....
프롤로그 코드같은 거 짤 때, 우리는 그냥 코딩 습관에 길들여져 있어서 일단 코딩하기 시작한다. 그러다보면 코드가 어느순간 꼬이기 시작하면 아까워서 못지우고 계속 수정하고 버티다가 밤을 새고, 체력이 망가지고 패가망신하게 된다. 결국 갈아엎게 되느니만 못하다. 이것을 해결하기 위해 소프트웨어 개발 방법론이 나타났는데, 이를 소프트웨어 공학이라고 부르게 된다. 소프트웨어 공학에서 제시하는 소프트웨어 개발 모델은 많지만 가장 오래되고 전통적으로 사용되는 것은 폭포수 모델(waterfall model)이다. 프로젝트 계획 -> 업무 분석 -> 시스템 설계 -> 프로그램 구현 -> 테스트 -> 유지보수 순으로 폭포가 떨어지듯이 각 단계가 끝나면 다음 단계로 진행하는 과정이다. 각 단계가 명확히 구분되어서 프로젝..