본문 바로가기
CTF_write_up/h3xor

H3XOR_초보개발자의하루

by 강깅꽁 2017. 1. 8.



<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>초보 개발자의 일기</title>
<script src="./h3xor.js"></script>
<link rel="stylesheet" type="text/css" href="./h3xor.css">
</head>
<body>
<div class="container" align="center">
<div class="header">
<br><br><br><br><br>
<p align="right" style="font-family: 'Noto Sans KR', sans-serif; color: darkgrey;" class="title">made by ch4n3</p>
<h1 align="right" style="font-family: 'Noto Sans KR', sans-serif;" class="title">
<a href="./h3x0r.php" class="title">초보 개발자의 하루</a>
</h1>
</div>
<p>히힛 오늘은 개발 배우기 시작한지 딱 한달되는 날이다! 정말 기분 좋다ㅎㅎ</p>
<p>개발할 때 마다 일기를 쓰고 있는데 정말 재밌는 것 같다.</p>
<textarea id="daily" rows="1"></textarea>
<button type="button" id="submit" value="일기 보기" class="button5">일기보기</button>
<p>일기를 보려면 일(日)을 입력해주세용~~ (ex. 1)</p><br><br><br>
<div id="daily_note" class="daily">
<!-- SDNYMFJ7RjFyNXRfbDM0Zg== -->
</div>
</div>
</body>
</html>

// 메인 화면이다.


<br />
<b>Warning</b>:  mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in <b>/host/home3/chaneyoon/html/json.php</b> on line <b>12</b><br />
[{"daily":null},{"V20xNGFGcDNQVDA9":"Vm0wd2QyUXlVWGxXYTJoV1YwZG9WVll3Wkc5alJsWjBUVlpPV0Zac2JETlhhMUpUVmpGS2MySkVUbGhoTWsweFZqQmFZV015U2tWVWJHaG9UVlZ3VlZadGNFZFpWMDE1VTJ0V1ZXSkhhRzlVVm1oRFZWWmFkR1ZHV214U2JHdzBWakkxUjFaWFNraGhSemxWVmpOT00xcFZXbUZrUlRGVlZXeHdWMDFFUlRGV2EyUXdWakZXZEZOc1dsaGlSMmhZV1ZkMFlWUkdWWGhYYlhSWFRWZFNlbFl5TVRSVk1rcElaSHBDVjAxdVVuWldha3BIVmpGT2RWVnNXbWhsYlhob1YxZDRiMkl4VFhoalJtaHNVak5TV0ZSV1dtRmxWbFY1VFZSU1ZrMXJjRmhWTW5SelZqSktWVkZZYUZabGExcHlWVEJhVDJOdFJrZFhiV3hUWVROQ2RsWnRNWGRVTVZWNFlrWmthbEp0YUhOVmFrSmhZMVpzY21GRlRsTmlSbkJaV2xWYVQxWlhTa2RqUkVaV1ZqTm9lbFpxU2tkamJVVjZZVVprVTFKWVFrbFdWM0JIVkRKU1YxVnVUbWhTTW1oeldXeG9iMWRzV1hoWGJYUk9VbXR3TUZaV2FHOVdiVXBIWTBac1dtSkdXbWhaTVZwelkyeGtkRkp0ZUZkaVZrbzFWbXBLTkZReVJrZFhiazVxVTBoQ1lWUlZXa3RoUmxweFUydDBWMVpyV2xwWlZWcHJZVWRGZUdOSE9WZGhhMHBvVmtSS1QyTXlUa1phUmxwcFZqTm9WVlpHWTNoaU1rbDRWMWhvV0dKRk5WVlVWbHBYVFRGU2MyRkZPV2hpUlhCNldUQmFjMWR0U2tkWGJXaFhUVVp3YUZwRlpFOU9iRXB6WVVkc1UwMHlhRmxXYlhCTFRrWlJlRmRzYUZSaE1sSnhWV3RXUzJGR1ZuSldWRVpPVFZad2VGVnRkREJWTWtwSVZXcENXbFpXY0ROWmEyUkdaV3hHY21KR2FGaFRSVXBKVm10U1IyRXhaRWRVYmtwb1VqTm9WRmxZY0ZkWFZscFlZMFU1YVUxWFVraFdNalZUVkd4YVIxTnRPVlZXTTFKNlZHdGFWMk15UmtoUFZtUnBWbGhDU2xac1pEUmpNV1IwVTJ0b2FGSnNTbUZVVmxwM1ZrWmFjVkp1WkZOTlZrb3dXbFZhYTJGV1NYcFpNMmhYVFc1b1dGWnFSbEpsUm1SWldrVTFXRkpZUWxsWFZtUjZUVlpzVjFWc1dsaGliVkpZVlcxNGQyVkdWblJOVldSWFRVUkdlVlJzVm05V01VbzJVbXRvVjFaRldreFdha3BQVW14YWMxcEhiRk5OVlZZelZteGFVMUl4YkZkWGJrcE9WbXh3V0ZsWWNGZFdSbFp5Vm10YVQxVlVNRGs9"}]

json.php의 응답값이다.



해당 문제는 ajax로 요청한 쿼리를 받아서 화면에 뿌려주게 된다.

하지만 ajax로 요청시 json.php에서 요청을 처리 후 요청 값을 받아온다.


json 처리 방법에 관해서는 아직 공부를 안해서 이 글은 추측에 맡긴다.


먼저 json 처리시 해당 데이터를 신뢰하는지에 대한 토큰 값이 담기게 되는데

이 토큰은 jwt로 불린다 _  https://blog.outsider.ne.kr/1160


해당 돌아온 응답값에 대해서 알아보았다. 처음에는 ==로 끝나지 않아서 base64는 아니고 다른 암호화 방식일거라 여겻고 다른 암호화 방식을 찾아보게 되었다. 그러던중 jwt를 알게 되었고 위의 블로그에 들어가서 base64로 암호화 한다는것을 알았다.


따라서 

위의 사용자에게 노출되는 데이타이외의 다른 데이터를 열심히 base64 로 디코드하여 플래그를 얻었다.