Images cassées avec 'embed truncate' désactivé

Bonjour,

J’obtiens des images brisées

![](upload://7Tu1xeK5xtt2jBrjpWQcBxOYByS.png

avec “embed truncate” les images fonctionnent ; mais avec “embed truncate” désactivé, cela me donne des images brisées comme celles-ci…

dans les logs vide… et Sidekiq tout est traité correctement…

Veuillez partager ici :

  • Lien vers l’article que vous essayez d’intégrer

  • Lien vers le flux RSS

  • HTML du message publié ou un lien vers l’instance où le sujet se trouve

Je soupçonne que vous rencontrez le problème décrit ici : Fix broken images for posts created by the WP Discourse and RSS plugins. Ce guide propose quelques solutions de contournement au problème. Il y a une explication détaillée du problème dans mon deuxième message dans le sujet.

Correct @simon j’essaie cela en activant « domaines de téléchargement d’images désactivés », mais les images n’apparaissent pas à ce moment-là…

Les images n’apparaissent que de cette manière

![](upload://6zqK52dO23i1JsYH2oyMU12U2ro.jpeg)

et la modification manuelle en ajoutant

ce n’est pas un « plugin de travail » correct.

Mais concernant « Classic Editor », je n’ai pas essayé car ce n’est pas lié à WordPress…

J’espère que vous pourrez nous donner une solution ou une solution temporaire à ce problème.

Après avoir lu de nombreux longs sujets, etc. J’ai décidé d’utiliser le blanc pour résoudre le problème de l’image ; mais le problème avec ce plugin, c’est que même après l’avoir modifié et corrigé les images, celles-ci ont disparu “ou” le sujet a été à nouveau récupéré avec une image cassée, et je dois faire une modification “revenir à la révision”…

C’est vraiment agaçant de ne pas pouvoir empêcher les images du sujet d’être cassées ; même après avoir ajouté un blanc à l’image !

Pouvez-vous s’il vous plaît partager ce qui vous a été demandé ?

Sinon, il est inutile de se plaindre sans informations minimales exploitables.

J’ai déjà signalé le problème des images cassées, mais aucune solution n’a été trouvée, à part une référence à un autre cas similaire sans résultat.

Lien que j’essaie d’intégrer :
https://reconshell.com/redwarden-flexible-cobaltstrike-malleable-redirector/

Lien vers le flux RSS
https://reconshell.com/tag/cobaltstrike/feed/

HTML traité :


<figure class="wp-block-image size-large">![cs|1024x689](upload://liMGLRlV0nW3HZuECbVKnLCrHcE.png)</figure>



<p><strong><span class="has-inline-color has-vivid-purple-color">Proxy inverse C2 Cobalt Strike qui repousse les équipes bleues, les antivirus, les EDR et les scanners grâce à l'inspection des paquets et à la corrélation de profils malléables</span></strong></p>



<hr class="wp-block-separator">



<p>(anciennement connu sous le nom de plugin <em>malleable_redirector</em> de <a href="https://github.com/mgeeky/proxy2" target="_blank" rel="noopener">proxy2</a>)</p>



<p><strong>Augmentons la barre en matière de résilience des redirecteurs C2 face aux investigations IR, d'accord ?</strong></p>



<p>Le domaine du Red Teaming a vu émerger <a href="https://bluescreenofjeff.com/2016-04-12-combatting-incident-responders-with-apache-mod_rewrite/" target="_blank" rel="noopener">plusieurs</a> <a href="https://posts.specterops.io/automating-apache-mod-rewrite-and-cobalt-strike-malleable-c2-profiles-d45266ca642" target="_blank" rel="noopener">différentes</a> <a href="https://gist.github.com/curi0usJack/971385e8334e189d93a6cb4671238b10" target="_blank" rel="noopener">excellentes</a> idées sur la façon de contrer les intervenants en cas d'incident et de les tromper, tout en offrant un réseau de redirecteurs C2 résistant.</p>



<p>Ce travail combine de nombreuses de ces excellentes idées en un seul outil léger, imitant Apache2 dans ses racines de simple proxy inverse HTTP(S).</p>



<p>La combinaison de la compréhension des profils Malleable C2, de la connaissance des pools d'adresses IP malveillantes et de la flexibilité permettant d'ajouter facilement de nouvelles logiques d'inspection et de déroutement a abouti à un répulsif astucieux contre les inspections IR.</p>



<figure class="wp-block-image size-large">![red|1024x677](upload://yNscGob6i3Xu2UY6bnBXZgbSwAZ.png)</figure>



<p>Si un paquet entrant invalide atteint RedWarden, vous pouvez le <code>rediriger</code>, le <code>réinitialiser</code> ou simplement le <code>proxifier</code> !</p>



<h2><a href="https://github.com/mgeeky/RedWarden#abstract" target="_blank" rel="noopener"></a></h2>



<h2><strong>Résumé</strong></h2>



<p>Ce programme agit comme un proxy inverse HTTP/HTTPS avec plusieurs restrictions imposées aux requêtes HTTP C2 entrantes, sélectionnant quels paquets diriger vers le Teamserver et quels paquets rejeter, de manière similaire aux restrictions du fichier .htaccess imposées par <code>mod_rewrite</code> d'Apache2.</p>



<p><code>RedWarden</code> a été créé pour résoudre le problème de l'évasion des IR/AV/EDR/Sandboxes au niveau du redirecteur C2. Il est destiné à remplacer les configurations classiques Apache2 + mod_rewrite utilisées à cette fin.</p>



<p><strong>Fonctionnalités :</strong></p>



<ul><li>Analyseur de profil Malleable C2 capable de valider strictement les requêtes HTTP/S entrantes selon le contrat malléable et de rejeter les paquets non conformes en cas de violation (profils malléables 4.0+ avec variantes couvertes)</li><li>Capacité à désfiltrer/réparer les en-têtes HTTP inattendus et indésirables ajoutés par des systèmes intermédiaires tels que des proxies et des caches (pensez à CloudFlare) afin de se conformer à un contrat malléable valide.</li><li>Liste noire massive et curatée intégrée de pools et plages IPv4 connus pour être associés aux fournisseurs de sécurité informatique</li><li>Entrées de journal de sortie lisibles par grep (aux formats de journal d'accès combiné Apache2 et format personnalisé RedWarden) utiles pour suivre les événements/problèmes de connectivité des pairs</li><li>Capacité à interroger l'adresse IPv4 du pair connecté auprès des informations de géolocalisation/whois IP et à les confronter à des expressions régulières prédéfinies pour exclure les pairs se connectant en dehors des organisations/pays/villes de confiance, etc.</li><li>Atténuation intégrée des attaques par rejeu imposée par la journalisation des sommes de contrôle MD5 des requêtes acceptées dans une base de données SQLite locale et en empêchant les requêtes précédemment acceptées.</li><li>Permet de définir des déclarations ProxyPass pour transférer les requêtes correspondant à une URL spécifique vers d'autres hôtes</li><li>Prise en charge de plusieurs Teamservers</li><li>Prise en charge de nombreux hôtes/sites de redirection de proxy inverse dans un ordre aléatoire, ce qui permet d'équilibrer la charge du trafic ou de construire des infrastructures plus polyvalentes</li><li>Peut réparer les paquets HTTP selon le contrat malléable attendu au cas où certains en-têtes seraient corrompus dans le trafic</li><li>Les nuits blanches passées à dépanner le problème « pourquoi mon Beacon ne fonctionne pas via CloudFlare/CDN/Domain Fronting » sont terminées grâce aux journaux détaillés des requêtes/réponses HTTP(S) verbeux</li></ul>



<p>RedWarden prend en entrée le profil Malleable C2 et l'<code>hostname:port</code> du teamserver. Il analyse ensuite les sections du profil malléable fourni pour comprendre le contrat et ne laisser passer que les requêtes entrantes qui le satisfont, tout en détournant les autres.</p>



<p>Des sections telles que <code>http-stager</code>, <code>http-get</code>, <code>http-post</code> et leurs URI, en-têtes, motifs de préfixe/suffixe et User-Agent correspondants sont toutes utilisées pour distinguer la requête légitime du beacon du bruit internet non pertinent ou des paquets hors limite des IR/AV/EDR.</p>



<p>Le programme bénéficie des excellentes plages d'IP malveillantes connues provenant de : curi0usJack et d'autres :</p>



<pre class="wp-block-preformatted">https://gist.github.com/curi0usJack/971385e8334e189d93a6cb4671238b10</pre>



<p>L'utilisation d'une liste noire d'adresses IP combinée à une recherche de mots-clés malveillants connus via des requêtes DNS Reverse-IP et l'inspection des en-têtes HTTP augmente considérablement la fiabilité et la résilience du redirecteur face aux pairs non autorisés souhaitant examiner les infrastructures de l'attaquant.</p>



<p>Les paquets invalides peuvent être détournés selon trois stratégies :</p>



<ul><li><strong>redirection</strong> : Redirige simplement le pair vers d'autres sites web, comme un Rick Roll.</li><li><strong>réinitialisation</strong> : Tue la connexion TCP immédiatement.</li><li><strong>proxy</strong> : Récupère une réponse depuis un autre site web, pour imiter au plus près un site web cloné ou détourné.</li></ul>



<p>Cette configuration est imposée dans le fichier de configuration :</p>



<pre class="wp-block-preformatted">#
# Que faire avec la requête provenant d'une source ne respectant pas le Beacon, la liste blanche ou 
# les déclarations inclusives ProxyPass : 
#   - la 'rediriger' vers un autre hôte (HTTP 301), 
#   - 'réinitialiser' une connexion TCP avec le client connectant
#   - 'proxifier' la requête, agissant comme un proxy inverse contre l'action_url spécifiée 
#       (peut être dangereux si le client récupère quelque chose qu'il ne devrait pas voir !)
#
# Valeurs valides : 'reset', 'redirect', 'proxy'. 
#
# Par défaut : redirect
#
drop_action: redirect</pre>



<p>L'exemple ci-dessous montre le résultat d'une <code>redirection</code> vers <code>https://googole.com</code> :</p>



<figure class="wp-block-image size-large">![op|1024x526](upload://rSd1JK6ERp0W2nR9GtTryPHMvJc.png)</figure>



<p>Utilisez avec sagesse, restez en sécurité.</p>



<h3><a href="https://github.com/mgeeky/RedWarden#requirements" target="_blank" rel="noopener"></a></h3>



<h3><strong><span class="has-inline-color has-vivid-cyan-blue-color">Exigences</span></strong></h3>



<p>Ce programme ne peut s'exécuter que sur des systèmes Linux car il utilise fork pour générer plusieurs processus.</p>



<p>De plus, la commande système <code>openssl</code> est censée être installée car elle est utilisée pour générer les certificats SSL.</p>



<p>Enfin, installez facilement toutes les dépendances PIP Python3 avec :</p>



<pre class="wp-block-preformatted">bash $ sudo pip3 install -r requirements.txt</pre>



<h2><a href="https://github.com/mgeeky/RedWarden#usage" target="_blank" rel="noopener"></a></h2>



<h2>Utilisation</h2>



<h3><a href="https://github.com/mgeeky/RedWarden#example-usage" target="_blank" rel="noopener"></a></h3>



<h3><span class="has-inline-color has-vivid-cyan-blue-color">Exemple d'utilisation</span></h3>



<p>Le fichier de configuration <strong>config.yaml</strong> minimal de RedWarden pourrait contenir :</p>



<pre class="wp-block-preformatted">port:
  - 80/http
  - 443/https

profile: jquery-c2.3.14.profile

ssl_cacert: /etc/letsencrypt/live/attacker.com/fullchain.pem
ssl_cakey: /etc/letsencrypt/live/attacker.com/privkey.pem

teamserver_url:
  - 1.2.3.4:8080

drop_action: reset</pre>



<p>Ensuite, le programme peut être lancé en lui donnant le chemin vers le fichier de configuration :</p>



<pre class="wp-block-preformatted">bash$ sudo python3 RedWarden.py -c config.yaml

  [INFO] 19:21:42: Chargement de 1 plugin...
  [INFO] 19:21:42: Le plugin "malleable_redirector" a été installé.
  [INFO] 19:21:42: Préparation des certificats et clés SSL pour l'interception du trafic https...
  [INFO] 19:21:42: Utilisation du fichier de clé CA fourni : ca-cert/ca.key
  [INFO] 19:21:42: Utilisation du fichier de certificat CA fourni : ca-cert/ca.crt
  [INFO] 19:21:42: Utilisation de la clé de certificat fournie : ca-cert/cert.key
  [INFO] 19:21:42: Service du proxy http sur : 0.0.0.0, port : 80...
  [INFO] 19:21:42: Service du proxy https sur : 0.0.0.0, port : 443...
  [INFO] 19:21:42: [REQUEST] GET /jquery-3.3.1.min.js
  [INFO] 19:21:42: == Requête http-get malléable valide entrante.
  [INFO] 19:21:42: Le plugin a redirigé la requête de [code.jquery.com] vers [1.2.3.4:8080]
  [INFO] 19:21:42: [RESPONSE] HTTP 200 OK, longueur : 5543
  [INFO] 19:21:45: [REQUEST] GET /jquery-3.3.1.min.js
  [INFO] 19:21:45: == Requête http-get malléable valide entrante.
  [INFO] 19:21:45: Le plugin a redirigé la requête de [code.jquery.com] vers [1.2.3.4:8080]
  [INFO] 19:21:45: [RESPONSE] HTTP 200 OK, longueur : 5543
  [INFO] 19:21:46: [REQUEST] GET /
  [...]
  [ERROR] 19:24:46: [DROP, reason:1] L'User-Agent entrant diffère de celui défini dans le profil C2.
  [...]
  [INFO] 19:24:46: [RESPONSE] HTTP 301 Moved Permanently, longueur : 212
  [INFO] 19:24:48: [REQUEST] GET /jquery-3.3.1.min.js
  [INFO] 19:24:48: == Requête http-get malléable valide entrante.
  [INFO] 19:24:48: Le plugin a redirigé la requête de [code.jquery.com] vers [1.2.3.4:8080]
  [...]</pre>



<p>La sortie ci-dessus contient une ligne indiquant qu'il y a eu une requête entrante non autorisée, non conforme à notre profil C2, qui a été rejetée en raison d'une chaîne User-Agent incompatible :</p>



<pre class="wp-block-code"><code>  [...]
  [DROP, reason:1] L'User-Agent entrant diffère de celui défini dans le profil C2.
  [...]
</code></pre>



<h2><a href="https://github.com/mgeeky/RedWarden#use-cases" target="_blank" rel="noopener"></a></h2>



<h2><strong>Cas d'utilisation</strong></h2>



<h3><a href="https://github.com/mgeeky/RedWarden#impose-ip-geolocation-on-your-beacon-traffic-originators" target="_blank" rel="noopener"></a></h3>



<h3><span class="has-inline-color has-vivid-cyan-blue-color">Imposer une géolocalisation IP aux sources de trafic de votre Beacon</span></h3>



<p>Vous avez très bien effectué votre Pre-Phish et votre OSINT. Vous savez maintenant où vivent vos cibles et avez quelques indices sur l'origine du trafic, ou du moins sur la façon de détecter le trafic complètement auxiliaire. Comment imposer une géolocalisation IP aux requêtes Beacon sur un redirecteur ?</p>



<p>RedWarden vient à la rescousse !</p>



<p>Dites que vous ne souhaitez accepter que le trafic provenant de Pologne, Europe. Vos résultats de Pre-Phish/OSINT indiquent que :</p>



<ul><li><code>89.64.64.150</code> est une IP légitime de l'une de vos cibles, provenant de Pologne</li><li><code>59.99.140.76</code> tandis que celle-ci ne l'est pas et a atteint vos systèmes en tant que paquet de bruit internet ordinaire.</li></ul>



<p>Vous pouvez utiliser l'utilitaire <code>lib/ipLookupHelper.py</code> de RedWarden pour collecter les métadonnées Geo IP de ces deux adresses :</p>



<pre class="wp-block-preformatted">bash$ python3 ipLookupHelper.py

Usage: ./ipLookupHelper.py <ipaddress> [malleable-redirector-config]

Utilisez cet petit utilitaire pour collecter les détails de recherche IP sur l'adresse IPv4 de votre cible et vérifier si
votre section 'ip_geolocation_requirements' du fichier proxy2 malleable-redirector-config.yaml correspondrait à cette
adresse IP. Si le deuxième paramètre n'est pas fourni - aucune </ipaddress></pre>



<p>Le premier donne :</p>



<pre class="wp-block-preformatted">bash$ python3 ipLookupHelper.py 89.64.64.150
[dbg] Les fournisseurs de recherche IP suivants seront utilisés : ['ip_api_com', 'ipapi_co']
[.] Recherche de : 89.64.64.150
[dbg] Appel du fournisseur de recherche IP : ipapi_co
[dbg] Appel du fournisseur de recherche IP : ip_api_com
[dbg] Nouvelle entrée de recherche IP mise en cache : 89.64.64.150
[.] Sortie :
{
  "organization": [
    "UPC Polska Sp. z o.o.",
    "UPC.pl",
    "AS6830 Liberty Global B.V."
  ],
  "continent": "Europe",
  "continent_code": "EU",
  "country": "Poland",
  "country_code": "PL",
  "ip": "89.64.64.150",
  "city": "Warsaw",
  "timezone": "Europe/Warsaw",
  "fulldata": {
    "status": "success",
    "country": "Poland",
    "countryCode": "PL",
    "region": "14",
    "regionName": "Mazovia",
    "city": "Warsaw",
    "zip": "00-202",
    "lat": 52.2484,
    "lon": 21.0026,
    "timezone": "Europe/Warsaw",
    "isp": "UPC.pl",
    "org": "UPC Polska Sp. z o.o.",
    "as": "AS6830 Liberty Global B.V.",
    "query": "89.64.64.150"
  },
  "reverse_ip": "89-64-64-150.dynamic.chello.pl"
}</pre>



<p>et le second donne :</p>



<pre class="wp-block-preformatted">bash$ python3 ipLookupHelper.py 59.99.140.76
[dbg] Les fournisseurs de recherche IP suivants seront utilisés : ['ip_api_com', 'ipapi_co']
[dbg] Lecture de 1 entrée mise en cache depuis le fichier.
[.] Recherche de : 59.99.140.76
[dbg] Appel du fournisseur de recherche IP : ip_api_com
[dbg] Nouvelle entrée de recherche IP mise en cache : 59.99.140.76
[.] Sortie :
{
  "organization": [
    "",
    "BSNL Internet",
    "AS9829 National Internet Backbone"
  ],
  "continent": "Asia",
  "continent_code": "AS",
  "country": "India",
  "country_code": "IN",
  "ip": "59.99.140.76",
  "city": "Palakkad",
  "timezone": "Asia/Kolkata",
  "fulldata": {
    "status": "success",
    "country": "India",
    "countryCode": "IN",
    "region": "KL",
    "regionName": "Kerala",
    "city": "Palakkad",
    "zip": "678001",
    "lat": 10.7739,
    "lon": 76.6487,
    "timezone": "Asia/Kolkata",
    "isp": "BSNL Internet",
    "org": "",
    "as": "AS9829 National Internet Backbone",
    "query": "59.99.140.76"
  },
  "reverse_ip": ""
}</pre>



<p>Maintenant, vous voyez que le premier avait <code>"country": "Poland"</code> tandis que le second <code>"country": "India"</code>. Avec cette connaissance, nous sommes prêts à conceindre nos contraintes sous forme d'un dictionnaire YAML imposant :</p>



<pre class="wp-block-preformatted">ip_geolocation_requirements:
  organization:
  continent:
  continent_code:
  country:
     - Poland
     - PL
     - Polska
  country_code:
  city:
  timezone:</pre>



<p>Chacune des entrées de ce dictionnaire accepte une expression régulière à faire correspondre avec les métadonnées Geo IP déterminées de l'adresse IP du pair entrant. Nous utilisons trois entrées dans la propriété <code>country</code> pour autoriser les requêtes ayant l'une des valeurs spécifiées.</p>



<p>Une fois cela défini dans votre configuration, vous pouvez vérifier si une autre adresse IP passerait ou non par le discriminateur de géolocalisation IP de RedWarden avec l'utilitaire <code>ipLookupHelper</code> acceptant un deuxième paramètre :</p>



<figure class="wp-block-image size-large">![confy|1024x832](upload://1hMhgAzzH4ngPQFLkddw4nmGw2M.png)</figure>



<p>La toute dernière ligne vous indique si le paquet serait bloqué ou accepté.</p>



<p>Et c'est tout ! Configurez intelligemment et en toute sécurité vos contraintes de géolocalisation IP, inspectez attentivement les journaux RedWarden pour toute entrée DROP liée à la géo IP et gardez votre trafic C2 propre et ordonné !</p>



<h3><a href="https://github.com/mgeeky/RedWarden#repair-tampered-beacon-requests" target="_blank" rel="noopener"></a></h3>



<h3><strong><span class="has-inline-color has-vivid-cyan-blue-color">Réparer les requêtes Beacon altérées</span></strong></h3>



<p>Si vous utilisez des systèmes intermédiaires tels que AWS Lambda ou CloudFlare pour votre Domain Fronting / redirecteurs, vous avez sûrement été confronté à une situation où certains de vos paquets n'ont pas pu être acceptés par le Teamserver car ils s'écartaient du contrat malléable convenu. Qu'il s'agisse d'un en-tête HTTP altéré ou supprimé, de cookies réordonnés ou autre – je parie que cela vous a fait perdre des heures de vie.</p>



<p>Pour combattre les problèmes de configuration des canaux C2 et les altérations des systèmes intermédiaires, RedWarden offre la fonctionnalité de réparer les paquets Beacon.</p>



<p>Cela se fait en vérifiant ce que le profil Malleable attend du paquet et peut restaurer les en-têtes HTTP configurés à leurs valeurs convenues selon les exigences du profil.</p>



<p>Considérez le profil simple suivant :</p>



<pre class="wp-block-preformatted">http-get {
    set uri "/api/abc";
    client {

        header "Accept-Encoding" "gzip, deflate";

        metadata {
            base64url;
            netbios;
            base64url;
            parameter "auth";
        }
    }
    ...</pre>



<p>Vous voyez ce <code>Accept-Encoding</code> ? Chaque requête Beacon doit comporter cet en-tête et cette valeur. Que se passe-t-il si votre Beacon atteint les systèmes CloudFlare et qu'ils émettent une requête qui sera débarrassée de cet en-tête ou aura <code>Accept-Encoding: gzip</code> à la place ? Le Teamserver rejettera la requête sur le champ.</p>



<p>En définissant cet en-tête dans la section de configuration RedWarden appelée <code>protect_these_headers_from_tampering</code>, vous pouvez sauvegarder votre connexion. :</p>



<pre class="wp-block-preformatted">#
# Si RedWarden valide les en-têtes HTTP de la requête entrante, selon la politique drop_malleable_without_expected_header_value :
#   "[IP: DROP, reason:6] La requête HTTP ne contenait pas la valeur d'en-tête attendue :"
#
# et détecte qu'un en-tête est manquant ou a été écrasé en cours de route, la requête sera rejetée. Nous pouvons cependant assouplir cette politique
# un peu, car il existe des situations dans lesquelles les systèmes de cache (tels que Cloudflare) pourraient altérer nos requêtes, rompant
# ainsi les contrats malléables. Ce que nous pouvons faire, c'est spécifier une liste d'en-têtes qui doivent être réécrits avec leurs valeurs
# définies dans le profil Malleable fourni.
#
# Par exemple, si notre profil attend :
#   header "Accept-Encoding" "gzip, deflate";
#
# mais que nous recevons une requête ayant l'en-tête suivant défini à la place :
#   Accept-Encoding: gzip
#
# Parce qu'il a été altéré en cours de route par l'un des systèmes intermédiaires (tels que des web-proxies ou des caches), nous pouvons
# détecter cela et remettre la valeur de cet en-tête à ce qui était attendu dans le profil Malleable.
#
# Pour protéger l'en-tête Accept-Encoding, par exemple, la configuration suivante pourrait être utilisée :
#   protect_these_headers_from_tampering:
#     - Accept-Encoding
#
#
# Par défaut : <empty-list>
#
protect_these_headers_from_tampering:
  - Accept-Encoding</empty-list></pre>



<h3><a href="https://github.com/mgeeky/RedWarden#example-outputs" target="_blank" rel="noopener"></a></h3>



<h3><strong><span class="has-inline-color has-vivid-cyan-blue-color">Exemples de sorties</span></strong></h3>



<p>Jetons un œil à la sortie produite par le proxy.</p>



<p>Sous l'option <code>verbose: True</code>, la verbosité sera réglée sur INFO au maximum, distinguant les requêtes acceptées des requêtes rejetées.</p>



<p>La requête peut être acceptée si elle répond à tous les critères configurés dans le fichier de configuration de RedWarden. Une telle situation sera suivie d'une entrée de journal <code>[ALLOW, ...]</code> :</p>



<pre class="wp-block-preformatted">[INFO] 2021-04-24/17:30:48: [REQUEST] GET /js/scripts.js
[INFO] 2021-04-24/17:30:48: == Requête http-get malléable valide (variante : default) entrante.
[INFO] 2021-04-24/17:30:48: [ALLOW, 2021-04-24/19:30:48, 111.222.223.224] "/js/scripts.js" - UA : "Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko"
[INFO] 2021-04-24/17:30:48: Le pair connecté a envoyé 2 requêtes http-get valides et 0 requêtes http-post valides jusqu'à présent, sur les 15/5 requises pour le considérer temporairement de confiance
[INFO] 2021-04-24/17:30:48: Le plugin a redirigé la requête de [attacker.com] vers [127.0.0.1:5555]</pre>



<p>Si la requête échoue à l'un des contrôles effectués par RedWarden sur chaque requête, la ligne correspondante <code>[DROP, ...]</code> sera émise contenant des informations sur la <strong>raison</strong> du rejet. :</p>



<pre class="wp-block-preformatted">[INFO] 2021-04-24/16:48:28: [REQUEST] GET /
[ERROR] 2021-04-24/16:48:29: [DROP, 2021-04-24/18:48:28, reason:1, 128.14.211.186] L'User-Agent entrant diffère de celui défini dans le profil C2.
[INFO] 2021-04-24/16:48:29: [DROP, 2021-04-24/18:48:28, 128.14.211.186] "/" - UA : "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36"
[ERROR] 2021-04-24/16:48:29: [REDIRECTION de la requête invalide de 128.14.211.186 (zl-dal-us-gp3-wk107.internet-census.org)] GET /</pre>



<h3><a href="https://github.com/mgeeky/RedWarden#drop-policies-fine-tuning" target="_blank" rel="noopener"></a></h3>



<h3><strong><span class="has-inline-color has-vivid-cyan-blue-color">Ajustement fin des politiques de rejet</span></strong></h3>



<p>Il y a de nombreuses raisons dictant si une requête peut être rejetée. Chacun de ces contrôles peut être activé ou désactivé indépendamment selon les exigences ou dans le cadre d'un ajustement fin ou de la correction d'une décision erronée :</p>



<p>Extrait de <code>example-config.yaml</code> :</p>



<pre class="wp-block-preformatted">#
# Politique de rejet de requêtes fine - vous permet de décider quels contrôles
# vous souhaitez appliquer et lesquels ignorer en les définissant sur False
#
# Par défaut : tous les contrôles activés
#
policy:
  # [IP: ALLOW, reason:0] La requête correspond à une entrée ProxyPass (url="..." host="..."). Transmission de la requête à l'hôte spécifié
  allow_proxy_pass: True
  # [IP: ALLOW, reason:2] L'IP du pair a été ajoutée dynamiquement à une liste blanche basée sur un nombre de requêtes autorisées
  allow_dynamic_peer_whitelisting: True
  # [IP: DROP, reason:1] L'User-Agent entrant diffère de celui défini dans le profil C2.
  drop_invalid_useragent: True
  # [IP: DROP, reason:2] Le nom de l'en-tête HTTP contenait un mot interdit
  drop_http_banned_header_names: True
  # [IP: DROP, reason:3] La valeur de l'en-tête HTTP contenait un mot interdit :
  drop_http_banned_header_value: True
  # [IP: DROP, reason:4b] La recherche inverse-IP du pair contenait un mot interdit
  drop_dangerous_ip_reverse_lookup: True
  # [IP: DROP, reason:4e] Les métadonnées de géolocalisation IP du pair contenaient un mot-clé interdit ! Pair banni de manière générique.
  drop_ipgeo_metadata_containing_banned_keywords: True
  # [IP: DROP, reason:5] La requête HTTP ne contenait pas l'en-tête attendu
  drop_malleable_without_expected_header: True
  # [IP: DROP, reason:6] La requête HTTP ne contenait pas la valeur d'en-tête attendue :
  drop_malleable_without_expected_header_value: True
  # [IP: DROP, reason:7] La requête HTTP ne contenait pas l'en-tête de section attendu (metadata|id|output) :
  drop_malleable_without_expected_request_section: True
  # [IP: DROP, reason:8] La requête HTTP était censée contenir une section (metadata|id|output) avec un paramètre dans l'URI :
  drop_malleable_without_request_section_in_uri: True
  # [IP: DROP, reason:9] Motif de préfixe non trouvé :
  drop_malleable_without_prepend_pattern: True
  # [IP: DROP, reason:10] Motif de suffixe non trouvé :
  drop_malleable_without_apppend_pattern: True
  # [IP: DROP, reason:11] L'URI demandé ne correspond à aucune des variantes définies par Malleable :
  drop_malleable_unknown_uris: True
  # [IP: DROP, reason:12] La requête HTTP était censée contenir une section &lt;&gt; avec un URI-append contenant des fragments de préfixe/suffixe
  drop_malleable_with_invalid_uri_append: True</pre>



<p>Par défaut, tous ces contrôles sont appliqués.</p>



<p>Activer <code>debug: True</code> inondera votre tampon console avec de nombreuses lignes de journal décrivant chaque étape que RedWarden effectue dans son processus de décision complexe. Si vous voulez voir les corps complets de vos requêtes et réponses – réglez <code>debug</code> et <code>trace</code> sur true et enfoncez-vous dans la charge de journalisation !</p>



<h2><a href="https://github.com/mgeeky/RedWarden#faq" target="_blank" rel="noopener"></a></h2>



<h2><strong><span class="has-inline-color has-vivid-cyan-blue-color">FAQ</span></strong></h2>



<p><strong>– Ce programme peut-il s'exécuter sans profil Malleable ?</strong></p>



<p>Oui, il le peut. Cependant, la logique d'inspection des requêtes sera désactivée, le reste devrait fonctionner correctement : application de la géolocalisation IP, logique de recherche inverse, liste des IP bannies, etc.</p>



<p><strong>– Ce programme peut-il être facilement adapté à d'autres frameworks C2 ? Comme Mythic, Covenant, etc ?</strong></p>



<p>Facilement, non. Avec quelques efforts – oui. Comme je l'ai décrit ci-dessous, l'outil est mal écrit, ce qui rendra l'adaptation à d'autres C2 douloureuse. Cependant, c'est tout à fait faisable avec du temps et des efforts.</p>



<p><strong>– Mes paquets sont rejetés. Pourquoi ?</strong></p>



<p>Essayez d'activer <code>debug: True</code> et <code>trace: True</code> pour collecter autant de journaux que possible. Ensuite, vous devrez parcourir les journaux et inspecter ce qui se passe. Les paquets ressemblent-ils exactement à ce que vous attendiez dans votre profil Malleable ? Ou peut-être y a-t-il eu une altération subtile en cours de route qui cause le rejet du paquet par RedWarden (et qui pourrait aussi faire rejeter le paquet par le Teamserver) ?</p>



<h2><a href="https://github.com/mgeeky/RedWarden#known-issues" target="_blank" rel="noopener"></a></h2>



<h2><strong><span class="has-inline-color has-vivid-cyan-blue-color">Problèmes connus</span></strong></h2>



<ul><li>Il <em>peut</em> ajouter une légère surcharge au débit de sommeil interactif</li><li>La logique de traitement ProxyPass est loin d'être parfaite et est <em>vraiment</em> boguée (et bon sang, c'est moche !).</li><li>Des formes étranges de fichiers de configuration peuvent déraper l'analyseur RedWarden et le faire se plaindre. L'approche la plus simple pour surmonter cela serait de copier <code>example-config.yaml</code> et de travailler dessus à la place.</li></ul>



<h2><a href="https://github.com/mgeeky/RedWarden#oh-my-god-why-is-this-code-such-an-engineerical-piece-of-crap" target="_blank" rel="noopener"></a></h2>



<h2><span class="has-inline-color has-vivid-cyan-blue-color"><strong>Oh mon dieu, pourquoi ce code est-il un tel foutoir technique ?</strong></span></h2>



<p>Le code est <em>UN PUTAIN DE GRAND CAOS</em> – je l'admets – et il y a une raison honnête à cela : le projet a été développé à 90 % pendant les engagements réels de Red Team. Comme nous le savons tous, ce genre d'engagements implique tellement de choses à faire, laissant presque aucun temps pour un développement d'outil complexe approprié. Sans parler de la criticité de ce programme dans la configuration du projet. L'outil a initialement commencé comme un simple script proxy écrit en Python2, pour ensuite évoluer en un proxy avec plugins, recevant le plugin <code>malleable_redirector</code> – et depuis, j'ai essayé très dur de garder <code>proxy2</code> compatible avec les autres plugins que j'ai faits pour lui et de rester fidèle à son objectif d'origine (pauvre de moi, j'étais comme Microsoft !).</p>



<p>Le moment est venu de le laisser partir, de le rebrandiser et de commencer à corriger toutes les mauvaises odeurs de code introduites.</p>



<p>Tout cela dit, veuillez exprimer un certain niveau de compassion pour moi lorsque vous soulevez des problèmes, soumettez des pull requests et essayez d'aider plutôt que de juger ! ![🙂](upload://fvZRZhwnha71zzHIWJ27WZYvK3a.png) Merci !</p>



<h2><a href="https://github.com/mgeeky/RedWarden#todo" target="_blank" rel="noopener"></a></h2>



<h2><strong><span class="has-inline-color has-vivid-cyan-blue-color">À FAIRE</span></strong></h2>



<ul><li>Rechercher la possibilité d'utiliser les flux d'intelligence menaçante à des fins néfastes – comme par exemple détecter les fournisseurs de sécurité basés sur les IP</li><li>Ajouter la prise en charge de la base de données/API MaxMind GeoIP</li><li>Mettre en œuvre la prise en charge des signatures JA3 à la fois pour la détection &amp; le blocage et l'usurpation pour falsifier les configurations nginx/Apache2/personnalisées.</li><li>Ajouter une logique de suivi de beacons unique pour offrir la flexibilité de refuser les processus de staging et de communication à la discrétion du proxy</li><li>Introduire une contrainte de jour/heure lors de l'offre de capacités de redirection (<em>proxy uniquement pendant les heures de bureau</em>)</li><li>Ajouter la logique d'authentification et d'autorisation Proxy sur CONNECT/relay.</li><li>Ajouter la redirection ciblée aux utilisateurs mobiles</li><li>Ajouter des options de configuration pour définir des en-têtes HTTP personnalisés à injecter, ou ceux à supprimer</li><li>Ajouter des options de configuration pour exiger la présence d'en-têtes HTTP spécifiques dans les requêtes passant les critères ProxyPass.</li><li>Interface interactive permettant de taper de simples caractères contrôlant la verbosité du journal de sortie, similaire à celle de Nmap</li><li>Réécrire la logique de l'analyseur de profil Malleable vers <a href="https://github.com/Porchetta-Industries/pyMalleableC2" target="_blank" rel="noopener">pyMalleableC2</a>. Quand j'ai commencé à coder ma propre logique d'analyseur, il n'y avait pas tel outil sur Github.</li><li>Refactoriser toute la base de code</li></ul>



<h2><a href="https://github.com/mgeeky/RedWarden#author" target="_blank" rel="noopener"></a></h2>



<h2><strong><span class="has-inline-color has-pale-pink-color">Auteur</span></strong></h2>



<pre class="wp-block-preformatted">Mariusz B. / mgeeky, '19-'21
<mb@binary-offensive.com></mb@binary-offensive.com></pre>



<hr class="wp-block-separator">



<div class="wp-block-buttons">
<div class="wp-block-button"><a class="wp-block-button__link" href="https://github.com/mgeeky/RedWarden" style="border-radius:6px" target="_blank" rel="noopener"><strong>Lien Github</strong></a></div>



<div class="wp-block-button"><a class="wp-block-button__link" href="https://reconshell.com/best-arduino-books-available-for-developers/" style="border-radius:6px"><strong>Meilleurs livres Arduino disponibles pour les développeurs</strong></a></div>
</div>



<p></p>

<hr>
<small>Ceci est un sujet de discussion complémentaire pour l'entrée originale à <a href="https://reconshell.com/redwarden-flexible-cobaltstrike-malleable-redirector/">https://reconshell.com/redwarden-flexible-cobaltstrike-malleable-redirector/</a>. Vous pouvez commencer la discussion sur ce sujet en mentionnant le sujet ou en répondant ici.</small>

Maintenant, après une semaine de recherche et aucun résultat, à part notre ami qui me renvoie vers un guide avec “ne pas télécharger d’images sur le serveur” et le RSS affichera un petit résumé du sujet (ce qui n’est pas mon choix), et l’autre solution quand je corrige l’image avec un onglet “vide”.. donc :

<figure class="wp-block-image size-large">![cs|1024x689](upload://liMGLRlV0nW3HZuECbVKnLCrHcE.png)</figure>

devrait devenir

![cs|1024x689](upload://liMGLRlV0nW3HZuECbVKnLCrHcE.png)

et cela devrait être appliqué à tout le sujet pour réparer les images ; ce dont je me demande encore pourquoi “discourse” ne peut pas créer un petit plugin s’ils ne voulaient pas casser les règles du sujet ;

aussi, les conflits sont plus fréquents et très inconfortables après l’édition des photos, les images se sont à nouveau cassées sans raison, et je dois rééditer et choisir “revenir à la révision” pour réparer l’image, et ainsi de suite !!

Je crois que ce bug/ce problème existe depuis 2020, et ils ont promis de faire quelque chose l’année prochaine, “2021”, et nous sommes en “2022” maintenant.. et le bug n’est toujours pas corrigé… s’il vous plaît ne dites pas que ce n’est pas important car c’est comparé au travail avec “wordpress” qui est le 1er CMS au monde.. et discourse devrait le suivre.

Pouvez-vous me donner votre recommandation Rafeal, puisque j’explique le problème…

Aussi, votre suggestion si j’engage un développeur pour résoudre ce problème, cela devrait-il fonctionner ou non ? et quelle est votre recommandation pour le développeur à suivre.

Je l’ai ajouté à ma liste pour enquêter la semaine prochaine.

Petit problème avec les images intégrées en markdown que je vois dans l’un des flux RSS que j’ai configurés. Tous les éléments (je ne me souviens pas qu’il n’ait jamais eu ce problème) de ce flux finissent par avoir une image Markdown ![…](…) affichée comme du markdown. Par exemple…

\u003chttps://forum.podcaster.community/t/iheartmedia-partners-with-sounder-to-launch-best-in-class-brand-safety-tools/2004\u003e

s’affiche comme ceci…

Ces éléments proviennent de cette URL de flux RSS…

\u003chttp://podcasternews.com/feed/\u003e

@f1r4s et @craigconstantine ceci est causé par le bug le mieux décrit à l’adresse suivante :

La solution de contournement que nous avons est documentée à l’adresse suivante :

Par exemple @f1r4s, l’ajout de https://reconshell.com/wp-content/uploads/ au paramètre du site disabled image download domains laissera le message tel quel :