일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- Hackerschool
- 뉴스클리핑
- termux
- BOF
- 웹해킹
- SQL Injection
- ftz
- 보안뉴스
- Python
- CodeEngn
- Shadow 동아리
- 리버싱
- RITSEC CTF 2019
- webhacking
- requests
- Linux
- buffer over flow
- RITSEC
- NewsClipping
- HackCTF
- 버퍼오버플로우
- 리눅스
- Nop Slide
- 어셈블리어
- reversing
- x64dbg
- Next.js
- PWN
- ctf
- writeup
Archives
- Today
- Total
Jaeseo's Information Security Story
webhakcing.kr - old 4번 - WriteUp 본문
일단 문제를 들어가 봅니다!
들어가 보면 이상한 hash값과 password를 입력 할 수 있는 inputbox가 제공되어 있습니다.
view-source를 클릭 하여 소스를 확인해봅니다.
<?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>
소스를 보니 random한 숫자에 salt_for_you를 붙이고 그값을 저장한후 그값을 500번 sha1 hash 한 다음 그값을 보여 주는 것으로 보입니다. hash를 하기전 random.salt_for_you의 값을 알아야지 넘어갈수 있는데 이때 rainbow table를 사용하여 문제를 해결 하면 될것 같습니다.
import hashlib
for i in range(10000000,100000000):
hash_tmp = str(i)+"salt_for_you"
f = open("rainbow_table.txt", 'a')
f.write(hash_tmp+":")
for j in range (0,500):
hash_tmp = hashlib.sha1(hash_tmp.encode('utf-8')).hexdigest()
f.write(hash_tmp+"\n")
f.close()
'''
$hash = rand(10000000,99999999)."salt_for_you";
$_SESSION['chall4'] = $hash;
for($i=0;$i<500;$i++) $hash = sha1($hash);
'''
스크립트를 돌리게 되면 이렇게 무수히 많은 table이 생성이 되는데 시간이 오래 걸려서 노트북을 계속 켜둘수 없는 관계로 termux를 이용하여 자기전에 스마트폰에서 스크립트를 돌리고 잠을 잤습니다.
자고 일어나서 보니 아직도 10/1만 되어 있는 상황이고 스마트폰 배터리가 너무 심각 하게 빨리 소모 되어서 포기했습니다...
그래서 이번에는 threading을 통해서 작업을 돌립니다!
import hashlib
import threading
def maketable(i):
start = i*10000000
finish = (i+1)*10000000
print(start,finish)
for i in range(start,finish):
hash_tmp = str(i)+"salt_for_you"
f = open("rainbow_table.txt", 'a')
f.write(hash_tmp+":")
for j in range (0,500):
hash_tmp = hashlib.sha1(hash_tmp.encode('utf-8')).hexdigest()
f.write(hash_tmp+"\n")
f.close()
for i in range(1,10):
t = threading.Thread(target=maketable,args=(i,))
t.start()
'''
$hash = rand(10000000,99999999)."salt_for_you";
$_SESSION['chall4'] = $hash;
for($i=0;$i<500;$i++) $hash = sha1($hash);
'''
이제 완성된 파일을 봅니다.
약 5.53GB의 파일이 만들어진것을 확인 할 수 있습니다.
이제 grep 명령어를 이용하여 확인을 해봅니다.
예전에 풀었는데 귀찮아서 계속 미루다가 이제서야 올리네요 ㅋㅋ
'Write UP > webhacking.kr' 카테고리의 다른 글
webhacking.kr - old 7번 - WriteUp (0) | 2020.01.24 |
---|---|
webhakcing.kr - old 5번 - WriteUp (0) | 2020.01.09 |
webhacking.kr - old 3번 - WriteUp (0) | 2020.01.08 |
webhacking.kr - old 2번 - writeup (3) | 2020.01.06 |
Comments