SQL注入 01
0x01 用户、脚本、数据库之间的关系
首先客户端发出了ID=36的请求,脚本引擎收到后将ID=36的请求先代入脚本的sql查询语句Select * from A where id = 36 , 然后将此代入到数据库中进行查询,查到后将返回查询到的所有记录给脚本引擎,接着脚本引擎根据自己写的过滤函数和编码特殊字符等,生成一个静态页面返回给客户端,最后将网站返回的网页展示给用户(那这里的意思就是先将查询语句实现进行查询,然后当数据库返回给脚本引擎的时候再进行过滤)
0x02 SQL注入的定义
就是通过sql命令插入到web表单递交或输入域名或请求的查询字符串,最终达到欺骗服务器执行恶意代码的过程
具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后台数据库引擎执行的能力,它可以通过在Web表单中输入(恶意)SQL语句得到一个存在安全漏洞的网站上的数据库,而不是按照设计者意图去执行SQL语句
0x02.1 成因
用于未对用户的输入做好过滤,导致用户将恶意代码SQL语句输入进来,带到后端进行查询,查询到本不应该出现的数据
0x03 触发SQL注入
所有的输入只要和数据库进行交互的,都有可能触发SQL注入
常见的包括:
1、GET参数触发SQL注入
2、POST参数触发SQL注入
3、COOKIE 触发SQL注入
4、其他参与sql执行的输入都有可能进行SQL注入
0x04 SQL注入的过程
1、客户端:参数值等数据被修改
2、服务端:未经过检查和过滤就将被修改的数据注入到SQL命令中,SQL命令功能被修改
3、数据库引擎:执行被修改后的数据
4、服务端:将注入结果返回给客户端
5、客户端:根据上一次获取到的敏感信息构造注入语句进行更一步的注入
0x05 SQL注入场景
一切用户可控参数的地方,比如:URL路径、GET/POST请求参数、HTTP请求头
0x06 SQL注入作用
- 绕过登录验证:使用万能密码登录网站后台
- 获取敏感数据:获取网站管理员账号、密码等
- 文件系统操作:列目录,读取,写文件等
- 注册表操作:读取、写入、删除注册表等
- 执行系统命令:远程执行命令