Security
[컴퓨터보안] Web Security
[컴퓨터보안] Web Security
2023.04.26이 글은 보호되어 있기 때문에 이것을 보려면 암호가 필요합니다.
[컴퓨터보안] Feistel Cipher(파이스텔 암호) 동작 방식
[컴퓨터보안] Feistel Cipher(파이스텔 암호) 동작 방식
2023.04.25위의 동작 그림을 기반으로 Feistel Cipher의 동작 방식을 설명하겠습니다. Block Cipher 기반의 암호화 방식이기 때문에, Feistel Cipher 또한 암호화 되어야 하는 Plain Text를 여러개의 Block 으로 나누고, Block 하나와 키를 Encryption Algorithm에 Input 합니다. 이때 한 Block의 길이를 2w bits, key를 K, 진행되는 round의 횟수(Number of rounds)를 n 이라고 하겠습니다. 위의 그림은 n=16 일 때입니다. n은 몇이든 가능합니다. Encryption Algorithm에 들어온 2w bits의 Plain Text Block은 1w bits 두 개로 나누어, 왼쪽과 오른쪽을 각각 $$ LE_{0} \quad R..
[컴퓨터보안] Stream Ciphers | Block Ciphers
[컴퓨터보안] Stream Ciphers | Block Ciphers
2023.04.24Stream Ciphers One-Time Pad 는 아주 안전하지만, 실용적이지는 않은 방법이였습니다. One-Time Pad의 강점인 Plain Text와 같은 길이의 아주 긴 랜덤 키를 사용하는 Stream Cipher 가 One-Time Pad의 대안책으로 많이 사용됩니다. Stream Cipher는 짧은 길이의 키만 공유하고, 이를 Bit-Stream Generator 라는 알고리즘을 사용해 bit-stream을 생성합니다. 이 방식을 통해, One-Time Pad의 단점 중 하나였던 아주 긴 랜덤 키를 어떻게 공유할까 에 대해서 고민하지 않아도 됩니다. 암호화/복호화를 하는 사용자는 같은 짧은 Key를 Bit-Stream Generation Algorithm 에 넣으면 같은 bit-stream..
[컴퓨터보안] Transposition Techniques(전치 기술)
[컴퓨터보안] Transposition Techniques(전치 기술)
2023.04.241. Rail Fence Cipher 가장 간단한 전치 암호화 방식입니다. 암호화 할 Plain Text를 위 아래 지그재그로 나열하고, 이를 Left-To-Right 로 읽는 방법으로 transposition 합니다. meet me after the toga party 라는 Plain Text를 지그재그로 나열하면 아래와 같습니다. 이를 Left-to-Right 로 그대로 읽으면, mematrhtgpryetefeteoaat 와 같이 알아볼 수 없는 텍스트가 나오게 됩니다. 예시에서는 2줄만 이용하였지만, key(정해지지 않은 값) 줄로 나열할 수도 있습니다. 2. Row Transposition Cipher Write the message in a rectangle, row by row Read the..
[컴퓨터보안] Substitution Technique(치환 기술)
[컴퓨터보안] Substitution Technique(치환 기술)
2023.04.241. Caesar Cipher - 카이사르 암호 Plain Text의 각 알파벳을 알파벳 상 3개 뒤의 알파벳으로 치환하는 방식 Plain Text가 meet 일 때, 아래의 과정을 거치게 됩니다. 1. m(12) -> p(12 + 3) 2. e(4) -> h(4 + 3) 3. t(19) -> w(19 + 3) meet을 Caesar Cipher 로 암호화 한 결과, phhw 라는 Cipher Text가 완성됩니다. 이를 식으로 나타내면 아래와 같습니다(k=3) C = E(k, p) = (p + k) mod 26 p = D(k, c) = (c - k) mod 26 k에 대해서 25개의 가능성 밖에 없기에 위 사진과 같이 Brute-Force Attack을 진행할 때, 뚫리기 너무 쉬운 암호화 방식입니다...
DIMI-CTF exec-me
DIMI-CTF exec-me
2020.11.08View Source 문제 이름을 보니 실행시키는게 주 목적인 문제인거 같다. 코드를 보니 역시나 필터링이 stristr 함수를 이용해 이루어지고 있다.stristr 함수는 첫번째 인자로 주어진 문자열 속에서 두번째 인자로 주어진 문자열이 존재하는지 찾는 함수다. www.w3schools.com/php/func_string_stristr.asp Try it Yourself » Definition and Usage The stristr() func" data-og-host="www.w3schools.com" data-og-source-url="https://www.w3schools.com/php/func_string_stristr.asp" data-og-url="https://www.w3schools...
웹해킹 스터디 1주차
웹해킹 스터디 1주차
2020.10.102강 Web Browser(웹 브라우저) HTTP를 통해 인터넷 상에서 통신을 하며 서버로부터 전달받은 웹 리소스들을 가공해 사용자가 전문지식 없이 웹을 사용할 수 있도록 도와주는 소프트웨어 ex) Chrome, Edge, Safari, Firefox Web Resource(웹 리소스) 웹에서 사용하는 콘텐츠 ex) HTML(Hyper Text Markup Language), CSS(Cascading Style Sheets), JS(JavaScript), image, video 등 URl (URL) Uniform Resource Identifier의 약자로 리소스를 식별하기 위한 식별자 Scheme 웹 서버에 접속할 때 어떤 체계(프로토콜)를 이용할지에 대한 정보를 담고있는 요소 (http/https) ..
[root-me.org - Web-Server] HTTP - POST
[root-me.org - Web-Server] HTTP - POST
2020.09.15Give a try! 버튼을 누르면 랜덤값으로 나의 점수가 출력된다. 그 출력되는 점수가 저 999999점을 이기면 깨는 문제다. 일단 저 점수가 어떻게 해서 결정되나를 알아보기 위해 소스코드를 살펴보았다. POST 방식으로 Math.floor(Math.random() * 1000001) 값을 요청해 이 값을 나의 점수로 한다. 코드를 보니 점수는 score라는 name을 가진 input 태그의 value 속성에 저장되는거 같다. 그럼 이걸 조절할 수 있을까? 버프수트를 사용해보자! Give it a try! 버튼을 누르자 버프수트에 다음과 같은 데이터가 잡혔다. 살펴보니,,, 점수를 POST 방식으로,,,하는구나? 그럼 이걸 999999보다 큰 숫자로 바꿔보자 score를 9999999로 바꾸고 For..
[root-me.org - Web-Server] HTTP - Cookies
[root-me.org - Web-Server] HTTP - Cookies
2020.09.15들어가면 볼 수 있는 화면이다. 이메일 주소를 적으면 그 이메일 주소들이 모두 저장돼서 관리자만 볼 수 있는 구조다. Saved email adresses를 눌러 저장된 메일 주소를 보려고 하니 위와 같이 Problem with cookie 라고 쿠키값이 맞지 않다는 에러문구가 출력된다. 주소를 살펴보니 visiteur(visitor로 추정) 이 c라는 이름의 파라미터로 주어져있다. 저게 쿠키값인거 같다. editthiscookie 확장 프로그램을 사용해 살펴보니 저 Value를 admin으로 바꿔주고 다시 접속해보니...?
[root-me.org - Web-Server] HTTP - User-agent
[root-me.org - Web-Server] HTTP - User-agent
2020.09.15시작하자마자 admin이 아닌게 들통났다. 오또카지~ 오또카지~ 에러문을 잘 살펴보니 Wrong user-agent...? user-agent는 BurpSuite에서 자주 보던 친구다. 기본적으로는 접속자의 브라우저 정보나, 운영체제 종류 등의 데이터가 실리는 항목인데, 이걸 보고 admin이 아니라고 판단한거라면 쉽게 생각해서..너무너무 쉽게 생각해서 user-agent를 admin으로 바꿔보자 위와 같이 내 정보가 담겨있는 User-Agent 항목을 아래와 같이!!! 요로코롬..? 요로코롬~~~~~ Password: rr$Li9%L34qd1AAe27
[root-me.org - Web-Server] HTTP - Open redirect
[root-me.org - Web-Server] HTTP - Open redirect
2020.09.15목표는 위와 같다. 챌린지를 시작하면 세 개의 버튼으로 정해진 사이트로만 이동할 수 있다.(페이스북, 트위터, 슬랙) 버튼을 눌렀을 때 정해진 3개의 사이트가 아닌 다른 사이트로 리다이렉션 시키면 되는 문제다. 저 3개중 어느 한 버튼을 눌렀을 때 그 버튼에 해당하는 링크로 바로 리다이렉션 되는걸 보니, 이 중간에 값을 조작해줘야 할거같다. 서버에 어떠한 형태로 데이터가 전해지는지 확인해보았다. 이와 같이 리다이렉션 되는 사이트의 url과 h라는 이름의 어떤 파라미터가 전해진다. 간단하게 저 url 값을 우리들의 국민주소 https://google.com으로 조작했을 때 Incorrect Hash라는 에러문이 출력되었다. 이로써 저 뒤에 같이 주어지는 h 는 해쉬값임을 알 수 있었다. 그럼 저 해쉬값이 ..
[root-me.org - Web-Client] Javascript - Obfuscation 1
[root-me.org - Web-Client] Javascript - Obfuscation 1
2020.09.14챌린지를 시작하자마자 비밀번호를 입력하라는 칸이 나오고 일정시간 후에 끝나버린다. 그 끝나버린 창에서 소스코드를 봐보았다. pass에 16진수(아스키코드로 추정)가 들어가있다. 그리고 사용자가 입력한 값(h)와 unescape(pass)가 같으면 풀리는 문제다. 그럼 unescape(pass) 값을 알아내보자. unescape 함수를 직접 찾아보고 결과값을 예상해보는 방법도 있겠지만, 개발자 도구의 콘솔창을 사용하면 쉽게 알아낼 수 있다. unescape() 함수 안에 문자열의 형태로 값을 넣어주면 이를 다른 값으로 디코딩 해준다. 저 값을 다시 그 비밀번호 입력창에 넣어주면...?둨흔? cpasbiendurpassword unescape() 함수는 문자열을 디코딩하는 함수였다. 위의 문제에서는 아스키코..