Home Take a careful look at the code
Post
Cancel

Take a careful look at the code

Hack The Box를 문제를 풀던 중 별거 아니였지만 꽤 고전한 부분에 대해서 적으려고 합니다.

What happening?

admin계정으로 로그인을 하면 FLAG를 주는 단순한 문제였습니다.
계정은 JWT 토큰으로 관리되어 있어 None Attack등 과 같은 공격은 불가했습니다.

아래의 코드처럼 파라미터(id,pw)의 개수가 2개가 아니라면 에러를 출력하는 코드였습니다.
파라미터를 2개를 주나 1개를 주나 결과는 false가 되므로 if문을 우회할 수 있었습니다.

  • 물론 다른 코드에서 DB에서 검증을 pw로 비교하는 구문 자체가 없어서 가능한 거지만….
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php

$origin_data = array("id","passwd");
$attack_data = array("id");

// 취약한 코드
echo var_dump(!count($origin_data)==2); -> bool(false)
echo var_dump(!count($attack_data)==2); -> bool(false)


// 바로 아래는안전한 코드지만 == 느슨한비교가 되기에 맨 아래가 제일 안전함
echo var_dump(!(count($attack_data)==2)); -> bool(true) 
echo var_dump(count($attack_data)!==2); -> bool(true)
?>

후기

막상 생각하면 코드 자체가 동작을 안하는건데.. 파라미터가 2개여야 동작하는줄 알고 넘어가버려서 시간 낭비를 많이 했습니다.
요즘들어 많은 것을 느끼는데 코드를 빨리 대충 넘겨보네요… 별로 좋은 것이 아닌데 습관이 되지않도록 조심해야겠습니다!