-
[LOS] 11. golem 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 18. 17:13
이번 문제에서는 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
pw의 길이가 8이라는 것을 알았으니 이제 실제 pw를 찾아보자.
substr 함수는 substring 함수나 mid 함수 등으로 우회할 수 있는데, 여기서는 substring 함수를 사용할 것이다.
(∵ preg_match의 필터링 목록을 자세히 보면, substr(, 열린 괄호까지 필터링하기 때문에 substring 함수는 필터링에 걸리지 않아 사용 가능하다.)
(mid 함수는 아래 접은 글을 참조하자.)
...더보기
mid 함수
- 형식: mid(string 추출할 문자열, int pos, int len)
- 리턴값: 추출할 문자열의 pos번째 문자부터 우측으로 len 길이만큼의 문자열을 반환
- 예시: mid('lemon', 2, 2)
- 리턴값: em
(출처: http://www.spatium.co.kr/languages/content.php?chno=5&bno=37)
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이므로 이를 인자로 주면 문제가 해결된다.
'Wargame > LOS (Lord of SQL Injection)' 카테고리의 다른 글
[LOS] 13. bugbear 문제 풀이 (0) 2019.07.19 [LOS] 12. darkknight 문제 풀이 (0) 2019.07.18 [LOS] 10. skeleton 문제 풀이 (0) 2019.07.17 [LOS] 9. vampire 문제 풀이 (0) 2019.07.17 [LOS] 8. troll 문제 풀이 (0) 2019.07.17