전체 글 179

연결리스트(Linked Lists)

연결리스트(Linked Lists) 선형 배열과는 다르다. 선형 배열은 "번호가 붙여진 칸에 원소들을 채워 넣는" 방식이라면 연결 리스트는 "각 원소들을 줄줄이 엮어서" 관리하는 방식이다. 장점으로는 삭제하거나 삽입하는것이 선형 배열의 경우보다 쉽다. (빠른 시간 내에 처리할 수 있다는 뜻) 이러한 이점 때문에, 원소의 삽입/삭제가 빈번히 일어나는 경우에는 연결 리스트가 많이 이용됩니다. 컴퓨터 시스템을 구성하는 중요한 요소인 운영체제(Operation System)의 내부에서도 이러한 연결 리스트가 여러 곳에서 이용되고 있습니다. 단점으로는 선형 배열에 비해 데이터 구조 표현에 소요되는 저장 공간(메모리) 소요가 크다. 또 "i번째의 원소"를 찾아가는 데에 시간이 더 걸린다.(앞에서부터 하나씩 링크를 ..

알고리즘의 복잡도(Complexity of Algorithms)

알고리즘의 복잡도란? 알고리즘이 실행함에 있어, 문제의 크기(일반적으로 데이터 원소의 개수를 뜻함)가 커짐에 따라서 얼마나 큰 시간을(또는 공간을) 요구하느냐를 뜻한다. 시간 복잡도, 공간 복잡도로 나누어진다. 시간 복잡도는 문제가 커짐에 따라 이 문제를 해결하는데 소요되는 시간이 어떤 양상으로 증가하는가를 다루고 공간 복잡도는 문제가 커짐에 따라 이 문제를 해결하는데 소요되는 기억 공간(메모리)의 필요가 어떤 양상으로 증가하는가를 다룬다. 본 문서는 프로그래머스 어서와! 자료구조와 알고리즘 강의를 수강하고 정리했습니다. 출처 : 프로그래머스 : 어서와! 자료구조와 알고리즘은 처음이지?

재귀 알고리즘(Recursive Algorithms) - 기초

알고리즘의 아니라 성질이다. 주어진 문제가 있을 때, 이것을 같은 종류의 보다 쉬운 문제의 답을 이용해서 풀 수 있는 성질을 이용해서, 같은 알고리즘을 반복적으로 적용함으로써 풀어내는 방법이다. 일반적으로, 주어진 문제에 대해서 반복적인 알고리즘이 재귀적인 알고리즘보다 문제 풀이의(시간적) 효율이 높다. 그럼에도 불구하고, 쓰는 이유는 매우 직관적으로 적용할 수 있는 경우가 많기 때문이다. 본 문서는 프로그래머스 어서와! 자료구조와 알고리즘 강의를 수강하고 정리했습니다. 출처 : 프로그래머스 : 어서와! 자료구조와 알고리즘은 처음이지?

정렬(Sort)

정렬(Sort)이란? 복수의 원소로 주어진 데이터를 정해진 기준에 따라 새로 늘어놓는 작업 Python의 list를 정렬하는 법 파이썬 내장 함수 sorted() 리스트에 쓸 수 있는 메서드 .sort() Python 문자열은 대문자가 소문자에 비해서 무조건 우선합니다. 탐색(Search)이란? 복수의 원소로 이루어진 데이터에서 특정 원소를 찾아내는 작업. 선형 탐색(linear search) or 순차 탐색(sequential search): 순차적으로 모든 요소들을 탐색하여 원하는 값을 찾아냄. O(n) 이진 탐색(binary search): 탐색하려는 배열이 이미 정렬되어 있는 경우에만 적용 가능, 미들값을 정해 반씩 쪼개서 찾아감. O(log_n) 본 문서는 프로그래머스 어서와! 자료구조와 알고리..

선형배열(Linear Array)

선형 배열(Linear Array) 선형 배열은 데이터들이 선(line)처럼 일렬로 늘어선 형태를 말함. Python 리스트에 활용할 수 있는 연산들 리스트 길이와 관계 없이 빠르게 실행 결과를 보게되는 연산들 원소 덧붙이기 .append() 원소 하나를 꺼내기 .pop() 리스트의 길이에 비례해서 실행 시간이 걸리는 연산들 원소 삽입하기 .insert() 원소 삭제하기 .del() 추가 다른 연산 원소 탐색하기 .index() 본 문서는 프로그래머스 어서와! 자료구조와 알고리즘 강의를 수강하고 정리했습니다. 출처 : 프로그래머스 : 어서와! 자료구조와 알고리즘은 처음이지?

[webhacking.kr] Challenge(old)_32[150]

이번 문제는 투표를 통해 나의 아이디는 dominic 인 투표의 수를 100표를 받는 문제이다. 한번 투표를 하면 쿠키가 생성되어 이미 투표를 할 수 없다고 한다. 피들러를 통해 패킷을 잡아 확인해 본 결과 투표하는 패킷, 투표를 이미 했다는 쿠키를 생성하는 패킷을 따로 보내는 것을 확인한 뒤 바로 투표하는 패킷을 여러번 반복해서 보냈다. 클리어! 라업도 쓰기전에 감 잡아 버려서 너무 빨리 풀어버린 문제..

[webhacking.kr] Challenge(old)_31[150]

이번문제는 get 파라미터명 : server 해결해야 되는 부분 : 기본적으로 server 인자값에 나의 ip가 들어간다. 그리고 fsockopen() 함수를 이용해 소켓연결을 하는데 포트가 랜덤이고 흔히 쓰지 않는 10000-10100 이다. 소켓통신 (https://mangkyu.tistory.com/48) 즉, 소켓통신은 Server와 Client가 특정 Port를 통해 실시간으로 양방향 통신을 하는 방식으로서 실시간 통신이 필요한 경우에 자주 쓰인다. 우선 fsockopen 함수에 대해 알아 보았다. 소켓연결을 하는 함수이다. 이것 저것 삽질을 통해 보니 인자값이 41개 이상이면 no hack이라고 뜬다. 뭔지 모르겠다.. 빈칸을 넣어보니 ssrf 문제도 아니라고 한다. 뭘까.. ※SSRF란? S..

[webhacking.kr] Challenge(old)_27[150]

이번문제는 필터 되는 부분 : #, select , ( , 띄어쓰기, limit, = , 0x get 파라미터명 : no 해결해야 되는 부분 : id가 admin 인 경우 클리어 처음에 입력 폼에 2%09or%09no%3d2 이렇게 띄워쓰기 대신 탭문자 와 = urlencode 해서 넣어보았는데 urlencode 가 한번 더 되어나타난다. 그래서 url에 직접 get 파라미터 값을 넣어줬더니 정상적으로 들어가지만 =(%3d) 가 필터되어 이것을 처리해주는 방법을 고민해 봐야겠다. ?no=2%09or%09id%09like%09%22admin%22 ?no=2%09or%09no%09like%092 ?no=2%09or%09no%09like%090b00000010 빈칸은 탭으로 처리해주고 = 은 LIKE문으로 우..

[webhacking.kr] Challenge(old)_25[150]

이번문제는 get 파라미터명 : file 해결해야 되는 부분 : flag를 따내는 문제인것 같다? 우선 file 파라미터값을 flag로 줬더니 이렇게 뜬다. FLAG is in the code 플래그는 코드에 있다? 밑에 textarea는 왜 존재 하는것일까? 그냥 결과를 출력해주기 위해서?아마 그냥 출력해주기 위해서 인듯.. 코드에 있다길래 index.php 코드를 유심히 봤지만 아닌것같다! 삽질을 하던 중 ?file=hello/../index 하면 index.php 소스가 textarea에 반복적으로 도는 것을 볼 수 있다. 여기서 파일명에 기본적으로 .php가 들어가는것을 알 수 있다. 파일 취약점에 대해 알아보다가 파일을 여는 함수가 뭐가 쓰이는지 몰라서 fopen()인가 좀 알아보고 그게 아닌 ..

[webhacking.kr] Challenge(old)_19[150]

id 값이 admin으로 되어야 풀리는 문제이다. 해결해야 되는 부분 : 폼에 admin이 기본적으로 되어있는데 잘 우회해서 admin이 뜨게 하면될것 같다. Admin으로 입력했다. 하지만 소문자 까지 완벽하게 해야 풀리는 것 같다. 로그아웃이 안되는데 그 이유가 userid 라는 쿠키가 생성이 되어 고정되어있다. 어? 그러면 setcookie가 되는데 그러면 쿠키를 바꾸면 되지 않을까?? Admin - 'userid' N2ZjNTYyNzBlN2E3MGZhODFhNTkzNWI3MmVhY2JlMjk4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4..