web安全sql注入初识

web<?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,数据库下有表名、列名、数据
web安全sql注入初识
数据库下的表名
web安全sql注入初识
查询表里面的字段
web安全sql注入初识
id为1的字段
web安全sql注入初识
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
web安全sql注入初识

版权声明:玥玥 发表于 2021-04-24 10:17:40。
转载请注明:web安全sql注入初识 | 女黑客导航