본문 바로가기

AES3

[Crypto] 2019 CTFZONE CSES : CBC모드에서 KEY=IV 일때, 발생하는 취약점 먼저 루아와 관련된 문자열이 상당히 많이 존재하는 ELF파일이 주어졌다. 해당 파일을 살펴보는게 먼저이지만, 이 문제는 그것이 핵심이 아닌듯하니 생략하겠다. 단순한 루아 스크립트가 아닌 스크립트의 실행이 가능한 파일이라는 것을 알 수 있었다. 아래의 루아 라이브러리에 대해 빌드하면 나오는 형태와 비슷한 것 같다. https://empier.tistory.com/334 파일의 하단부분인 0x37020 주소에 47과 4F가 많이 나타나는 수상한 값을 찾을 수 있었다. 읽을 수 없도록 꼬아져있다고 생각했다. a1은 암호화되어 있는 스크립트의 주소, a2는 스크립트의 길이를 인자로 복호화 연산을 하는 것으로 추정되는 함수를 찾아서 아래처럼 동일하게 작성해 동작시켰다. 출력 결과로 루아 컴파일러에 의해 컴파일된 .. 2019. 12. 2.
[Crypto] 2019 CTFZONE agents : OFB 모드에서 값을 조작해야하는 문제 먼저 문제에 대해 설명을 하자면, 1번을 누를 경우, 요원이름과 장문의 랜덤한 암호문을 준다. 이후 이 암호문을 가지고 2번을 눌러 에이전트에게 이름과 암호문을 전달하면 믿을만한 요원이 아니기때문에 시크릿 메시지를 줄 수 없다고 한다. 이에 분석을 해서 알게된 것을 아래와 같이 추렸다. 알고있는 것: 1. AES-OFB모드로 암호화된 암호문 2. 세어보니 암호문은 자릿수는 337자리 (ECB와 OFB모드처럼 길이가 블럭단위가 아니다) 3. 한번 사용된 요원의 암호문은 재사용불가 4. 암호문은 JSON이다. (337자리에서 특정 바이트들을 깨서 보내보았는데 정상동작을 할때도 있고, "JSON Corrupted" 메시지가 뜰때도 있었음) 그래서 나는 JSON 값에 "{trust : 0}" 와 같은 필드가 존.. 2019. 12. 2.
[Python] AES 예제 import base64 from Crypto.Cipher import AES from Crypto import Random pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS) unpad = lambda s : s[:-ord(s[len(s)-1:])] class AESCipher: def __init__( self, key ): self.key = key def encrypt( self, raw ): raw = pad(raw) iv = Random.new().read( AES.block_size ) cipher = AES.new( self.key, AES.MODE_CBC, iv ) return base64.b64encode( iv + ciphe.. 2018. 2. 6.
반응형