본문 바로가기
Webhaking/WebHaking CTF

[Webhaking.kr] old 9번

by Y06 2020. 11. 9.

 

9번 문제에 들어가니 패스워드를 입력하는 칸이 나왔다. 아무래도 패스워드를 알아내는 것이 문제인 것 같다.

1, 2, 3을 차례대로 눌러보았다.

 

1을 눌렀더니 1,2,3이 있던 자리에 Apple이 뜨고 url get 방식으로 no=1이 전송된다.

2를 눌렀더니 apple과 같이 1,2,3이 있던 자리에 banana가 뜨고 urlapple no=1이 전송되었지만 banana에서는 get방식으로 no=2가 전송된 것을 볼 수 있다.

3을 눌렀더니 다른 번호들과 같이 no=3이 전송되었지만 apple, banana 같은 단어가 아닌 Secret이 출력되고 hint column이 주어진다.

 

Column id no만 있는 것을 보면 apple banana id의 값이고 secret id 값을 나타내는 것이 이번 문제인 것 같다.

1, 2, 3 이외의 값을 넣었더니 1,2,3도 뜨지 않고 패스워드 창만 뜬다.

0을 넣었더니 처음 메인 페이지가 뜬다.

No의 값은 1, 2, 3의 값만 존재하는 것으로 추측하면 그 이외의 값에는 패스워드 폼만 보이는 것으로 보아

‘Select id from chellenge9_tb where no=$GET[no]’ 가 소스코드에 있다는 것을 추측할 수 있다.

쿼리문의 결과 값이 페이지에 출력되는 것을 보고 값을 찾는 Blind SQL Injection 문제인 것 같다.

우선 Injection Vector를 찾기 위해 no‘(싱글 쿼터)를 입력해보았다.

‘Access Denied’가 출력된다.

문자가 필터링 되어있다. 필터링된 문자열은 >, <, =, % 등등이 있다.

Id 값을 찾는 것이 맞는지 알아보기 위해 hint에서 주어진대로 길이가 11인지 확인하기 위해 =의 우회로 like를 공백에서 %의 우회를 위해 ()를 대신 사용하였다.

No의 값에 따라 페이지의 출력 값이 달라지는 것을 확인하기 위해 if문을 사용하였다.

11이 맞으면 no=1이 되어 apple이 나와야 한다.

예상과 다르게 바나나가 출력되었다. 경우의 수를 차례대로 해보았다.

참일 때 no의 값을 3으로 주고, 거짓일 때 0으로 주었더니 Secret이 출력되었다. 참의 값을 3으로 두고 거짓일 때의 값을 1,2로 설정했더니 거짓일 때의 값으로 출력되었다. 따라서, no 1,2일 때 id 값이 존재하기 때문에 이러한 결과가 나오는 것으로 유추해보았다.

실패하였다.

성공하였다.

같은 방법으로 하니 banana도 출력이 된다.

 

참과 거짓을 구분할 수 있게 되었다.

?no=if(length(id)like(0x61),3,0)이면 Secret이 출력된다는 것을 유추할 수 있다.

이후로는 잘 모르겠다. 문제를 풀지 못했다.

'Webhaking > WebHaking CTF' 카테고리의 다른 글

[Webhaking.kr] old 1번  (0) 2020.11.26
[Webhaking.kr] old 22번  (0) 2020.11.09
[Webhaking.kr] old 27번  (0) 2020.11.05
[Webhaking.kr] old 18번  (0) 2020.11.05
[Webhaking.kr] old 17번  (0) 2020.10.02