1주차_Webhacking 과제( 42번 , 19번 )

2023. 9. 19. 01:46SWLUG/web hacking

 

1주차는 인코딩과 디코딩을 학습하였다.

 

 

[ 학습 내용 ]

 

인코딩(ENCODING)이란?

영상이나 문자 인코딩 뿐 아니라 사람이 인지할 수 있는 형태의 데이터를 약속된 규칙에 의해 컴퓨터가 사용하는 0과 1로 변환하는 과정을 말한다. 

 

종류로는 URL인코딩과 BASE64가 있다.

 

URL인코딩은 문자나 특수문자를 웹 서버와 브라우저에서 보편적으로 허용되는 형식으로 변화하는 메커니즘으로, 

ASCII 문자 집합을 사용하여 인터넷을 통해서만 전송할 수 있기 때문에 URL 상에서 문자를 표현하기 위해 사용되는 기법을 말한다.

인코딩이 필요한 문자: "%" 다음에 두 개의 16진수로 대체하며,  URL은 공백을 포함할 수 없으므로 공백은 더하기 (+) 기호 또는 % 20으로 대체하면 된다.

 

BASE64는 8비트 이진 데이터(EX. 실행 파일, ZIP 파일)를 문자 코드에 영향을 받지 않는 공통 ASCII 영역의 문자들로만 이루어진 일련의 문자열로 바꾸는 인코딩 방식으로 이진 데이터를 문자열로 변경하여 인코딩한다.

인코딩 할 문자가 6비트 단위로 나누어 떨어지지 않는 경우에는 온전한 6비트로 만들기 위해 남은 공간을 0으로 채워 준다.패딩(PADDING)이란  인코딩 후 패딩 문자인 = 가 빈 자리에 들어가는 것을 말한다.

 

디코딩(DECODING)이란?

인코딩의 반대로 바이트 형식을 문자(문자열로 변환하는 것을 말한다.

 

 

[ 42번 문제 실습 ]

 

해당 문제에 들어가니 아래와 같은 표가 나타났다.

test.txt는 다운로드가 정상적으로 되었고,

메모장을 통해 아래와 같은 글자들이 나타났다.

이번에는 flag.docx를 다운로드 시도해보았다. 그랬더니 아래와 같은 접근거부 메시지가 나왔다.

개발자도구를 통해 들어가 보니 아래와 같이 써있었다.

test.txt파일은 ?down=dGVzdC50eHQ=이라고 쓰여있는데 = 이를 통해서 BASE64로 인코딩된 것을 알 수 있었다.

 

?down이 인코딩을 요청하는 메시지고 = dGVzdC50eHQ=가 값을 인코딩한 것일까나..?

 

read me라고 쓰여있는 flag.docx는 접근권한이 없다는 내용이 적혀있었다..

 

이제 디코딩? 을 해봐야할 것같다.

1. import base64
Python의 base64 모듈을 가져온다. 이 모듈은 Base64 인코딩 및 디코딩을 수행하는 데 사용된다.

2. encoded_string = "dGVzdC50eHQ="
디코딩할 Base64로 인코딩된 문자열을 지정한다. 여기서는 "dGVzdC50eHQ=" 문자열을 디코딩하려고 한다.

3. decoded_bytes = base64.b64decode(encoded_string)
base64.b64decode 함수를 사용하여 Base64로 인코딩된 문자열을 디코딩한다.
디코딩된 결과는 바이트 데이터로 저장된다.

4 .decoded_string = decoded_bytes.decode('utf-8')
디코딩된 바이트 데이터를 UTF-8 인코딩을 사용하여 문자열로 변환한다. 이것은 디코딩된 문자열을 얻는 데 사용된다.

5. print(decoded_string)
디코딩된 문자열을 출력하고 , 이 부분은 결과를 화면에 표시하는 역할을 한다.

위와 같이 Vscode를 통해 python언어로 디코딩을 하였고, 아래와 같이 test.txt가 나왔다.

하지만 더 쉬운 방법이 있었는데, 아래와 같다.

 

 

이와 반대로 flag.dox값을 인코딩해볼 것이다.

 

 

 

인코딩 입력값 : ZmxhZy5kb2N4

기존 링크에 /?down=ZmxhZy5kb2N4 입력하면 아래와 같이 flag.docx파일이 다운로드 된다. 

파일을 열면 아래와 같이 플래그가 나온다.

 

 

[ 19번 문제 실습 ]

 

오호라 문제가 id를 찾아야하는건가본데.. 나는 admin이 아니라 안된단다.

우선, 개발자도구를 열어봤는데 딱히 도움이 되는 내용이 없는 것 같았다.

 

그래서 you are not admin을 혹시몰라 디코딩해서 로그인해봤다.

로그인이 됐는데.. 좀이상한거같아서 이 이상은 구글링을 통해 학습에 도움을 받아야할 것 같다.

 

해당 문제는 md5로  인코딩 된 것이라고 한다.

( 아직은 이 과정도 이유도 잘 이해는 가지 않는데 공부를 조금 더 해봐야할 것같다. )

# 쿠키값을 이용해 힌트를 찾아야한다는데.. 내쿠키는 말도안되게 긴거같다.

 

그래서 md5 인코딩 그리고 나서, BASE64로 인코딩, 마지막으로 URL인코딩을 한 값을 쿠키값에 대입해야하는 문제였다.

 

 

우선 md5로 인코딩하는 작업을 했다.

 

a : 0CC175B9C0F1B6A831C399E269772661

d : 8277E0910D750195B448797616E091AD

m : 6F8F57715090DA2632453988D9A1501B

i : 865C0C0B4AB0E063E5CAA3387C1A8741

n : 7B8B965AD4BCA0E41AB51DE7B31363A1

모두 합친0CC175B9C0F1B6A831C399E2697726618277E0910D750195B448797616E091AD6F8F57715090DA2632453988D9A1501B865C0C0B4AB0E063E5CAA3387C1A87417B8B965AD4BCA0E41AB51DE7B31363A1 의 값을 다시 BASE64를 통해 인코딩해볼 것이다.

 

MENDMTc1QjlDMEYxQjZBODMxQzM5OUUyNjk3NzI2NjE4Mjc3RTA5MTBENzUwMTk1QjQ0ODc5NzYxNkUwOTFBRDZGOEY1NzcxNTA5MERBMjYzMjQ1Mzk4OEQ5QTE1MDFCODY1QzBDMEI0QUIwRTA2M0U1Q0FBMzM4N0MxQTg3NDE3QjhCOTY1QUQ0QkNBMEU0MUFCNTFERTdCMzEzNjNBMQ== 라는 값이 나왔다.

 

이걸 다시 URL 인코딩 할 것이다. 값은 아래와 같다.

MENDMTc1QjlDMEYxQjZBODMxQzM5OUUyNjk3NzI2NjE4Mjc3RTA5MTBENzUwMTk1QjQ0ODc5NzYxNkUwOTFBRDZGOEY1NzcxNTA5MERBMjYzMjQ1Mzk4OEQ5QTE1MDFCODY1QzBDMEI0QUIwRTA2M0U1Q0FBMzM4N0MxQTg3NDE3QjhCOTY1QUQ0QkNBMEU0MUFCNTFERTdCMzEzNjNBMQ%3d%3d 

 

 

첫번째 시도 실패해서 다시해본다..

 

음 이런 쿠키값이구나 일단은 보고,

나는 admin은 md5인코딩해줄것이다.

0CC175B9C0F1B6A831C399E2697726618277E0910D750195B448797616E091AD6F8F57715090DA2632453988D9A1501B865C0C0B4AB0E063E5CAA3387C1A87417B8B965AD4BCA0E41AB51DE7B31363A1이 값을 md5 인코딩하면,

MENDMTc1QjlDMEYxQjZBODMxQzM5OUUyNjk3NzI2NjE4Mjc3RTA5MTBENzUwMTk1QjQ0ODc5NzYxNkUwOTFBRDZGOEY1NzcxNTA5MERBMjYzMjQ1Mzk4OEQ5QTE1MDFCODY1QzBDMEI0QUIwRTA2M0U1Q0FBMzM4N0MxQTg3NDE3QjhCOTY1QUQ0QkNBMEU0MUFCNTFERTdCMzEzNjNBMQ== 이렇게 나온다.. 

 

이걸 이제 쿠키값에 넣어주자..

아니 또... error가..? 왜일까

 

 

내가 볼땐 아까 인코딩 작업하면서 문제가 있던 것 같다. a,d,m,i,n 값을 다시 md5 인코딩해야겠다.

a : 0cc175b9c0f1b6a831c399e269772661

d: 8277e0910d750195b448797616e091ad

m: 6f8f57715090da2632453988d9a1501b

i: 865c0c0b4ab0e063e5caa3387c1a8741

n: 7b8b965ad4bca0e41ab51de7b31363a1

이제 이걸 가지고

0cc175b9c0f1b6a831c399e2697726618277e0910d750195b448797616e091ad6f8f57715090da2632453988d9a1501b865c0c0b4ab0e063e5caa3387c1a87417b8b965ad4bca0e41ab51de7b31363a1 BASE64로 인코딩한다.

 

MGNjMTc1YjljMGYxYjZhODMxYzM5OWUyNjk3NzI2NjE4Mjc3ZTA5MTBkNzUwMTk1YjQ0ODc5NzYxNmUwOTFhZDZmOGY1NzcxNTA5MGRhMjYzMjQ1Mzk4OGQ5YTE1MDFiODY1YzBjMGI0YWIwZTA2M2U1Y2FhMzM4N2MxYTg3NDE3YjhiOTY1YWQ0YmNhMGU0MWFiNTFkZTdiMzEzNjNhMQ0KDQo= 이렇게 값이 나왔고 쿠키에 넣어줄 것인데 제발 됐으면 좋겠다.

과연..?

 

됐다!!!! 드디어 됐다. 다른사람의 풀이를 보고 따라서 하기도 쉽지않을만큼 낯설었지만 힘들게 찾다보니 공부가 더 많이 된거같기도하고, 힘들지만 나름 재미있는 과정이었다.

앞으로 열심히 해야겠다.╰(*°▽°*)╯

 

 

 

[webhacking.kr] 19번 문제

150점인 19번 문제를 풀어보자. 입력값에 인젝션을 시도해봤지만 별다른 반응이 없었다. 문제의 힌트를 찾는 도중 임의의 문자로 submit 후 쿠키 값을 확인해보면 userid 쿠키값이 새로 생성되어 있

dailylearn.tistory.com

WEBHACKING.KR 19번 : 네이버 블로그 (naver.com)

 

WEBHACKING.KR 19번

https://webhacking.kr/challenge/js-6/ 우선 처음 화면은 이러하다. admin이 쓰여있기 때문에 제출을 일단...

blog.naver.com