Natas Level 11 입니다.
Level 11 메인 페이지 입니다.
..꽤 끔찍한 문제였습니다.
쿠키는 XOR 암호화로 보호되고 있다. 라네요.
소스코드부터 봐봅시다.
굉장히 길고 끔찍하군요..
일단 맨 마지막 코드를 보아, data배열의 showpassword값이 yes이면 password가 출력된다는 걸 알 수 있습니다.
하나씩 설명을 드리자면,
xor_encrypt() : key와 입력받은 인자를 xor 연산 진행하는 함수
loadData() : 현재 Cookie의 data 부분 값을 복호화하여 가지고 오는 함수
saveData() : 인자로 받은 값을 암호화하여 Cookie의 data부분 값을 셋팅하는 함수
이렇게 됩니다.
현재 마지막 조건문에서는, data배열의 showpassword 값이 yes 인걸 요구하고 있습니다.
data배열은 Cookie 의 data 부분 값을 의미합니다.
따라서, 우리는 Cookie 의 data부분 값을 Burp Suite로 조작해야 합니다.
단, loadData 부분을 보시게 되면
data를 그냥 가지고 오는것이 아닌, 복호화 과정을 거쳐 가져온 후, 최종적으로 조건문과 비교하게 됩니다.
복호화 과정을 거친다는 것은, Cookie의 data값은 암호화된 상태라는 것이고,
우리가 Cookie값을 조작할 때, 우리가 원하는 값을 암호화한후 입력해야 한다는 것입니다.
기본적으로 셋팅되어있는 Cookie의 data부분 값은 아래와 같습니다.
array( "showpassword"=>"no", "bgcolor"=>"#ffffff");
no 부분을 yes로 바꾸어, 아래와 같이 변경하면 됩니다.
array( "showpassword"=>"yes", "bgcolor"=>"#ffffff");
또한 이 값을, 암호화하는 과정을 거쳐야 하겠죠.
암호화는 복호화의 역순이므로,
복호화 : base64_decode -> xor_encrypt -> json_decode
암호화 : json_encode -> xor_encrypt -> base64_encode 가 됩니다.
그러나, xor_encrypt() 함수를 보시게 되면
key 값을 알 필요가 있습니다. key를 알아야 우리가 암호화를 할 수 있습니다.
여기서 xor연산의 특성을 알려드리자면,
A ^ B = C 일 때
A ^ C = B 가 됩니다.
따라서,
array와 key를 XOR연산한 값이 Cookie의 data 이니까
Cookie의 data와 array를 XOR 연산하면 key가 나오는 것입니다.
( 연산 시 array는 json_encode된 상태여야 하며 data는 base64_decode 된 상태여야 합니다. )
data 값은 Burp Suite를 통해 쉽게 알 수 있죠.
10행 Cookie 헤더의 data 부분이 보이시나요? 저게 data값입니다.
물론, 현재 base64 인코딩된 값이므로 디코딩해야 합니다.
코드를 작성하여 key값을 계산해 보도록 합시다.
key 계산 코드입니다.
key는 KNHL 이었습니다. KNHL이 반복되는 형태입니다.
이 key값을 가지고, 우리가 원하는 값으로 Cookie를 조작해 봅시다.
조작된 Cookie를 만들기 위한 코드입니다.
showpassword 값을 yes로 변경하였습니다.
그리고 key인 "KNHL" 과 XOR연산한 후
마지막으로 base64 인코딩까지 수행하였습니다.
완성품을 획득하였습니다.
이 값을 Burp Suite를 통해 Cookie의 data부분에 넣어주기만 하면 password를 획득할 수 있을겁니다.
위와 같이 조작해주고, Forward 클릭.
password를 획득하였습니다.
개인적으로 너무나도 난해한 문제였습니다.
사실 문제의 본질만 본다면
쿠키값 암호화 과정을 확인해서 key를 알아낸 후 쿠키를 조작하면 끝나는 문제였는데 말이죠.
제가 코드에 약하니, 문제가 요구하는 부분이 무엇인지 파악하는 게 이렇게나 힘들군요.
'Hacking > [Web]Natas' 카테고리의 다른 글
OverTheWire [Natas Level 13] (0) | 2023.03.17 |
---|---|
OverTheWire [Natas Level 12] (0) | 2023.03.16 |
OverTheWire [Natas Level 10] (0) | 2023.03.15 |
OverTheWire [Natas Level 9] (0) | 2023.03.13 |
OverTheWire [Natas Level 8] (0) | 2023.03.13 |