webhacking.kr - old4

2021. 3. 31. 14:32WarGame/webhaking.kr

해당 문제는 레인보우 테이블을 활용하는 문제입니다.

<?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를 합쳐서

sha1암호화를 500번 하고 값을 출력합니다.

저희는 암호화 전의 값하고 똑같은 값을 찾아야 하기에 즉 rainbowtable을 작성해야합니다.

from hash.b import shai

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

for i in range(i0000000, i00000000) :
    tmp = str(i)+"salt_for_you"
    for j in range(0, 500) :
        tmp = shai(tmp.encode('utf-8')).hexdigest()
    print("number [" + str(i) + "] is " + str(tmp))
    f.write("\n" + str(i) + " is " + str(tmp))

f.close()

위는 제가 사용한 코드이고,

여기서 뒤에서부터 구하게끔 하나 더 만들어서 2개의 쓰레드를 만들었습니다.

저는 5%정도 만들어졌을때 노가다 해서 여러번 시도해서 값을 찾았습니다.

 

테이블에서 값을 찾고,

 

값을 입력했습니다.

'WarGame > webhaking.kr' 카테고리의 다른 글

webhacking.kr - old46  (0) 2021.04.03
webhacking.kr - old3  (0) 2021.04.02
webhacking.kr - old5  (0) 2021.03.30
webhacking.kr - old7  (0) 2021.03.29
webhacking.kr - old21  (0) 2021.03.25