webhacking.kr - old4
2021. 3. 31. 14:32ㆍWarGame/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 |