Web应用工作原理
MCV架构
表示层(浏览器)、逻辑层(编程语言)、存储层(数据库)
理解SQL注入
SQL注入是一种将代码插入或添加到应用的输入参数中的攻击,之后再将这些参数传递到后台的SQL服务器加以解析并执行。
SQL注入的主要方式是将恶意代码插入参数中,这些参数会被置入SQL命令中加以执行;
间接的攻击方式是将恶意代码插入到字符串中,之后再将这些字符串保存到数据库中的数据表或将其当作元数据,当将存储的字符串置入动态SQL命令中时,恶意代码就将被执行。
举例:
目标:http://www.victim.com/products.php?val=100
payload: http://www.victim.com/products.php?val=100 'OR'1'='1
目的:查看数据库中的所有商品
理解SQL注入的产生过程
构造动态字符串
- 转义字符串处理不当:SQL数据库将单引号字符(')解析成代码与数据间的分界线,单引号外面的内容都是需要运行的代码,单引号内的内容都是数据。
转义字符
单引号
空格
双竖线
逗号
点号在URL或者Web页面的字段输入一个单引号,即可辨别网站是否可进行SQL注入攻击
- 类型处理不当:处理数字数据时,不需要使用单引号将数字数据引起来。
举例:
SELECT * FROM TABLE WHERE USERID = 1 UNION ALL SELECT LOAD_FILE('etc/passwd') --
- 查询语句组装不当:在程序开发阶段,不知道要查询的表或字段,故表与字段为用户可控的。
http://www.victim.com/user_details.php?table=users&column1=user&column2=password&column3=Super_priv
其中table,column1,column2,column3均为可控的。
- 错误处理不当:将详细的内部错误消息显示给攻击者,为攻击者提供与网站潜在缺陷相关的重要线索。
- 多个提交处理不当:存在多个表单提交时,只对第一个表单做了验证。
不安全的数据库配置
系统管理员账户:
SQL Server --> sa
MySQL --> root / anonymous
Oracle --> SYS / SYSTEM / DBSNMP / OUTLN