[드림핵-Write Up] 새싹_php7cmp4re

박원철·2024년 12월 23일

드림핵풀기

목록 보기
5/5

<주요개념>

  1. PHP 언어의 이해

  2. 아스키코드

<서비스 분석-1 소스코드 이해하기>


php 7.4로 페이지가 작성되어 있다고 한다. 소스코드를 분석해보자

if ($_SERVER["REQUEST_METHOD"] == "POST") {

위 코드를 보면 서버에 요청하는 메소드가 POST일 경우에만 동작한다고 한다.

$input_1 = $_POST["input1"] ? $_POST["input1"] : "";

input1의 값이 비어있지 않다면 input1에 할당하고 비어있다면 빈 문자열을 할당한다.

input2도 동일하게 설정되어 있다.

조건문을 하나씩 따라가다 보면 "echo $flag;" 을 통해 FLAG를 반환하고 있다.

<시나리오 수립>

  1. FLAG를 반환하는 중첩조건문을 만족시키면 FLAG를 찾을 수 있다.

  2. if($input_1 != "" && $input_2 != "")

input1과 2는 빈칸이 아니어야 한다.

if(strlen($input_1) < 4)

input1의 문자열 길이는 4보다 작아야한다.(3글자 이하)

if($input_1 < "8" && $input_1 < "7.A" && $input_1 > "7.9")

input1은 8보다 작고 7.A보다 작고 7.9보다 커야한다.
->7.A라는 실수는 없으므로 아스키코드를 사용하면 해석할 수 있지 않을까?

if(strlen(input_2) < 3 && strlen(input_2) > 1)

input2의 문자열 길이는 1보다 크고 3보다 작은 2다.

if($input_2 < 74 && $input_2 > "74")

input2는 74보다 작아야하고 문자열 74보다 커야한다.
-> 아스키코드를 사용해서 비교해볼 수 있겠다.

<문제풀이>

input1 -> 7.A보다 작고 7.9보다 커야한다.
7.A를 아스키코드로 바꾸면 55 46 65,
7.9를 아스키코드로 바꾸면 55 46 57,

57과 65사이의 임의의 숫자 58로 하고
55 46 58을 다시 아스키코드를 통해 변환하면 "7.:"

input2 -> 정수 74보다 작고 문자열 74보다 커야한다.
문자열 74를 아스키코드로 바꾸면 55 52

74보다 작고 55 52 보다 큰 두 글자의 문자열 55 53 을 아스키코드로 변환하면 75이다.

input1과 input2에 각각 7.: 과 75를 대입하면


Good try! 라는 답이 나온다 아마 input2의 값이 문자열이 아니라 정수로 인식해서 그럴 것이다.

아스키 코드에서 숫자를 지나 문자로 인식하는 가장 첫번째 58의 문자 :를 확인하고

input1과 input2에 각각 7.: 과 7:를 대입하면


FLAG를 획득할 수 있다.

profile
오류동키보드워리어

0개의 댓글