Lord Of SQL Injection [ 12. DarkNight ]

2017. 9. 13. 18:04WebHacking/Lord of SQL injection

 




[ 풀이 요령 ]


1> ord 함수

no를 입력받는 부분에 싱글쿼터가 없어서 따로 싱글쿼터를 사용할 필요가 없으며 문자가 아닌 숫자형태로 비교하면 된다

ord():    문자열의 1byte를 10진수의 아스키코드값으로 변환시킨다

ord('abcd') => a의 아스키코드값 97


2> ' = ' 대체하기

' = ' 이 막혀있어서 not 과 <>을 이용하여 ' = ' 을 대체한다


3> 스페이스바 대체하기

아스키코드표에 있는 0x09 ( Tab ) 이나 0x0a ( New line ) ... 등등 대체할 수 있는 여러가지 값들이 있음



[ 비밀번호 추측 과정 ]

1> 비밀번호 길이 확인


2> 각 패스워드 자리수 별 확인


left( 문자열 , 개수 ):    문자열의 좌측에서부터 개수만큼 문자 반환

right( 문자열 , 개수 ):    문자열의 우측에서부터 개수만큼 문자 반환

mid( 문자열 , 위치 , 개수 ):    문자열의  지정위치에서부터 개수만큼 문자 반환


left와 right함수를 같이 사용하거나 mid함수를 이용해서 각 자리수의 문자들을 가져올 수 있다

가져온 문자들을 ord()함수를 이용해 10진수 아스키코드로 변환하고 >,<로 참 거짓을 확인하여 추측한다


ex) 아이디가 admin and 비밀번호의 첫번째 글자의 10진수값은 49 

?no=1%0anot(ord(id)<>97)%0aand%0a(not%0aord(mid(pw,1,1))<>49) 

=> > , < 를 활용하여 수의 범위를 좁혀가며 8개의 자리수 모두 확인한다


3> 실행결과


4> 비밀번호 자동화 파이썬 프로그래밍

5> 실행결과