2022. 4. 5. 14:55ㆍSite/LOS
이번시간에는 bugbear을 풀어보겠습니다
공부하는 입장이라 틀린 것이 있더라도 양해부탁드립니다
점점 필터링이 많아지는 것 같습니다
prob _ . ( )을 필터링
substr ascii = or and like 공백 필터링
addslashes함수로 pw 필터링 -> sql injection 공격 불가능
쿼리에서 가져온 pw값과 정확히 일치해야 클리어
이번문제도 sql blind injection인 것 같습니다
우회방법
' -> "
substr -> mid
ascii -> hex
=, like -> in
or, and -> ||[%7C%7C], &&[%26%26]
공백 -> %09
일단 pw의 길이부터 구해보겠습니다
=, like을 둘다 쓰지 못하니 IN을 넣어 길이를 구했습니다
기존처럼 mid함수를 이용하여 넣어주었는데 Hello admin이라는 문구가 출력이 안됩니다
ascii코드 값이 필터링 되어있어서 변환된 값을 넣어주기 위해 ord함수, hex함수를 이용해야 됩니다
*
ord() : 문자열의 첫 번째 문자의 ASCII 값을 반환
ex) ord('hello') -> 첫글자인 h의 ASCII 값 104 반환
hex() : 출력값을 16진수 문자 값으로 변환하여 반환
hex(11) -> 0x0B
*
ord함수는 or이 필터링 처리되어 있어서 사용을 못하므로
hex함수를 사용하겠습니다
역시 길이는 8입니다
hex함수는 16진수 문자값으로 반환을 하기 때문에 mid함수를 통해 추출된 값을 16진수 문자값으로 변환하고 찾을 IN(문자값)에도 적용을 하여 일치하는 16진수 문자값이 있는지 찾아주어야 됩니다 -> mid, IN(문자열) 둘 다 hex함수 적용
pw = 52dc3991
cf) 엄청난 노가다였고 파이썬프로그램을 작성하여 다시 풀어봐야겠다