Insecure Code Management Write-up

Ccr3t·2026년 3월 21일

Wargame

목록 보기
74/76

[Solved in under 49 minutes]

워게임 너무 재밌어 짜릿해 미치겠어!

가보자



이번엔 진짜 SQLI인가 했다.

일단 소스코드를 보자


<!doctype html>
<html>
<head>
	<meta charset="UTF-8">
	<title>HR Database</title>
	<link rel="stylesheet" href="css/style.css" />
</head>

<body><link rel='stylesheet' property='stylesheet' id='s' type='text/css' href='/template/s.css' media='all' /><iframe id='iframe' src='https://www.root-me.org/?page=externe_header'></iframe>
	<form action='' method="POST">
		<img src='./image/logo.png' id='logo'>
		<h2>HR Database</h2>
						<input type="text" name="username" class="text-field" placeholder="Username" />
	    		<input type="password" name="password" class="text-field" placeholder="Password" />
	   			<input type="submit" value="LOG IN" class="button" />
				
	</form>
</body>
</html>

뭐 특별한건 없어보인다 패스

그리고 SQLI도 해보고 이것저것 보다가 그냥 실무에서 하는것과 같이 nikto, dirb 둘 다 돌려봤는데.
찾았다.

feroxbuster -u http://challenge01.root-me.org/web-serveur/ch61/ -w /usr/share/dirb/wordlists/common.txt

.git/HEAD가 200으로 떠서 바로 접속 해봤다.

접속하니 바로 다운로드 된다.

일단 한번 보자

또 경로로 추정되는 녀석이 나와서 접속하니

master라는 녀석이 다운로드 되더라

또 봤다.

c0b4661c888bd1ca0f12a3c080e4d2597382277b

뭔데 이거 암호학 문제인가 싶었는데 40자리인것으로 보아 SHA-1 문제인가 해서
일단 hashcat 돌려봤다.

뭐지? 낚시인가 싶어서 다시 돌아가

파직파직 본능으로 경로 뒤에 master를 지워봤는데

디렉토리 인덱싱이 되는것이 아닌가.

인덱싱 최상위로 올라와서 파일을 하나씩 다 봤다.

뭔가 관련있어 보이는 녀석이 나왔다.

블루팀이 sha256으로 바꾸라는 그런 git commit인가 해서 hashcat 돌려볼까 하다가
sha256이 40자리가 나올수가 없는데 뭐지 낚시인가 싶어서 일단 다른것도 봤다.

모든 답은 로그에 있다.

엄청난 단서로 추정되는 것을 발견했다.

비밀번호를 처음에 md5로 바꾸고 그리고 비밀번호를 바꾸고 마지막으로 블루팀에서 sha256으로 바꾸라고 추정되는 파일이 보였다.

git commit으로 보이니 오브젝트로 가서 해당 파일들을 한번 보자

오브젝트 파일을 볼 수 없어서 알아보니 zlib으로 되어 있어서 gittools 사용하거나
압축해제 하고 볼 수 있다고 한다.

그리하여, 간단하게 파이썬 코드로 읽도록 하였다.

import zlib

file_path = input("Git object 파일 경로 입력 (.git/objects/...): ").strip()

try:
    with open(file_path, "rb") as f:
        data = f.read()

    decompressed = zlib.decompress(data)
    print(decompressed.decode(errors="ignore"))

except FileNotFoundError:
    print("파일을 찾을 수 없습니다.")
except zlib.error:
    print("zlib 압축 해제 실패 (Git object가 아닐 수 있음)")

돌려봤는데

잘되는건 확인했는데 id적혀있는거 보고 와 찾았다 라고 생각이 들었는데
비밀번호 딱봐도 아까 힌트로 나왔던 sha256인가 싶어서 와 이거 어떻게 풀지?

레인보우테이블 써서 푸는 문제인가 숨이 턱 막히더라.

그러다가 문뜩 든 생각이 이거를 해시화하기 전에 값도 있지 않을까 하여 찾아봤는데

와 씨 바로 넣어봤는데 안되더라.

아까 commit한거 다시 봤는데 여기서 비밀번호를 바꾼것으로 추정되니 분명 바뀐 비밀번호도 있을거라고 생각하고 다시 찾아봤다.

하 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ

진짜 sha256 해시 풀어야하나 진짜 하면서 계속 의심했는데 다행이다 진자 와 씨

노가다 한거 보이냐고.

여하튼 바로 다시 로그인창으로 가져가보자~

오 된다!!! 좋아했는데

이제 뭐 어쩌라고 싶어서 찾다가

그냥 홈페이지에 넣어봤는데

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ 답 ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

s3cureP@ssw0rd

ㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡㅡ

하 ㅋㅋㅋ 또 헛짓거리 하고 있었다는 생각이 들었다

뭐 여하튼 git 구조에 대해서도 조금 공부한거 같아서 재밌게 푼거 같다.

노가다 한거 빼고..

RootMe Insecure Code Management Write-up

이상 보고 끝!

profile
웹해킹을 잘 못 하지만 좋아 하려고 노력하는 한 젊은이.

0개의 댓글