webhacking.kr 6번, 14번 풀이

julia·2021년 3월 15일
0
post-thumbnail

작년 2학기에 과 동아리에서 웹해킹 스터디를 했는데, 설렁설렁한 느낌도 있고 내가 과연 이번에는 워게임을 풀고 이해하는 능력이 될 지 궁금해져서 올해는 워게임을 풀어보기로 했다. 시험기간 제외하고 challenge(old)를 일주일에 8문제정도씩 난이도가 낮은 순서대로 풀 예정인데 첫 문제부터 쉽지 않을 것 같다ㅋㅋㅋ

6번 문제 설명

6번 문제 클릭하면 나오는 이미지. 누가봐도 뷰 소스 누를 것 같은 느낌. 클릭하면 밑의 소스파일이 뜨는데 이를 해석해보면~~


인코딩 코드 : user 쿠키값이 없다면 val_id 값에 guest, val_pw 값에 123qwe을 저장하고 20번 인코딩해 각각 user쿠키와 password쿠키에 저장한다.(현재 쿠키값을 확인해보면 이미 복잡한 값들이 있는 상태이고 이 곳에 우리가 구한 답을 넣으면 될 것 같다.)
디코딩 코드 : user와 password 쿠키값을 가져와 특수문자 -> 숫자 치환, 20번 디코딩했을 때 해당 값들이 admin과 nimda이면 문제가 해결된다는 뜻.
결국!! admin과 nimda를 반대로 20번 인코딩한 후 그 값을 user와 password 쿠키값으로 각각 넣어주면 되는 문제!!

💡 6번 문제 풀이

사실 여러 방식으로 풀 수 있다. 구글의 base64 인코딩 툴이나 burpsuite를 사용해 20번 인코딩을 할 수도 있고, 파이썬이나 JS로 코드를 직접 짜는 것도 가능하다. 나는 둘 다 해보았는데, 이 곳에는 내가 검색하며 짠 간단한 파이썬 인코딩 코드를 올려볼 것이다. val_id를 val_pw로 바꾸고 "admin" 대신 "nimda"를 넣어 한 번 더 실행하면 끝! 이제 결과 값을 쿠키에 넣으면 정말 문제가 풀리고 영광스러운 첫 100포인트를 얻을 수 있게 된다.

import base64

val_id = b"admin"  # user_id를 byte형으로 지정

for i in range(20):
    val_id = base64.b64encode(val_id)

val_id = val_id.decode("utf-8")

before = "12345678"
after = "!@$^&*()"
change = val_id.maketrans(before, after)

print(val_id.translate(change))

💡 14번 문제 풀이

문제 풀이를 바로 하자면 :
밑의 코드를 보면, url에서 .kr 의 인덱스를 찾아 30을 곱한 값을 대입하면 된다는 것을 알 수 있다.
https://webhacking.kr/challenge/js-1/
이것이 현재 url이고 .kr은 18번째에 있다. 그러므로 답은 18*30 = 540 ~~

<body>
<br><br>
  <form name="pw">
  	<input type="text" name="input_pwd">
    	<input type="button" value="check" onclick="ck()">
  </form>
  <script>
  function ck(){
    var ul=document.URL;
    ul=ul.indexOf(".kr");
    ul=ul*30;
    if(ul==pw.input_pwd.value) { location.href="?"+ul*pw.input_pwd.value; }
    else { alert("Wrong"); }
  }
  </script>
</body>
profile
Move Forward

0개의 댓글