PHP代码审计之SQL注入-Day3

认识SQL注入漏洞

SQL注入攻击(SQL Injection),简称注入攻击,是web开发中最常见的一种安全漏洞。可以用它来从数据库获取敏感信息,或者利用数据库的特性执行添加用户,导出文件等一系列恶意操作,甚至有可能获取数据库乃至系统用户最高权限。
而造成SQL注入的原因是因为程序没有有效过滤用户的输入,使攻击者成功的向服务器提交恶意的SQL查询代码,程序在接收后错误的将攻击者的输入作为查询语句的一部分执行,导致原始的查询逻辑被改变,额外的执行了攻击者精心构造的恶意代码。

SQL注入相关函数

#连接数据库
mysqli_connect(host,username,password,dbname,port,socket);
#数据库的查询
mysqli_query(connection,query,resultmode);
#用关键字索引取值
mysqli_fetch_array(connection,MYSQLI_ASSOC);
mysqli_fetch_assoc(connection);
#用数字索引取值
mysqli_fetch_array(connection,MYSQLI_NUM);
mysqli_fetch_row(connection);
#数据处理函数
mysqli_real_escape_string(connection,escapestring);
#转义在SQL语句中使用的字符串中的特殊字符
#escapestring要转义的字符串。编码的字符是NULL(ASCII0)、\n、\r、\、'\"和Control+z
addslashes();#函数返回在预定义字符之前添加反斜杠的字符串。(stripslashes())
#返回在预定义字符之前添加反斜杠的字符串。
#预定义字符是:单引号,双引号,反斜杠,NULL
preg_match(pattern,subject...);
#搜索subject与pattern给定的正则表达式的一个匹配。

ps:

写了一个测试页面
在这里插入图片描述

<?php
$servername='127.0.0.1';
$dbname='test';
$username='root';
$pwd='123456';
$conn = mysqli_connect($servername,$username,$pwd,$dbname);
if (!$conn) {
	die('连接失败:'.mysqli_connect_error());
}
echo 'mysqli_real_escape_string: '.mysqli_real_escape_string($conn,$_GET['test'])."</br>";
echo 'addslashes:'.addslashes($_GET['test'])."</br>";
echo 'preg_match:'.preg_match('/(and|or)/i',$_GET['test'])."</br>"; #过滤and|or
?>

未传入参数时
在这里插入图片描述
传入参数为1时
在这里插入图片描述
为1’时
在这里插入图片描述
为1’ and | or时
在这里插入图片描述
请读者自行体会。

SQL注入的防御

1、严格检查输入变量的类型和格式对于整数参数。
2、过滤和转义特殊字符在username这个变量前进行转义。
3、普通用户与系统管理员用户的权限要有严格的区分。
4、加强对用户输入的验证

1、加强对用户输入内容的检查与验证。
2、二是强迫使用参数化语句来传递用户输入的内容。

SQL注入漏洞的审计流程

1、在seay中开启查询日志
2、查找系统的输入点,尝试输入一些内容并执行
3、跟随输入信息,判断输入内容是否被过滤,是否可利用
4、构造注入语句进行测试

寻找输入点

1、表单提交,主要是POST请求,也包括GET请求。
2、URL参数提交,主要为GET请求参数。
3、Cookie参数提交。
4、HTTP请求头部的一些可修改的值,比如Referer、User-Agent等。
5、一些边缘的输入点,比如.jpg文件的一些文件信息等。

DVWA简单审计

分析源码
在这里插入图片描述
可以看到SQL语句为:

SELECT first_name, last_name FROM users WHERE user_id = '$id';"

可以发现未对SQL语句进行任何过滤,导致这个输入点存在注入。
判断columns(字段数)
在这里插入图片描述
在这里插入图片描述
只有两个字段
在这里插入图片描述
在这里插入图片描述

不继续演示了
直接给出payload:

1' union select user,password from users#

本文到此已经结束,由于水平有限,在很多地方肯定有些不足之处,如有纰漏或者错误,还请斧正,定当改进。文章写的很不容易,大家的评论和点赞就是我的最大动力,谢谢支持!

2020-03-11
ro4lsc

发布了46 篇原创文章 · 获赞 133 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/gd_9988/article/details/104777688
今日推荐