注入攻击的本质,是把用户输入的数据当成代码执行。
两个关键要求:1、用户能够掌控输入;2、本来程序要执行的代码,拼接了用户输入的数据
1、SQL注入
SQL注入即指的是web应用程序对用户输入数据的合法性无判断或过滤不严,攻击者能够在web应用程序中事先定义好的查找语句的结尾上添加额外的SQL语句,在管理员不知情的状况下实现违法操作,以此来实现诈骗数据库服务器执行非授权的任意查找,从而进一步得到相应的数据信息。
1、盲注(Blind Injection)
倘若Web服务器开启了错误回显,这就会给攻击者带来极重的便利,疯狂调试注入结果。
所说盲注,其实便是在服务器无错误回显时完成的注入攻击。
最平常盲注办法:构造简单的要求语句,按照返回页面结果是不是出现变化,来判断SQL语句是不是得到执行
例如:1=2、1=1对比分析页面变化
2、Timing Attack(时序攻击)
在暗码学中,时序攻击是一种侧信道攻击,攻击者试图经过分析加密算法的时间执行来推导出暗码。每一个规律运算在计算机必须时间来执行,按照输入区别,精确测绘执行时间,按照执行时间反推出暗码。
在MySQL中,有一个BENCHMARK()函数,用于测试函数性能
BENCHMARK(count,expr)
函数执行结果,是将表达式expr执行Count次
利用BENCHMARK()函数,能够让同一个函数执行若干次,使得结果返回的时间比平时要厂;经过时间长短的变化,能够判断注入语句是不是执行成果。这种一种边信道攻击,在盲注中叫作为Timing Attack database()system_user()current_user()last_insert_id()倘若当前数据库用户(current_user)拥有写权限,攻击者能够将信息写入本地磁盘
另外经过Dump文件办法,还能够写入一个webshell
2、数据库攻击技巧
SQL注入是基于数据库的一种攻击
1、平常的攻击技巧
SQL注入能够猜解数据库对应的版本,例如下面MySQL的版本倘若为4就会返回true
http://www.site.com/news.php?id=5 and substring(@@version,1,1)=4
利用union select来判断表命admin是不是存在,列名passwd是不是存在
id=5 union all select 1,2,3 from admin
id=5 union all select 1,2,passwd from admin
在注入攻击过程中,长城会用到有些读写文件的技巧。例如在MySQL中,能够经过LOAD_FILE()读取系统文件,并经过INTO DUMPFILE写入本地文件。前提:用户拥有读写系统响应文件或目录的权限
union select 1,1,LOAD_FILE(/etc/passwd),1,1;
倘若当前用户拥有创建表的权限。首要经过LOAD_FILE()将系统文件读出,再经过INTO DUMPFILE将该文件写入系统,而后经过LOAD DATA INFILE将文件导入创建的表中,最后就能够经过通常的注入技巧直接操作表的数据
除了能够运用INTO DUMPFILE外,还能够运用INTO OUTFILE,两者区别是DUMPFILE适用于二进制文件,它会将目的文件写入同一行内;而OUTFILE则更适用于文本文件。
写入文件的技巧,经常被用于导出一个WebShell,为攻击者进一步攻击做铺垫。所有咱们能够禁止普通数据库用户具备操作文件的权限。
2、命令执行
在MySQL中,除了能够经过导出webshell间接地执行命令外,还能够利用“用户自定义函数”的技巧,即UDF(User-Defined Functions)来执行命令
在流行的数据库中,通常都支持从本地文件系统中导入一个共享库文件做为自定义函数。运用如下语法能够创建UDF:
CREATE FUNCTION f_name RETURNS INTEGER SONAME shared_library
在MySQL4的服务
|