[Dreamhack 드림핵] Type c-j WriteUp
2024. 2. 1. 15:00ㆍHacking/WebHacking Wargame Writeup
문제 링크
https://dreamhack.io/wargame/challenges/960
문제
풀이
첫 화면이 이렇게 펼쳐지는데 일단 막막하므로 코드를 먼저 살펴본다.
function getRandStr($length = 10) {
$characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
$charactersLength = strlen($characters);
$randomString = '';
for ($i = 0; $i < $length; $i++) {
$randomString .= $characters[mt_rand(0, $charactersLength - 1)];
}
return $randomString;
이 부분에 대한 코드 해석을 우선적으로 진행해야한다.
getRandStr() 함수는 숫자, 영문을 조합해서 랜덤 출력하는 함수이다.
여기서는 인수에 $length = 10이 들어가 있으므로 랜덤 값을 10번 가져와서 randomString이라는 변수에 저장할 것으로 보인다.
$id = getRandStr();
$pw = sha1("1");
id에 getRandstr()에서 생성한 랜덤한 아이디를 저장하고 pw에는 sha1()함수에 1을 넣어 암호화한 값을 넣는 것이다.
sha1() 함수는 단방향 암호의 종류이다.
아무튼 그런데,
if((int)$input_id == $id && strlen($input_id) === 10){
echo '<h4>ID pass.</h4><br>';
if((int)$input_pw == $pw && strlen($input_pw) === 8){
echo "<pre>FLAG\n";
echo $flag;
echo "</pre>";
}
} else{
echo '<h4>Try again.</h4><br>';
}
}else {
echo '<h3>Fail...</h3>';
}
아이디는 길이가 10과 같아야 하고 패스워드는 길이가 8과 같아야한다는 조건이 있다.
이걸 해결하면 FLAG를 획득할 수 있다고 나와있다.
sha1(1)을 해시 생성기에 돌리면
356A192B7913B04C54574D18C28D46E6395428AB
여기서 8자리만 잘라서 비밀번호를 생성하고, (356a192b)
아이디는 문자열을 int형으로 전환하라고 하는데, 이때 앞에 숫자가 없으므로 0으로 10자리를 채우면 되니까,
플래그를 얻을 수 있다.
'Hacking > WebHacking Wargame Writeup' 카테고리의 다른 글
[Dreamhack 드림핵] Baby-union Writeup (0) | 2024.02.05 |
---|---|
[Dreamhack 드림핵] amocafe WriteUp (0) | 2024.01.31 |
[Dreamhack 드림핵] php7cmp4re WriteUp (0) | 2024.01.31 |
[Dreamhack 드림핵] web-misconf-1 WriteUp (0) | 2024.01.31 |
[Dreamhack 드림핵] simple-web-request WriteUp (0) | 2024.01.28 |