小言_互联网的博客

web安全sql注入初识

284人阅读  评论(0)

web安全漏洞的本质:漏洞特定函数,传入可控变量,过滤形式。

sql注入原理本质:攻击者构造恶意的sql语句带入可能存在对数据库操作的可控变量如id,由于对特定函数没有经过严格的过滤,就导致了攻击者直接对数据库进行查询等操作。

<?php
	header("Content-Type: text/html; charset=utf-8");
	$id=$_GET['id'];
	$conn=mysql_connect('localhost','root','root');//连接数据库
	mysql_select_db('javaweb-bbs',$conn);//选择数据库名为javaweb-bss的数据库
	$sql="select * from sys_article where id = $id";//组合定义SQL语句
	echo $sql.'<hr>';//输出变量sql
	$result=mysql_query($sql);//执行变量sql里的SQL语句
	if($row=mysql_fetch_array($result)){
    //对执行的结果进行显示
		echo $row['title'].'<hr>';
		echo $row['content'].'<hr>';
	}
?>
//http://127.0.0.1/title.php?id=1

如上述php代码中文件名:title.php,参数:id,传入参数值:1
正常传入参数id=1,sql语句 $sql=“select * from sys_article where id = 1”;
构造后id=1 order by 5,sql语句 $sql=“select * from sys_article where id = 1 order by 5”;
那么这样构造后就会导致直接对数据库进行一些操作

判断是否存在注入点
方法1
http://127.0.0.1/title.php?id=1 and 1=1 页面正常
http://127.0.0.1/title.php?id=1 and 1=2 页面错误
就表示可能存在sql注入
select * from sys_article where id = 1 and 1=1 页面正常
select * from sys_article where id = 1 and 1=2 页面错误
具体原因 and 1=1 为真 and 1=2 为假

方法2
http://127.0.0.1/title.php?id=1 a
直接在参数后面加上任意字符,让传入的参数变得不可控

过滤形式
这里常规的过滤方式就是对$id进行过滤,因为id是传入进来的参数,比如限制它只能传入数字这样就行了一个过滤

Mysql数据库结构
Mysql数据库 数据库A对应网站A,数据库下有表名、列名、数据

数据库下的表名

查询表里面的字段

id为1的字段

mysql的数据结构大致就这样

单参数与多参数
单参数 http://127.0.0.1/title.php?id=1
多参数 http://127.0.0.1/title.php?id=1&page=2&name=3
无参数 http://127.0.0.1/title.php

单参数直接通过对应的id传参来测试,多参数的话就尝试发现每个传入的参数点哪一个存在漏洞,如id存在漏洞
http://127.0.0.1/title.php?id=1 and 1=1&page=2&name=3
http://127.0.0.1/title.php?id=1 and 1=2&page=2&name=3

那么工具测试的话就可以把id反正后面,也可以给一个参数让工具来判断
http://127.0.0.1/title.php?page=2&name=3&id=1

无参数可能无法注入,那么无参数就可以通过post请求传参来判断sql注入点

搭建sql注入环境sqli-labs
https://github.com/Audi-1/sqli-labs


转载:https://blog.csdn.net/qq_36241198/article/details/116001409
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场