write-up(web)/webhacking.kr

[Webhacking.kr] old-04

chanchand 2023. 2. 19. 17:07
반응형

문제


<?php
  include "../../config.php";
  if($_GET['view-source'] == 1) view_source();
?><html>
<head>
<title>Challenge 4</title>
<style type="text/css">
body { background:black; color:white; font-size:9pt; }
table { color:white; font-size:10pt; }
</style>
</head>
<body><br><br>
<center>
<?php
  sleep(1); // anti brute force
  if((isset($_SESSION['chall4'])) && ($_POST['key'] == $_SESSION['chall4'])) solve(4);
  $hash = rand(10000000,99999999)."salt_for_you";
  $_SESSION['chall4'] = $hash;
  for($i=0;$i<500;$i++) $hash = sha1($hash);
?><br>
<form method=post>
<table border=0 align=center cellpadding=10>
<tr><td colspan=3 style=background:silver;color:green;><b><?=$hash?></b></td></tr>
<tr align=center><td>Password</td><td><input name=key type=text size=30></td><td><input type=submit></td></tr>
</table>
</form>
<a href=?view-source=1>[view-source]</a>
</center>
</body>
</html>

 

 

문제풀이


10000000 ~ 99999999 숫자 중 하나 + salt_for_you를 chall4 세션값에 저장

위의 값을 sha1 500번 수행한 후, hash 변수에 저장

hash 값은 화면에 출력하고, 사용자가 입력한 키 값이 chall4 세션값과 동일하면 문제해결

해시값은 복호화가 불가능하기 때문에, 레인보우 테이블을 통해 원래 값을 알아내야 함

 

  • 레인보우 테이블
from hashlib import sha1

f=open("hash.txt","w")

for i in range(10000000,20000000):
  hash=str(i)+"salt_for_you"
  for j in range(0,500):
    hash=sha1(hash.encode('utf-8')).hexdigest()

  f.write(str(i)+":"+hash[:8]+"\\n")

f.close()

 

반응형

'write-up(web) > webhacking.kr' 카테고리의 다른 글

[Webhacking.kr] old-06  (0) 2023.02.19
[Webhacking.kr] old-05  (0) 2023.02.19
[Webhacking.kr] old-03  (0) 2023.02.18
[Webhacking.kr] old-02  (0) 2023.02.18
[Webhacking.kr] NotSQL  (0) 2023.01.19