본문 바로가기

분류 전체보기

(123)
[Python 프로그래머스] 2019 카카오 개발자 겨울 인턴십 - 크레인 인형뽑기 게임 https://programmers.co.kr/learn/courses/30/lessons/64061 코딩테스트 연습 - 크레인 인형뽑기 게임 [[0,0,0,0,0],[0,0,1,0,3],[0,2,5,0,1],[4,2,4,4,2],[3,5,1,3,1]] [1,5,3,5,1,2,1,4] 4 programmers.co.kr 나의 풀이 이 문제 역시 스택/큐를 활용하는 문제라고 생각되었다. 요즘 python deque 로 pop하는 알고리즘을 자주 접하게 되는 것 같은데, 이번 문제를 풀면서 numpy 까지 사용했었지만 내 뜻대로 해결되지 않아 deque를 적용해서 풀 수 있었다. 리스트 내에서 0 을 모두 제거하는 부분에서 remove 만으로 해결이 안돼서 모두 제거하는 함수를 활용한 점과 board 리스트..
[Python 프로그래머스] 2019 KAKAO BLIND RECRUITMENT - 실패율 https://programmers.co.kr/learn/courses/30/lessons/42889 코딩테스트 연습 - 실패율 실패율 슈퍼 게임 개발자 오렐리는 큰 고민에 빠졌다. 그녀가 만든 프랜즈 오천성이 대성공을 거뒀지만, 요즘 신규 사용자의 수가 급감한 것이다. 원인은 신규 사용자와 기존 사용자 사이에 스�� programmers.co.kr 나의 풀이 최근에 deque 활용 문제를 풀면서 enumerate 함수가 인덱스와 값을 리스트 형태로 사용하기 좋은 함수라고 기억하고 있었는데 마침 적절하게 사용할 수 있어서 좋았던 것 같다. 그리고 튜플 형태에서 간단하게 key 혹은 value 값을 뽑아서 사용하고 싶을 때 lambda 를 사용하면 된다는 걸 이번 풀이에서 알게된 것 같다. lambda와 ..
[Insecure Deserialization] 역직렬화 취약점이란 ? https://portswigger.net/web-security/deserialization Insecure deserialization | Web Security Academy In this section, we'll cover what insecure deserialization is and describe how it can potentially expose websites to high-severity attacks. We'll highlight ... portswigger.net Serialization 이란 ? 직렬화, 객체를 저장 및 전송 가능한 스트림 형태로 변환하는 것. 어떤 객체를 직렬화할 때, 자동으로 각 속성을 할당된 값과 함께 보존됨 (Private 필드 포함). 직렬화를 방지하..
[Python 프로그래머스] 기능개발 - level2 [스택/큐] 우선 문제를 읽고 굉장히 간단할 것 같다는 생각을 했다. 스택/큐 자료구조를 사용해서 푸는 문제라는 걸 참고해서 풀어보면 될 것 같다. 남은 작업 진도의 값(100-progresses)을 speeds 로 나누고 나머지가 있을 경우 +1 즉, 올림해주면 완성일이 나올 것이다. 그리고 뒷 인덱스의 값이 작더라도 앞 인덱스의 값까지 기다려야 하기 때문에 이때 아마 큐를 사용하는 것 같다. ------------------------------------------------------------------ import math def solution(progresses, speeds): preanswer=[] answer=[] for pc, sp in zip(progresses, speeds): cnt=0 c..
ftz level 20 [level20] 이문제는 setreuid() 도 있고 간단해 보이지만, bleh 는 80 바이트, 그러나 입력으로 받는 크기는 79 바이트로 오버플로우가 가능하지 않아보인다. 그러나 잘 보면, printf() 에 형식 지정자가 없이 출력을 하는, 즉 포맷 스트링 버그를 발견할 수 있다. *** 포맷 스트링 버그 (Format String bug, FSB) : 버퍼 오버플로우 해킹 기법의 한종류로, 사용자의 입력에 의해서 프로그램의 흐름을 변경시킬수있는 취약점 : 만일 입력하는 문자열에 서식 문자가 들어가게 되면, 스택의 다음 4바이트를 출력하는 오류가 발생한다. : ex. 입력한 서식 문자가 %x 라면 다음 4바이트를 16진수로 출력 따라서 만약 aaaa%x 등을 입력하면? 이렇게 일반 문자는 정상적으로 출력이 되지만,..
ftz level 19 [level19] 이번에는 너무 짧아서 놀랐다. 너무 간단해보이는데..? ㅎㅎ 바로 쉘코드 환경변수에 올리고 오버플로우 시켜 ret 자리에 환경 변수 주소가 오도록 빨리빨리 진행해보자. 그러나 이번 문제에서는 setreuid 로 권한 상승을 해주는 부분이 없기 때문에 setreuid() 를 포함하는 쉘코드를 환경변수로 등록해야한다. 4 참고 https://security-nanglam.tistory.com/117 먼저 디버깅부터 해서 buf 의 시작주소를 기반으로 얼만큼 오버라이딩 시키면 될지부터 확인하자. main+9 에 ebp-40 위치가 buf 의 위치. 스택을 그려보자면 이런 형태. 암튼 페이로드는 "a"*44 + 환경변수 주소 가 될 것이다. getenv.c 생성 후 컴파일, 환경 변수 주소 획득 페이로드 입력하..
ftz level 18 [level18] cat hint ! 너무 길어서 깜짝 놀랐다. 천천히 해석을 해보자면, 우선 쉘은 shellout()에 들어있으니 shellout() 을 실행하면 되는 것 같고, check 가 0xdeadbeef 면 shellout() 을 호출하므로, check 가 0cdeadbeef 가 되도록 하면 될 것 같다. 그리고 중간에 보이는 fd_set 은 파일 디스크립터 구조체를 의미한다. FD_ZERO 는 fd_set 으로 선언된 변수인 fds 를 초기화 할때 쓰이는 함수이다. 한마디로 이 소스에서는 STDID_FILENO 등이 인자로 사용된걸로 보아 그냥 사용자의 입력을 받는 구조체 정도로 이해하면 될 것 같다. 사용자의 입력에서 1바이트만 x 에 넣어 \r \n 0x08 이 아닌 경우 stiring[count] 에 x..
ftz level 17 [level17] 이번 문제는 그냥 거의 level16 이랑 똑같아보인다. 다른 점은 shell() 함수가 없다는 것. 앞선 문제에서 shell() 이 배시 쉘을 실행시키는 함수였기 때문에 여기서는 환경변수에 쉘코드를 올려두고 환경변수의 주소가 call() 의 위치에 오도록 오버플로우 하면 된다. 그럼 전에도 했듯이 attackme 를 복사해 ./tmp 아래에 두고 디버깅으로 오버플로우 시켜야할 크기를 확인해보자. level16 이랑 너무 똑같아서 소름 끼칠 정도이다. 그래도 간단히 정리하자면, buf 는 esp-56 위치에, call() 함수는 esp-16 위치에 존재한다. 즉, buf 에 입력으로 40 바이트를 채우고, call() 가 함수를 호출하는 자리에 환경변수 주소를 넣자. 넉넉히 nop 15바이트로 시작하는 ..