카테고리 없음

[워게임/웹 해킹] webhacking.kr old-39

공지혜 2026. 5. 21. 17:43

https://webhacking.kr/challenge/bonus-10/

 

Chellenge 39

 

webhacking.kr

 

문제에 들어가면 바로 이런 입력창과 소스 코드를 볼 수 있는 링크가 있다.

 

<body> 부분부터 소스 코드를 읽어 보면, 일단 db와 연결하고, POST로 id가 잘 들얼왔는지 확인한다. 입력창에 입력하는 값이 $_POST['id']가 되는 것 같다. 

입력값이 들어왔으면

1. str_replace로 \\을 없앤다.

2. str_replace로 '는 ''로 바꾼다.

3. substr으로 id값을 인덱스 0으로부터 15글자를 자른다. (총 15글자)

이 과정을 거친 것이 최종 $_POST['id']값이 된다. 

 

다음은 mysql 쿼리문으로 result값을 구성하는 것이다.

대충 해석해 보면 member로부터 1을 가져온다는 뜻인 것 같다. 조건은 id 길이<14 그리고 id=$_POST[id]이다.

그렇다면 사실상 substr으로 잘라 놨으니까 첫 번째 조건은 무조건 성립되고(어 지금 봤더니 아니네), 나는 지금. db를 알 수 없으니까 id를 맞히는 것도 아닐 것이다.

 

그냥 abc를 넣어 봤는데 안 됐다. 

그래서 진짜 뭘 입력해야 하는지 막막했는데, 힌트는 따옴표에 있었다.

$result mysqli_fetch_array(mysqli_query($db,"select 1 from member where length(id)<14 and id='{$_POST['id']}"));

이게 쿼리문인데, select 문장을 자세히 보자. 가장 바깥쪽에 큰따옴표는 닫혀 있는데, id=이 시작할 때 붙은 작은 따옴표는 안 닫혀 있다.

그래서 나는 입력값을 적절히 입력해서 작은 따옴표가 닫히게 만들어야 한다.

방법은, 먼저 '를 입력해서 ''로 바뀌게 만들고, 이때 마지막 '은 15번째 인덱스가 되게 만들어서 잘리게 하면 된다.

 

그래서 그냥 guest(공백9개)'를 입력해 봤더니 풀렸다.

현재 입력값이 15글자가 되어서 마지막에 붙은 '은 잘리게 된다. 그래서 두 번째 조건의 작은 따옴표가 닫혀서 성공.

그리고 length(id)는 guest=guest+(공백9개)를 똑같이 처리한다고 한다. 그래서 첫 번째 조건도 성공.