小白学安全第三篇之SQL注入 – 作者:360网络安全学院

SQL注入

1.png

当同学看到这张图的时候是否非常激动,这就是大名鼎鼎的SQLMAP扫描出结果,已经爆出数据库。旁边工位安全表哥说看到这种图片就可以拖出网站数据啦,瞬间后背一凉,这个安全问题看来真的出招便封喉,今天咱们就一块聊一聊SQL注入这个安全问题。

SQL注入成因

说起SQL注入那得从网站后台和数据库聊起,比如网址有这么个参数

2.png

Index.php/?id= 3(一些大表哥又开始激动了),如果后台连接数据库,肯定是从数据库的表中查到字段名为3的数据,并显示给我。学过数据库的小伙伴肯定能想起这么一条语句select* from about where id = 3,但是作为小白来说,没有学过数据库该怎么办。没关系今天我们就来讲讲数据库。

假设数据库有这么一张表,有ID,news,date字段(就是列名),回想刚才那条sql语句select* from about where id = 3 ,select * 就是要显示表中的所有字段,from about 就是要从about表操作数据,where肯定条件了,比如这个就是查找id=3的那条记录。综合上面,那条sql语句就是从about表中查找id=3的那条记录,并显示出该条记录的所有字段。

现在有个聪明的小哥,在刚才那个网址后加了几个关键字

3.png

咱们慢慢分析,刚才那个sql语句是select* from about where id = 3 现在网址中多了个 or 1=1,如果网站后台没有过滤的话,那么构造成的sql语句会是select *from about where id = 3 or 1=1,or大家都知道是或者的意思,而且只要or的任何一边成立那就返回真,那么这个条件解释为查询id =1 或者 1=1 的那条记录,别慌,1=1 那不是永远都是真的吗,那么sql语句解释为查找id =1 或者 永远是真的条件,瞬间一凉,这不是要找到表中所有的记录吗?瞬间这个网站数据全部显示出来。感觉到这家公司要跨啊……

SQL注入利用

上面or 1=1 只是一个简单的利用,其实还有很多利用方式,这里咱们在介绍一下别的方式,比如我想查找一下别的表的数据,比如admin表,要想查找别的表的数据,咱们就需要一个联合查询,联合查询就是将多张表合在一条sql语句一块查询,比如:selectid,news,date from adout where id = 3 union select id ,username,password fromadmin,联合查询需要注意一个问题,那就是前后select 中字段数目必须一样,而且前面每个字段类型必须和后面每个字段的类型相兼容。这时候小伙伴们又该有疑问了,在注入的时候我怎么知道前面是什么字段类型和字段数量?别着急,告诉你个方法,数据库中有个关键字NULL可以与任何字段类型互相兼容,至于字段数量有两种解决方式。第一、使用unionselect NULL,NULL,NULL……,这样挨个去尝试,当字段数量匹配的时候就会返回为真,当然前端也会显示正常,反之异常。第二、采用order by3,order by 4 ,order by 5……进行尝试匹配,当order by 的数字小于等于前面的字段的数量的时候返回正常,大于的时候返回失败。不过还是喜欢采用orderby 的方式去匹配字段数量,因为可以使用二分查找法来进行,稍等二分查找法是什么?这是算法上的一个查找算法,不会的同学可以翻出大学的课本看一看了。。。比如:字段数量为3,首选使用order by 1 正确,order by 5 错误,order by 3 正确, order by 4 错误,那么就可以锁定字段数量为3。

好了讲了这么多原理,咱们就讲一下刚才那个语句selectid,news,date from adout where id = 3 union select id ,username,password fromadmin ,相信有的同学已经知道什么意思了,那就是查询about表中id = 3的那条记录并显示出该条记录的id,news,date字段,并且同时查询admin表中的所有记录,并显示记录中id,username,password字段。这就把管理员的用户名和密码显示出来了。至于如何去获取数据库,表,字段,咱们会在以后的文章继续讲解。

SQL工具

有的同学要问了,有什么现成的工具可以使用,我感觉上面太麻烦了,

别着急,今天告诉你个神器,就是上面说的神器sqlmap,他是现在sql注入利用工具最牛的工具(说错不要打我啊),什么获取数据,什么脱裤,什么拿shell,都不在话下。今天咱们这里就讲一下用法,比如:sqlmap–u “www.xxx.com/about/index.php?id=3” –dbs 这句命令就是检测这个网址有没有注入点并且如果有注入点的话就显示出这个数据库所有数据库列表。厉害吧……

总结

最后在啰嗦几句,至于如何去牢固去掌握SQL注入,那么就需要你具备扎实的数据库基础和理论知识,那么才能千变万化去使用sql语句,至于工具使用,那么就应了这么一句话“绝知此事要躬行”,必须自己亲自去实践那么才能掌握其中的奥妙。不过我还想说,如果我真的学不下去怎么办呢?告诉你个好方法,那就来360网络安全学院这里有一批酷帅的小哥哥可以教你。期待你的到来!!!

来源:freebuf.com 2018-05-22 14:09:04 by: 360网络安全学院

© 版权声明
THE END
喜欢就支持一下吧
点赞0
分享
评论 抢沙发

请登录后发表评论