数据加载中……


 

 登   陆

我的分类(专题)
数据加载中……

链接

Blog信息
数据加载中……

 



渗透中巧用IsNumeric函数
樱木花盗 发表于 2009-4-6 22:00:10

来源: http://www.pcsec.org/
Author: Tr4c3[at]126.com
先看Vbs手册里的描述:

IsNumeric 函数
返回 Boolean 值指明表达式的值是否为数字。

IsNumeric(expression)

expression 参数可以是任意表达式。

说明
如果整个 expression 被识别为数字,IsNumeric 函数返回 True;否则函数返回 False。如果 expression 是日期表达式,IsNumeric 函数返回 False。


一些程序员在写代码的时候比较喜欢用isnumeric来判断参数是否为数字型,依次来杜绝sql注入的产生。但是并不是1这样的数字才符合条件,12e3,1d3,"1000,1000","1000,100"这样的计数法都符合条件,只要下面没用clng或者cint之类强行转换类型的函数,就给我们带来了不一般的用处。
如下面的代码:

 

Vb 代码复制代码
  1. <%
  2. Dim idconnrsstrSql
  3. id = Request("id")
  4.  
  5. If IsNumeric(id) = False Or id="" Then
  6.     Response.Write "非法数据"
  7.     Response.End
  8.     'Else
  9.     'id = CLng(id)
  10. End If
  11.  
  12. Set conn = CreateObject("Adodb.Connection")
  13. connStr = "Provider=SQLOLEDB.1;Password=pass;Persist Security Info=True;User ID=sa;Initial Catalog=pubs;Data Source=localhost"
  14. conn.open connStr
  15. If id<>"" Then
  16.     Set rs = CreateObject("Adodb.RecordSet")
  17.     strSql = "select * from authors where contract=" & id 'id=1
  18.     rs.open strSqlconn11
  19.  
  20.     While Not rs.bof And Not rs.eof
  21.        Response.Write rs("au_id") & "<br>"
  22.        Rs.Movenext
  23.     Wend
  24.     Rs.close
  25.     Set rs = Nothing
  26.     conn.close
  27.     Set conn = Nothing
  28. End If
  29.  
  30. %>
  31.  

然后提交http://localhost/sql_t.asp?id=1d3,返回如图所示.

实战测试:

在旁注的时候大家往往喜欢找个sql的下手,毕竟比access的用处要大,这样isnumeric帮了我们很大的忙,我在实战中发现不少站都可以用这个方法粗略的探测数据库类型,clng等函数处理过的不行,偶尔也会出现其他一些错误提示,具体视运气而定。


阅读全文 | 回复(0) | 引用通告 | 编辑
 


发表评论:

    昵称:
    密码: (游客无须输入密码)
    主页:
    标题:
    数据加载中……


Powered by Oblog.