'codegate 2010 write up 8'에 해당되는 글 1건

  1. 2010.07.06 [ CodeGate 2010 ] Challlenge 15 풀이

2010.07.06 18:59 WarGame

이 분야 문제는 바이너리로 남아있는 것도 아니고 삽질하면서 풀어보기도 불가능하네요

혼자 삽질해도 풀수 있을지 없을지도 의문이지만..

대회 끝나고 문제소스 등을 공개해주신다면 공부하는데 한결 수월할 것 같은데 말이죠

이번 문제 또한 자력으로 푼게 아니라 , 다른 사이트에 올라온 풀이를 보고 

제가  나름대로 정리하여 올렸음을 알립니다

갈수록 주인장의 잉여력이 묻어나는 군요

또한, 그림은 Wiki 와

http://netifera.com/research/flickr_api_signature_forgery.pdf

 에서 퍼왔음을 명시합니다

이러한 문제를 풀때마다 느끼는 거지만 정말 보안 분야는 넓네요

너무나 다양한 방법이 있고, 그 방법 마저 지속적으로 갱신되고 있으니까요


각설하고, 문제 풀이 들어갑니다

이번 문제는 8번 문제와 비슷합니다

input 값을 주면 그에 해당하는 Cookie 가 생성되고

이 Cookie 를 토대로 웹페이지에서 복호화하여 답인지 아닌지 체크 하는 형식이죠

input 에 aaaa를 넣는다면 다음과 같은 Cookie 가 생성됩니다

web1_auth = YWFhYXwx|8f5c14cc7c1cd461f35b190af57927d1c377997e


그리고 “Welcome back, aaaa! You are not the administrator.”

와 같은 메시지가 출력되죠

Cookie 는 | 를 기준으로 두 파트로 나눌수 있는데

첫번째 파트는 aaaa|1의 Base64 encoding 결과 입니다

두번째는 input 값에 길이가 달라지지도 않고

구성 문자 형식으로 볼때 hash 값이라는 것을 예측할 수 있습니다

길이가 40 이라는 것으로 sha1 으로 좁힐 수 있습니다

sha1 이나 md5 모두 Padding Attack  다른 용어로 length-extention Attack 에 취약합니다

이를 설명하자면.. Key 값인 m\, 자체를 몰라도   h(m)\, 과  len(m)\,  이 주어진다면

h (m||m')\,  을 알아낼 수 있다는 것입니다
 
|| 는 그냥 문자열의 연속이라고 보시면 되구요

이때 padding , extention 은 이 암호화 연산이 Block 단위로 이루어지기 때문에 마지막 Block 을 채워 넣는다고 하는데서

유래된걸로 보입니다

이를 나타내면 다음과 같겠죠




Sha1 의 Block Size는 512bit , 그러니까 64byte가 되겠죠



이를 시험해봅시다

위 참조 사이트에 있는 소스를 긁어서 보겠습니다



이때 필요한 sha1 hash를 수행하는 파일은


수행해보시면 아실수 있겠지만

orig_msg 의 길이는 25 이고

extention 이 적용된 msg 의 길이는 55 인것을 알 수 있습니다

여기에 key 의 길이 9를 합하면 64byte죠

즉 한 Block 을 채운것을 볼 수 있습니다





즉 extension 한 뒤에

add 함수를 이용하여 update 를 호출함으로써

새로 블럭을 생성하여 완성한다는 것입니다

물론 sha1, md5 등의 함수는 길이가 고정되어 있기 때문에

단순히 생성된 블럭을 이어 붙인다는게 아니라

완전히 다른 값이 생성되게 됩니다

아무튼 이렇게 생성을 하게 되면

key값을 모르더라도 key+orig_msg+padding+new_msg 의 Hash 함수를 구할 수 있게 되죠

인증 방식이 <name> | <role> 이기 때문에 가능한 방식입니다

만약 <role> | <name> 이었다면 이 공격 방식은 성공하지 않았겠죠


입력값으로 aaaa를  넣은 cookie 를 이용한다고 했을때

여기서 우리가 입력할 name 은  'aaaa|1'+<paddingggggggg>+'|0' 인 것입니다

|0 까지를 입력한 name 으로 인식하게 하려는 것이죠

실제로 나온 base64 Encoding 값인

YWFhYXwxgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAD4fDA= 

을 decoding 시켜보면  

 aaaa|1€                               ?0

가 나오게 됩니다

이렇게 나온 Signal 값인  70f8bf57aa6d7faaa70ef17e763ef2578cb8d839 을 넣으면

인증을 통과하게 됩니다

재밌지 않나요? :D

'WarGame' 카테고리의 다른 글

ISEC 2009 Challenge 12 Solution  (0) 2010.08.23
ISEC 2009 Challenge6 with GOT OverWrite  (0) 2010.08.22
[ CodeGate 2010 ] Challlenge 15 풀이  (0) 2010.07.06
[ CodeGate 2010 ] Challenge 8  (0) 2010.06.22
[ CodeGate 2010 ] Challenge 7 풀이  (2) 2010.06.21
[ Python Challenge ] level 15  (0) 2010.06.08
Posted by LinkC

댓글을 달아 주세요

이전버튼 1 이전버튼

블로그 이미지
LinkC

태그목록

Tistory Cumulus Flash tag cloud by BLUEnLIVE requires Flash Player 9 or better.

공지사항

Yesterday31
Today9
Total333,198

달력

 « |  » 2019.10
    1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31    

최근에 받은 트랙백

글 보관함


. .