728x90
<?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>
sql injection 문제이다.
id랑 pw중 하나만 파훼하면 되긴 하는데 addslashes 함수는 utf-8 변환 기능이 없으면 파훼하질 못한다..
그래서 md5를 파훼해야 하는데 md5는 역계산이 안되지만 같은 문자열을 암호화 했을때 암호화 된 문자열이 서로 달라도 같게 인식하는 취약점이 있다.
그 전에 md5함수 두번째 인자로 true가 왔는데 이게 true 가오면 길이가 16인 바이너리 형식으로 변환 된다고 한다.
https://www.php.net/manual/en/function.md5.php
그래서 md5를 파훼하기 위해선 password에 ' or 1 이런식의 문장이 와야하는데 하나하나 암호화 하면서 하기엔 시간이 너무 오래걸린다.
구글링을 해보니 외국 프로그래머가 이미 발견해놓은 md5암호 문자열이 있었다.
https://cvk.posthaven.com/sql-injection-with-raw-md5-hashes
이 사이트의 문자열을 password에 복붙하면 통과하게 된다.
728x90
반응형
'Web Hacking > Webhacking.kr' 카테고리의 다른 글
Webhacking.kr old-21 풀이 (0) | 2023.12.27 |
---|---|
Webhacking.kr old-12 풀이 (0) | 2023.12.27 |
Webhacking.kr old-10 풀이 (0) | 2023.12.24 |
Webhacking.kr old-41 풀이 (0) | 2023.12.24 |
Webhacking.kr old 43 풀이 (0) | 2023.12.21 |