CVE-2019-19844 0. 취약한 환경 버전 Django 3.0 1. 환경 구성 python 3.8.10 Ubuntu 20.04.1 Django 3.0 postgreSQL 12.8 POC를 위한 계정 정보 추가 (SHELL) from django.contrib.auth import get_user_model User = get_user_model() User.objects.create_user('testuser', 'test@abc.com', 'test123') 2. POC test@abc.com -> Test@abc.com (대소문자 변경) 후 패스워드 리셋 이메일 인증을 진행한다 Test@abc.com 이메일로 패스워드 리셋 URL이 전송 된것을 확인 할 수 있다. 3. 상세분석 2가지 취약성으..
def solution(clothes): count={} answer=0 for i in clothes: try: count[i[1]] += 1 except: count[i[1]]=1 for i, value in enumerate(count.items()): value = list(value) if value[1] >= 2 and len(count.keys()) >= 2: value[1] *= value[1] elif value[1] >=2: pass else: value[1] = 1 answer = answer + value[1] return answer 테스트 케이스에서 다 맞길래 채첨했는데 채점 결과 정확성: 10.7 합계: 10.7 / 100.0 ㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂㅅㅂ 또 답을 봤다. 베스..
range와 enumerate는 상황에 따라 다르게 쓰이기 때문에 무엇이 좋다고 할수는없다. 다만 enumerate를 통해 range에서보다 쉽게 구현이 가능한 코드들이 있다. range 사용 number = ['1234', '123', '12'] for i in range(len(number)): print(i) print(number[i]) 결과 0 1234 1 123 2 12 enumerate 사용 for i, value in enumerate(number): print(i, value) 결과 0 1234 1 123 2 12 훨씬 간결하고 보기좋다 배열 요소 중 문자열이 제일 긴 값 찾는법 range 사용 number = ['1234', '123', '12'] counts = [len(n) for ..
def solution(phone_book): sort_book = sorted(phone_book) for i in range(len(sort_book)): b = len(sort_book[i]) for j in sort_book[i+1:]: if sort_book[i] == j[:b]: return False return True 채점 결과 정확성: 83.3 효율성: 8.3 합계: 91.7 / 100.0 요번에도 효율성에서 떨어졌다. (4개중 2개) 답을 배꼈다. 베스트 답안1) def new_solution(phone_book): phone_book = sorted(phone_book) for p1, p2 in zip(phone_book, phone_book[1:]): if p2.startswith..
def mysolution(participant, completion): answer = '' if len(participant) != len(completion): for v in participant: if v in completion: completion.remove(v) pass else: answer = v return answer 채점 결과 정확성: 50.0 효율성: 0.0 합계: 50.0 / 100.0 안되서 답을 배낌 def solution(participant, completion): participant.sort() completion.sort() for p,c in zip(participant, completion): if p != c: print(p) return p return p..
Return 주소 조작을 통한 스택 오버플로우 구현 절차 1. 예외를 발생 시키는 주입 지점 확인 2. 주입지점부터 Return Address 위치까지의 옵셋(거리)를 확인 3. 실행의 흐름 조작 가능 여부 확인 4. 간접 분기에 사용할 Register 확인 (전제 조건은 우리가 더럽힐 수 있는 스택을 포인팅 하고 있어야함) 5. 주입 지점부터 간접 분기에 사용할 레지스터가 가르키는 스택의 지점까지 거리 확인 6. Call Register 코드 확인 7. 익스플로잇 코드 제작 및 테스트 목표) 아래 소스코드로 컴파일된 실행파일의 스택 오버플로우 취약점을 찾고 쉘코드 실행 - bof.c #include #include #include void dovuln(const char *s) { char buf[10..