728x90
반응형
오늘은 드림핵의 login filtering문제를 풀어볼 것이다.
$ 사전 조사
먼저 웹사이트를 확인 해보자.
그냥 id pw를 입력하는 칸이 나온다.
get source로 php를 확인해보자.
<?php
if (isset($_GET['view-source'])) {
show_source(__FILE__);
exit();
}
/*
create table user(
idx int auto_increment primary key,
id char(32),
ps char(32)
);
*/
if(isset($_POST['id']) && isset($_POST['ps'])){
include("./lib.php"); # include for $FLAG, $DB_username, $DB_password.
$conn = mysqli_connect("localhost", $DB_username, $DB_password, "login_filtering");
mysqli_query($conn, "set names utf8");
$id = mysqli_real_escape_string($conn, trim($_POST['id']));
$ps = mysqli_real_escape_string($conn, trim($_POST['ps']));
$row=mysqli_fetch_array(mysqli_query($conn, "select * from user where id='$id' and ps=md5('$ps')"));
if(isset($row['id'])){
if($id=='guest' || $id=='blueh4g'){
echo "your account is blocked";
}else{
echo "login ok"."<br />";
echo "FLAG : ".$FLAG;
}
}else{
echo "wrong..";
}
}
?>
위의 php는 로그인을 성공하면 flag를 준다.
밑에 주석에서 아래처럼 사용자 정보를 준다.
<!--
you have blocked accounts.
guest / guest
blueh4g / blueh4g1234ps
-->
반응형
$ 취약점 분석
이제 취약점을 찾아보자.
일단 로그인을 위 정보로 하면 flag를 주는데, id가 guest, blueh4g 이면 계정이 막혔다고 echo한다.
그런데 그 필터링을 하는 if에서 취약점이 발생한다.
만약 id를 guest가 아닌 GUEST처럼 대문자를 넣으면, if문을 통과하여 db에 guest로 들어간다.(여기서 php에 어떻게 들어가는지 몰라서 쓸데없이 삽질을.....ㅠㅠ)
그러면 아래처럼 넣으면 로그인에 성공하게되어 flag를 획득할 수 있다.
id : GUEST
ps : guest
728x90
반응형
'Web' 카테고리의 다른 글
SQL injection이란? (with Dreamhack) (0) | 2022.02.28 |
---|---|
Dreamhack - Flask-Dev (write-up) (0) | 2022.01.01 |
Dreamhack - file-csp-1 (write-up) (0) | 2022.01.01 |
Dreamhack - simple-ssti(Write-up) (0) | 2021.12.29 |
JavaScript - HTML과 JS (0) | 2021.10.17 |