촉촉한초코칩

wargame.kr md5 password 본문

Study/Web Hacking

wargame.kr md5 password

햄친구베이컨 2024. 9. 23. 17:39

 

코드

<?php
 if (isset($_GET['view-source'])) {
  show_source(__FILE__);
  exit();
 }

 if(isset($_POST['ps'])){
  sleep(1);
  include("./lib.php"); # include for $FLAG, $DB_username, $DB_password.
  $conn = mysqli_connect("localhost", $DB_username, $DB_password, "md5_password");
  /*
  
  create table admin_password(
   password char(64) unique
  );
  
  */

  $ps = mysqli_real_escape_string($conn, $_POST['ps']);
  $row=@mysqli_fetch_array(mysqli_query($conn, "select * from admin_password where password='".md5($ps,true)."'"));
  if(isset($row[0])){
   echo "hello admin!"."<br />";
   echo "FLAG : ".$FLAG;
  }else{
   echo "wrong..";
  }
 }
?>
<style>
 input[type=text] {width:200px;}
</style>
<br />
<br />
<form method="post" action="./index.php">
password : <input type="text" name="ps" /><input type="submit" value="login" />
</form>
<div><a href='?view-source'>get source</a></div>


데이터베이스이름은 md5_password이고, DB_username과 DB_password는 데이터베이스의 사용자이름과 비밀번호이다. 

그 안에 테이블명은 admin_password로, password의 값이 열로 들어있다.? 

select문에서 password가 md5로 생성한 값과 같으면(행이 있으면) flag를 출력한다. 

mysqli_real_escape_string(connection, escapestring); → connection과 escape형태로 만들어줄 string을 입력한다.
→  필터링? 

md5에서 true인자는, ps 값을 binary로 출력하라는 뜻이다. 

 

md5 취약점

조건문을 보면 where password의 값이 md5의 리턴값과 같아야 한다. 

만약 여기에 'or'을 넣게 된다면 select * from admin_password where password=' 'or' '이 되어 
password = '' or ''
false or true true를 반환하게 된다. 

그러므로 md5의 첫번째 값에 or을 넣어서 생성되는 값을 넣어본다. (온라인 암호화 생성기가 많이 있긴 하지만 binary로 입력해야 한다.)

129581926211651571912466741651878684928

 

참고 : https://m.blog.naver.com/PostView.naver?isHttpsRedirect=true&blogId=is_king&logNo=221532839875

'Study > Web Hacking' 카테고리의 다른 글

Dreamhack - Apache htaccess  (0) 2024.10.05
Dreamhack - blind sql injection advanced  (0) 2024.09.29
wargame.kr type confusion  (0) 2024.09.13
wargamme.kr - tmitter  (1) 2024.09.13
Dreamhack - login filtering  (1) 2024.09.06