분류 전체보기(86)
-
[LOS] 13번 - bugbear
no와 pw 2개의 인자를 GET 방식으로 입력받는다. pw에서는 싱글 쿼터(')를 필터링하고, no에서는 싱글쿼터('), substr 함수, ascii 함수, 등호(=), or, and, like, 0x, 공백까지 모두 필터링한다. 따라서 이 모든 필터링을 피해서 pw를 찾아내야 한다. 우회 방법은 아래와 같다. 공백 → \n (URL Encoding: %0a) 등호(=), LIKE → instr 함수, IN 연산자, 부등호() 싱글 쿼터(') → 더블 쿼터(") ascii 함수 → ord 함수, hex 함수 substr 함수 → mid 함수 OR → || AND → && (URL Encoding: %26%26) instr 함수에 대한 설명은 아래를 참조하자. 더보기 더보기 등호(=) 대신 IN 연산자..
2022.01.07 -
[LOS] 12번 - darkknight
darkknight 이번에는 pw와 no 2개의 인자를 GET 방식으로 입력받는다. pw는 싱글 쿼터(')를 필터링하고, no는 싱글 쿼터('), substr 함수, ascii 함수, 등호(=)를 필터링한다. 싱글 쿼터(')의 사용이 막힐 경우, 더블 쿼터(")로 대체하여 사용할 수 있다. 또한 등호(=)는 like로 대체하여 사용한다. 이를 이용하여 pw의 길이를 알아내자. pw=1&no=1 or id like "admin" and length(pw) like 8 length(pw) = 8 이제 실제 pw가 무엇인지 알아내자. ascii 함수는 ord 함수로 대체해서 사용할 수 있다. substr 함수는 mid 함수로 대체하자. (바로 이전 문제인 golem과 달리 darkknight는 substr만 ..
2022.01.06 -
[LOS] 11번 - golem
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를 찾아보자. ..
2022.01.05 -
[LOS] 10번 - skeleton
쿼리문 뒷부분에 and 1=0이라는 거짓인 구문이 존재한다. 이 구문 때문에 전체 쿼리문이 거짓이 되어 수행이 되지 않는 것이다. 따라서 뒤의 and 1=0 구문이 무시될 수 있도록 pw를 조작해야 한다. 즉, and 1=0 부분을 #이나 --으로 주석처리하면 해당 구문이 무시되어, 이전 구문을 참으로 만들 수 있다. pw=1' or id='admin'--%20 전달하면 clear
2022.01.04 -
[LOS] 9번 - vampire
id를 입력하면, strtolower 함수에 의해 입력한 문자열이 모두 소문자로 변환된다. 또한 id에 admin을 입력할 경우 str_replace 함수에 의해 공백으로 필터링된다. 이 두 함수를 모두 우회하여 admin으로 로그인해야 문제가 해결될 것이다. troll 문제 때처럼 ADMIN을 입력해도 strtolower 함수 때문에 다시 admin으로 변환되기 때문에 결국 str_replace 함수 필터링에 걸리게 된다. 따라서 결론적으로는 str_replace 함수를 우회해야 한다. str_replace 함수는 문자열 중간에 같은 문자열을 끼워넣으면 우회가 가능하다. 즉, 아래와 같이 입력하면, str_replace 함수에 의해 끼워넣어진 admin이 공백으로 필터링되고, 양옆의 admin만 남아서..
2022.01.03 -
[LOS] 8번 - troll
troll id를 admin으로 주면 해결되는 문제인데, admin 문자열이 필터링에 걸려있다. 하지만 preg_match에 i가 없는 것으로 보아, admin 문자열을 대소문자 구분 없이 필터링하지 않을 것이다. 즉, admin과 ADMIN은 다른 문자열로 인식하기 때문에 해당 필터링을 우회할 수 있다. 따라서, id의 인자를 ADMIN으로 넣어주면 문제가 해결된다.
2022.01.02