촉촉한초코칩
wargame.kr md5 password 본문
코드
<?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 |