[LOS] 11번 - golem

2022. 1. 5. 22:52카테고리 없음

golem

이번 문제에서는 or과 and를 필터링할 뿐만 아니라, 등호(=)와 substr 함수까지 필터링한다. 그런데 하단의 코드를 보면 알 수 있듯이, pw를 알아내야 문제가 풀리므로 substr 함수가 아닌 다른 함수를 사용하여 pw를 알아내야 한다.

 

or ||로, and &&(%26%26)으로 우회 가능하다.

또한 등호(=) LIKE로 우회가 가능하므로, 아래와 같이 인자를 주면 Hello admin 문구가 출력된다.

 

pw=1' || id like 'admin

 

이를 이용해서 pw의 길이를 알아내보자. 

 

pw='1' || id like 'admin' %26%26 length(pw) like 8--%20

length(pw) = 8

 

pw의 길이가 8이라는 것을 알았으니 이제 실제 pw를 찾아보자.

substr 함수는 substring 함수나 mid 함수 등으로 우회할 수 있는데, 여기서는 substring 함수를 사용할 것이다.

(∵ preg_match의 필터링 목록을 자세히 보면, substr(, 열린 괄호까지 필터링하기 때문에 substring 함수는 필터링에 걸리지 않아 사용 가능하다.)

(mid 함수는 아래 접은 글을 참조하자.)

 

string 함수는 substr 함수처럼 똑같이 사용하면 된다.

 

pw=1 || id like 'admin' %26%26 ascii(substring(pw,1,1)) like 55--%20

 

 

자동화 프로그램을 이용하여 pw를 찾아냈다.

자동화 프로그램의 소스코드는 여기를 참조하자. (https://g-idler.tistory.com/42?category=845163)

 

 

pw는 77d6290b이므로 이를 인자로 주면 문제가 해결된다.