Translated ['src/network-services-pentesting/pentesting-web/electron-des

This commit is contained in:
Translator 2025-01-07 18:15:39 +00:00
parent b34bcaa14e
commit bc7f9b334b
3 changed files with 152 additions and 41 deletions

1
.gitignore vendored
View File

@ -10,3 +10,4 @@ scripts/*
book
book/*
hacktricks-preprocessor.log
hacktricks-preprocessor-error.log

View File

@ -7,7 +7,14 @@ from os import path
from urllib.request import urlopen, Request
logger = logging.getLogger(__name__)
logging.basicConfig(filename='hacktricks-preprocessor.log', filemode='w', encoding='utf-8', level=logging.DEBUG)
logger.setLevel(logging.DEBUG)
handler = logging.FileHandler(filename='hacktricks-preprocessor.log', mode='w', encoding='utf-8')
handler.setLevel(logging.DEBUG)
logger.addHandler(handler)
handler2 = logging.FileHandler(filename='hacktricks-preprocessor-error.log', mode='w', encoding='utf-8')
handler2.setLevel(logging.ERROR)
logger.addHandler(handler2)
def findtitle(search ,obj, key, path=(),):
@ -27,7 +34,7 @@ def findtitle(search ,obj, key, path=(),):
def ref(matchobj):
logger.debug(f'Match: {matchobj.groups(0)[0].strip()}')
logger.debug(f'Ref match: {matchobj.groups(0)[0].strip()}')
href = matchobj.groups(0)[0].strip()
title = href
if href.startswith("http://") or href.startswith("https://"):
@ -45,19 +52,29 @@ def ref(matchobj):
try:
if href.endswith("/"):
href = href+"README.md" # Fix if ref points to a folder
chapter, _path = findtitle(href, book, "source_path")
logger.debug(f'Recursive title search result: {chapter["name"]}')
title = chapter['name']
if "#" in href:
chapter, _path = findtitle(href.split("#")[0], book, "source_path")
title = " ".join(href.split("#")[1].split("-")).title()
logger.debug(f'Ref has # using title: {title}')
else:
chapter, _path = findtitle(href, book, "source_path")
logger.debug(f'Recursive title search result: {chapter["name"]}')
title = chapter['name']
except Exception as e:
try:
dir = path.dirname(current_chapter['source_path'])
logger.debug(f'Error getting chapter title: {href} trying with relative path {path.normpath(path.join(dir,href))}')
chapter, _path = findtitle(path.normpath(path.join(dir,href)), book, "source_path")
logger.debug(f'Recursive title search result: {chapter["name"]}')
title = chapter['name']
if "#" in href:
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
title = " ".join(href.split("#")[1].split("-")).title()
logger.debug(f'Ref has # using title: {title}')
else:
chapter, _path = findtitle(path.normpath(path.join(dir,href.split('#')[0])), book, "source_path")
title = chapter["name"]
logger.debug(f'Recursive title search result: {chapter["name"]}')
except Exception as e:
logger.debug(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
print(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
logger.debug(e)
logger.error(f'Error getting chapter title: {path.normpath(path.join(dir,href))}')
sys.exit(1)
@ -69,6 +86,7 @@ def ref(matchobj):
return result
def files(matchobj):
logger.debug(f'Files match: {matchobj.groups(0)[0].strip()}')
href = matchobj.groups(0)[0].strip()
@ -76,19 +94,19 @@ def files(matchobj):
try:
for root, dirs, files in os.walk(os.getcwd()+'/src/files'):
logger.debug(root)
logger.debug(files)
if href in files:
title = href
logger.debug(f'File search result: {os.path.join(root, href)}')
except Exception as e:
logger.debug(e)
logger.debug(f'Error searching file: {href}')
print(f'Error searching file: {href}')
logger.error(f'Error searching file: {href}')
sys.exit(1)
if title=="":
logger.debug(f'Error searching file: {href}')
print(f'Error searching file: {href}')
logger.error(f'Error searching file: {href}')
sys.exit(1)
template = f"""<a class="content_ref" href="/files/{href}"><span class="content_ref_label">{title}</span></a>"""
@ -97,6 +115,7 @@ def files(matchobj):
return result
def add_read_time(content):
regex = r'(<\/style>\n# .*(?=\n))'
new_content = re.sub(regex, lambda x: x.group(0) + "\n\nReading time: {{ #reading_time }}", content)
@ -126,15 +145,15 @@ if __name__ == '__main__':
context, book = json.load(sys.stdin)
logger.debug(f"Context: {context}")
logger.debug(f"Env: {context['config']['preprocessor']['hacktricks']['env']}")
for chapter in iterate_chapters(book['sections']):
logger.debug(f"Chapter: {chapter['path']}")
current_chapter = chapter
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
# regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endref[\s]*}}'
regex = r'{{[\s]*#ref[\s]*}}(?:\n)?([^\\\n#]*(?:#(.*))?)(?:\n)?{{[\s]*#endref[\s]*}}'
new_content = re.sub(regex, ref, chapter['content'])
regex = r'{{[\s]*#file[\s]*}}(?:\n)?([^\\\n]*)(?:\n)?{{[\s]*#endfile[\s]*}}'
new_content = re.sub(regex, files, chapter['content'])
new_content = re.sub(regex, files, new_content)
new_content = add_read_time(new_content)
chapter['content'] = new_content

View File

@ -32,18 +32,18 @@ let win = new BrowserWindow()
//Open Renderer Process
win.loadURL(`file://path/to/index.html`)
```
**renderer process** ayarları **main process** içinde main.js dosyasında **yapılandırılabilir**. Bazı yapılandırmalar, **ayarlar doğru yapılandırıldığında** Electron uygulamasının RCE veya diğer güvenlik açıklarını **önlemesine** yardımcı olacaktır.
**renderer process** ayarları **main.js** dosyası içinde **main process**'te **yapılandırılabilir**. Bazı yapılandırmalar, **ayarlar doğru bir şekilde yapılandırıldığında** Electron uygulamasının RCE veya diğer güvenlik açıklarını **önlemesine** yardımcı olacaktır.
Electron uygulaması, Node apileri aracılığıyla **cihazı erişebilir**, ancak bunu önlemek için yapılandırılabilir:
- **`nodeIntegration`** - varsayılan olarak `kapalıdır`. Açık olduğunda, renderer process'ten node özelliklerine erişime izin verir.
- **`contextIsolation`** - varsayılan olarak `açıktır`. Kapalı olduğunda, ana ve renderer süreçleri izole edilmez.
- **`contextIsolation`** - varsayılan olarak `açıktır`. Kapalı olduğunda, main ve renderer süreçleri izole edilmez.
- **`preload`** - varsayılan olarak boştur.
- [**`sandbox`**](https://docs.w3cub.com/electron/api/sandbox-option) - varsayılan olarak kapalıdır. NodeJS'in gerçekleştirebileceği eylemleri kısıtlar.
- Workers'da Node Entegrasyonu
- **`nodeIntegrationInSubframes`** - varsayılan olarak kapalıdır.
- Eğer **`nodeIntegration`** **etkinse**, bu, Electron uygulaması içindeki iframe'lerde **yüklenen web sayfalarında** **Node.js API'lerinin** kullanılmasına izin verir.
- Eğer **`nodeIntegration`** **devre dışı bırakılmışsa**, o zaman ön yüklemeler iframe içinde yüklenecektir.
- Eğer **`nodeIntegration`** **etkinleştirilirse**, bu, Electron uygulaması içinde **iframe'lerde** yüklü web sayfalarında **Node.js API'lerinin** kullanılmasına izin verir.
- Eğer **`nodeIntegration`** **devre dışı bırakılırsa**, o zaman preloads iframe içinde yüklenecektir.
Yapılandırma örneği:
```javascript
@ -97,13 +97,13 @@ onerror="alert(require('child_process').execSync('uname -a').toString());" />
```
### Trafiği Yakala
Başlangıç-ana yapılandırmasını değiştirin ve aşağıdaki gibi bir proxy kullanın:
Başlatma ana yapılandırmasını değiştirin ve aşağıdaki gibi bir proxy kullanın:
```javascript
"start-main": "electron ./dist/main/main.js --proxy-server=127.0.0.1:8080 --ignore-certificateerrors",
```
## Electron Yerel Kod Enjeksiyonu
Eğer yerel olarak bir Electron Uygulamasını çalıştırabiliyorsanız, muhtemelen keyfi javascript kodunu çalıştırabilirsiniz. Bunu nasıl yapacağınızı kontrol edin:
Eğer yerel olarak bir Electron Uygulamasını çalıştırabiliyorsanız, muhtemelen keyfi javascript kodu çalıştırabilirsiniz. Bunu nasıl yapacağınızı kontrol edin:
{{#ref}}
../../../macos-hardening/macos-security-and-privilege-escalation/macos-proces-abuse/macos-electron-applications-injection.md
@ -123,7 +123,7 @@ top.require("child_process").exec("open /System/Applications/Calculator.app")
## RCE: preload
Bu ayarda belirtilen script, **renderer'daki diğer scriptlerden önce yüklenir**, bu nedenle **Node API'lerine sınırsız erişimi vardır**:
Bu ayarda belirtilen script, **renderer'daki diğer scriptlerden önce yüklenir**, bu nedenle **Node API'lerine sınırsız erişime sahiptir**:
```javascript
new BrowserWindow{
webPreferences: {
@ -152,7 +152,7 @@ runCalc()
## RCE: XSS + contextIsolation
_**contextIsolation**_ , **web sayfası scriptleri ile JavaScript Electron'un iç kodu arasında ayrılmış bağlamlar** tanıtarak her bir kodun JavaScript yürütmesinin diğerini etkilememesini sağlar. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir.
_**contextIsolation**_, **web sayfası scriptleri ile JavaScript Electron'un iç kodu arasında ayrılmış bağlamlar** tanıtarak her bir kodun JavaScript yürütmesinin diğerini etkilememesini sağlar. Bu, RCE olasılığını ortadan kaldırmak için gerekli bir özelliktir.
Eğer bağlamlar izole edilmemişse, bir saldırgan:
@ -177,7 +177,7 @@ electron-contextisolation-rce-via-ipc.md
### Tıklama olayını atlatma
Bir bağlantıya tıkladığınızda kısıtlamalar uygulanıyorsa, bunları **normal sol tıklama yerine orta tıklama yaparak** atlatabilirsiniz.
Bir bağlantıya tıkladığınızda kısıtlamalar uygulanıyorsa, bunları **normal bir sol tıklama yerine orta tıklama yaparak** atlatabilirsiniz.
```javascript
window.addEventListener('click', (e) => {
```
@ -192,7 +192,7 @@ Bir kullanıcı bağlantılarla etkileşime girdiğinde veya yeni pencereler aç
webContents.on("new-window", function (event, url, disposition, options) {}
webContents.on("will-navigate", function (event, url) {}
```
Bu dinleyiciler, **masaüstü uygulaması tarafından** kendi **iş mantığını** uygulamak için **geçersiz kılınır**. Uygulama, yönlendirilmiş bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mıılması gerektiğini değerlendirir. Bu karar genellikle `openInternally` adlı bir fonksiyon aracılığıyla verilir. Eğer bu fonksiyon `false` dönerse, bağlantının harici olarak açılması gerektiğini belirtir ve `shell.openExternal` fonksiyonu kullanılır.
Bu dinleyiciler **masaüstü uygulaması tarafından geçersiz kılınır** ve kendi **iş mantığını** uygular. Uygulama, yönlendirilen bir bağlantının dahili olarak mı yoksa harici bir web tarayıcısında mıılması gerektiğini değerlendirir. Bu karar genellikle `openInternally` adlı bir fonksiyon aracılığıyla verilir. Bu fonksiyon `false` dönerse, bağlantının harici olarak açılması gerektiğini belirtir ve `shell.openExternal` fonksiyonu kullanılır.
**İşte basitleştirilmiş bir pseudocode:**
@ -200,9 +200,11 @@ Bu dinleyiciler, **masaüstü uygulaması tarafından** kendi **iş mantığın
![https://miro.medium.com/max/1400/1*ZfgVwT3X1V_UfjcKaAccag.png](<../../../images/image (963).png>)
Electron JS güvenlik en iyi uygulamaları, `openExternal` fonksiyonu ile güvenilmeyen içeriği kabul etmemeyi önerir, çünkü bu çeşitli protokoller aracılığıyla RCE'ye yol açabilir. İşletim sistemleri, RCE'yi tetikleyebilecek farklı protokolleri destekler. Bu konu hakkında daha ayrıntılı örnekler ve açıklamalar için, bu kaynağa [başvurulabilir](https://positive.security/blog/url-open-rce#windows-10-19042), bu kaynak bu güvenlik açığını istismar edebilecek Windows protokol örneklerini içermektedir.
Electron JS güvenlik en iyi uygulamaları, `openExternal` fonksiyonu ile güvenilmeyen içeriği kabul etmemeyi önerir, çünkü bu çeşitli protokoller aracılığıyla RCE'ye yol açabilir. İşletim sistemleri, RCE'yi tetikleyebilecek farklı protokolleri destekler. Bu konu hakkında daha ayrıntılı örnekler ve açıklamalar için, bu kaynağa [başvurulabilir](https://positive.security/blog/url-open-rce#windows-10-19042), bu kaynak Windows protokol örneklerini içermektedir ve bu açığı istismar edebilir.
**Windows protokol istismarına örnekler şunlardır:**
macOS'ta, `openExternal` fonksiyonu, `shell.openExternal('file:///System/Applications/Calculator.app')` gibi rastgele komutlar çalıştırmak için istismar edilebilir.
**Windows protokol istismarlarına örnekler şunlardır:**
```html
<script>
window.open(
@ -224,11 +226,11 @@ window.open(
```
## İç Dosyaları Okuma: XSS + contextIsolation
**`contextIsolation`'ı devre dışı bırakmak, yerel dosyaları okumak ve dışarı aktarmak için `<webview>` etiketlerinin kullanılmasını sağlar**, `<iframe>`'e benzer. Sağlanan bir örnek, bu açığı kullanarak iç dosyaların içeriğini okuma yöntemini göstermektedir:
**`contextIsolation`'ı devre dışı bırakmak, yerel dosyaları okumak ve dışa aktarmak için `<webview>` etiketlerinin kullanılmasına olanak tanır**, `<iframe>`'e benzer. Sağlanan bir örnek, bu güvenlik ığını kullanarak iç dosyaların içeriğini okuma yöntemini göstermektedir:
![](<../../../images/1 u1jdRYuWAEVwJmf_F2ttJg (1).png>)
Ayrıca, **bir iç dosyayı okuma** için başka bir yöntem paylaşılmakta, bir Electron masaüstü uygulamasındaki kritik bir yerel dosya okuma açığını vurgulamaktadır. Bu, uygulamayı istismar etmek ve verileri dışarı aktarmak için bir script enjekte etmeyi içerir:
Ayrıca, **bir iç dosyayı okuma** için başka bir yöntem paylaşılmakta, bir Electron masaüstü uygulamasındaki kritik bir yerel dosya okuma güvenlik ığını vurgulamaktadır. Bu, uygulamayı istismar etmek ve verileri dışa aktarmak için bir script enjekte etmeyi içermektedir:
```html
<br /><br /><br /><br />
<h1>
@ -247,7 +249,7 @@ frames[0].document.body.innerText
## **RCE: XSS + Eski Chromium**
Eğer uygulamanın kullandığı **chromium** **eski** ise ve üzerinde **bilinen** **zafiyetler** varsa, **bunu istismar etmek ve XSS aracılığıyla RCE elde etmek** mümkün olabilir.\
Bir örneği bu **yazıda** görebilirsiniz: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
Bununla ilgili bir örneği bu **yazıda** görebilirsiniz: [https://blog.electrovolt.io/posts/discord-rce/](https://blog.electrovolt.io/posts/discord-rce/)
## **XSS Phishing İçin Dahili URL regex atlatma**
@ -258,24 +260,112 @@ Bir XSS bulduğunuzu varsayalım ama **RCE'yi tetikleyemiyorsanız veya dahili d
webContents.on("new-window", function (event, url, disposition, options) {} // opens the custom openInternally function (it is declared below)
webContents.on("will-navigate", function (event, url) {} // opens the custom openInternally function (it is declared below)
```
**`openInternally`** çağrısı, **bağlantının** platforma ait bir bağlantı olup olmadığına göre **masaüstü penceresinde** **açılacağını** veya **tarayıcıda 3. parti bir kaynak olarak** **açılacağını** belirleyecektir.
**`openInternally`** çağrısı, **bağlantının** platforma ait bir bağlantı olup olmadığına göre **masaüstü penceresinde** **açılıp açılmayacağına** veya **üçüncü taraf bir kaynak** olarak **tarayıcıda**ılıp açılmayacağına karar verecektir.
Fonksiyonun kullandığı **regex** **bypass'lere** karşı **zayıfsa** (örneğin **alt alan adlarının noktalarını kaçırmıyorsa**) bir saldırgan, XSS'i kötüye kullanarak **saldırganın altyapısında bulunan** yeni bir pencere **açabilir** ve kullanıcıdan **kimlik bilgileri** isteyebilir:
Eğer fonksiyon tarafından kullanılan **regex** **bypass'lere** karşı **zayıfsa** (örneğin, **alt alan adlarının noktalarını kaçırmıyorsa**) bir saldırgan, XSS'i kötüye kullanarak **kullanıcıdan kimlik bilgileri** talep eden **yeni bir pencere açabilir**:
```html
<script>
window.open("<http://subdomainagoogleq.com/index.html>")
</script>
```
## **Araçlar**
## Remote modülü
- [**Electronegativity**](https://github.com/doyensec/electronegativity) Electron tabanlı uygulamalardaki yanlış yapılandırmaları ve güvenlik anti-paterni tanımlamak için bir araçtır.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint) Electronegativity kullanan Electron uygulamaları için açık kaynaklı bir VS Code eklentisidir.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan) güvenlik açığı olan üçüncü taraf kütüphaneleri kontrol etmek için
- [**Electro.ng**](https://electro.ng/): Satın almanız gerekiyor
Electron Remote modülü, **renderer süreçlerinin ana süreç API'lerine erişmesine** olanak tanır ve bir Electron uygulaması içinde iletişimi kolaylaştırır. Ancak, bu modülün etkinleştirilmesi önemli güvenlik riskleri getirir. Uygulamanın saldırı yüzeyini genişleterek, onu cross-site scripting (XSS) saldırıları gibi zafiyetlere daha duyarlı hale getirir.
## Laboratuvarlar
> [!TIP]
> **remote** modülü ana süreçten renderer süreçlerine bazı API'leri açsa da, yalnızca bileşenleri kötüye kullanarak RCE elde etmek kolay değildir. Ancak, bileşenler hassas bilgileri açığa çıkarabilir.
[https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) adresinde güvenlik açığı olan Electron uygulamalarını istismar etmek için bir laboratuvar bulabilirsiniz.
> [!WARNING]
> Hala remote modülünü kullanan birçok uygulama, renderer sürecinde **NodeIntegration'ın etkinleştirilmesini gerektirir**, bu da **büyük bir güvenlik riski** oluşturur.
Electron 14'ten itibaren, Electron'un `remote` modülü güvenlik ve performans nedenleriyle birkaç adımda etkinleştirilebilir, bu nedenle **kullanılmaması önerilir**.
Etkinleştirmek için, önce **ana süreçte etkinleştirilmesi gerekir**:
```javascript
const remoteMain = require('@electron/remote/main')
remoteMain.initialize()
[...]
function createMainWindow() {
mainWindow = new BrowserWindow({
[...]
})
remoteMain.enable(mainWindow.webContents)
```
Sonra, render işlemi modülden nesneleri şu şekilde içe aktarabilir:
```javascript
import { dialog, getCurrentWindow } from '@electron/remote'
```
**[blog post](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)**, uzaktan modülden **`app`** nesnesi tarafından sunulan bazı ilginç **fonksiyonları** belirtmektedir:
- **`app.relaunch([options])`**
- Mevcut örneği **kapatarak** uygulamayı **yeniden başlatır** ve yeni bir tane **başlatır**. **Uygulama güncellemeleri** veya önemli **durum değişiklikleri** için faydalıdır.
- **`app.setAppLogsPath([path])`**
- **Uygulama günlükleri** depolamak için bir dizin **tanımlar** veya **oluşturur**. Günlükler **`app.getPath()`** veya **`app.setPath(pathName, newPath)`** kullanılarak **alınabilir** veya **değiştirilebilir**.
- **`app.setAsDefaultProtocolClient(protocol[, path, args])`**
- Mevcut çalıştırılabilir dosyayı belirtilen **protokol** için **varsayılan işleyici** olarak **kaydeder**. Gerekirse **özel bir yol** ve **argümanlar** sağlayabilirsiniz.
- **`app.setUserTasks(tasks)`**
- **Jump List** (Windows'ta) içindeki **Görevler kategorisine** görevler **ekler**. Her görev, uygulamanın nasıl **başlatılacağını** veya hangi **argümanların** geçeceğini kontrol edebilir.
- **`app.importCertificate(options, callback)`**
- Sistemin **sertifika deposuna** bir **PKCS#12 sertifikası** **ithal eder** (sadece Linux). Sonucu işlemek için bir **callback** kullanılabilir.
- **`app.moveToApplicationsFolder([options])`**
- Uygulamayı **Uygulamalar klasörüne** **taşır** (macOS'ta). Mac kullanıcıları için **standart bir kurulum** sağlamaya yardımcı olur.
- **`app.setJumpList(categories)`**
- **Windows** üzerinde **özel bir Jump List** **ayarlar** veya **kaldırır**. Görevlerin kullanıcıya nasıl görüneceğini düzenlemek için **kategoriler** belirtebilirsiniz.
- **`app.setLoginItemSettings(settings)`**
- **Girişte** hangi **çalıştırılabilir dosyaların** **başlatılacağını** ve bunların **seçeneklerini** **ayarlar** (sadece macOS ve Windows).
```javascript
Native.app.relaunch({args: [], execPath: "/System/Applications/Calculator.app/Contents/MacOS/Calculator"});
Native.app.exit()
```
## systemPreferences modülü
Electron'da sistem tercihlerine erişmek ve sistem olaylarını yaymak için **birincil API**. **subscribeNotification**, **subscribeWorkspaceNotification**, **getUserDefault** ve **setUserDefault** gibi yöntemler bu modülün **bir parçasıdır**.
**Örnek kullanım:**
```javascript
const { systemPreferences } = require('electron');
// Subscribe to a specific notification
systemPreferences.subscribeNotification('MyCustomNotification', (event, userInfo) => {
console.log('Received custom notification:', userInfo);
});
// Get a user default key from macOS
const recentPlaces = systemPreferences.getUserDefault('NSNavRecentPlaces', 'array');
console.log('Recent Places:', recentPlaces);
```
### **subscribeNotification / subscribeWorkspaceNotification**
* **Yerel macOS bildirimlerini** dinler, NSDistributedNotificationCenter kullanarak.
* **macOS Catalina'dan** önce, CFNotificationCenterAddObserver'a **nil** geçirerek **tüm** dağıtılmış bildirimleri dinleyebilirdiniz.
* **Catalina / Big Sur'dan** sonra, sandboxed uygulamalar hala **birçok olaya** (örneğin, **ekran kilitlenmeleri/açılmaları**, **ses montajları**, **ağ etkinliği** vb.) **isimle** bildirim kaydederek **abone** olabilir.
### **getUserDefault / setUserDefault**
* **NSUserDefaults** ile **arayüz** sağlar, bu da macOS'ta **uygulama** veya **küresel** tercihleri saklar.
* **getUserDefault**, **son dosya konumları** veya **kullanıcının coğrafi konumu** gibi hassas bilgileri **alabilir**.
* **setUserDefault**, bu tercihleri **değiştirebilir**, bu da bir uygulamanın **konfigürasyonunu** etkileyebilir.
* **Eski Electron sürümlerinde** (v8.3.0'dan önce), yalnızca NSUserDefaults'un **standart kümesi** **erişilebilir** idi.
## Shell.showItemInFolder
Bu fonksiyon, verilen dosyayı bir dosya yöneticisinde gösterir, bu da **dosyanın otomatik olarak çalıştırılmasına** neden olabilir.
Daha fazla bilgi için [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html) adresine bakın.
## **Tools**
- [**Electronegativity**](https://github.com/doyensec/electronegativity), Electron tabanlı uygulamalardaki yanlış yapılandırmaları ve güvenlik anti-paternlerini tanımlamak için bir araçtır.
- [**Electrolint**](https://github.com/ksdmitrieva/electrolint), Electronegativity kullanan Electron uygulamaları için açık kaynaklı bir VS Code eklentisidir.
- [**nodejsscan**](https://github.com/ajinabraham/nodejsscan), savunmasız üçüncü taraf kütüphaneleri kontrol etmek için.
- [**Electro.ng**](https://electro.ng/): Satın almanız gerekiyor.
## Labs
[https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s) adresinde savunmasız Electron uygulamalarını istismar etmek için bir laboratuvar bulabilirsiniz.
Laboratuvarda size yardımcı olacak bazı komutlar:
```bash
@ -309,5 +399,6 @@ npm start
- [https://www.youtube.com/watch?v=xILfQGkLXQo\&t=22s](https://www.youtube.com/watch?v=xILfQGkLXQo&t=22s)
- Electron güvenliği hakkında daha fazla araştırma ve yazı için [https://github.com/doyensec/awesome-electronjs-hacking](https://github.com/doyensec/awesome-electronjs-hacking)
- [https://www.youtube.com/watch?v=Tzo8ucHA5xw\&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq\&index=81](https://www.youtube.com/watch?v=Tzo8ucHA5xw&list=PLH15HpR5qRsVKcKwvIl-AzGfRqKyx--zq&index=81)
- [https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html](https://blog.doyensec.com/2021/02/16/electron-apis-misuse.html)
{{#include ../../../banners/hacktricks-training.md}}