[超级基础]Web安全之SQL注入由浅入深(?)
前言
断断续续看Web安全到现在了,感觉对很多基础知识还是一知半解,停留在模糊的层次。所以准备系统总结一下。
Sql注入我以前一直不以为然,一是现在能sql的站确实很少,二是有像sqlmap的工具可以用。而且想要修复也很简单。
但后来发现不管是CTF题目中,还是实站中还有有很多需要用到sql注入的地方。17版的OWASPtop10中,注入依旧是A1级别的漏洞。
所以在此学习并回顾一下此类漏洞。
1 环境准备
1.1什么是Sql注入
下面是17OWASP中对注入类漏洞的定义:

简单的说,SQL注入就是一种通过控制输入来修改后台SQL语句达到代码执行进行攻击目的的技术。
可能造成的后果:越权读取数据,控制数据库(增删改查,所谓的脱库删库)。
1.2 Sql注入产生原因
Web流程中,服务器的作用之一是接受用户(前端)输入的数据,并可以与数据库进行交互,然后发回响应信息。
服务器怎么与数据库进行交互?其实就是“替”人执行sql语句并返回执行结果。
简单的说,服务器把输入的数据作为sql语句的一部分拼接起来,并且执行,就完成了数据库交互过程。
这种SQL语句更准确的概念叫做动态sql语句。以PHP举例:
$sql = "select * from users where name = '{$_POST['username']}' and pwd = '{$_POST['password']}'";
那么我们就可以控制post参数username和password,从而达到修改sql语句,实现攻击的目的。
1.3 模拟环境
环境:apache/iis+php+mysql/MarinDB的集成环境。建议PHP版本使用5.6以下版本。(高版本已经废弃了原来关于sql的语法)
配置见:超详细搭建PhpStorm+PhpStudy开发环境
此外还需要了解最基础的sql语法:Mysql速成
然后就可以编写我们的测试页面了:
<?php
if(isset($_GET["id"])){
/* 数据库连接过程 */
$con = mysql_connect("localhost","root","root");
if (!$con)
{
die('Fail connect:' . mysql_error());
}
/*选库,执行sql语句,获取结果*/
mysql_select_db("sqltest",$con);
$querry = "select * from users where id = " . $_GET['id'];
//动态sql语句有很多种写法,如:$querry = "select * from users where id = {$_GET['id]}";
/*执行sql语句*/
$sql = mysql_query($querry,$con);
/*获取数据,详见http://www.fidding.me/article/32*/
$result = mysql_fetch_array($sql);
/*写个测试页面用来反馈结果*/
echo "<table class='itable' border='1' cellspacing='0' width='300px' height='150'>";
echo "<tr>";
echo "<td>id</td>";
echo "<td>username</td>";
echo "</tr>";
echo "<tr>";
echo "<td>".$result['id']."</td>";
echo "<td>".$result['username']."</td>";
echo "</tr>";
echo "</table>";
/*关闭数据库链接*/
mysql_close($con);
echo $querry;
}
?>
对于上述代码中不清楚的函数,这里不一一说明了,百度有很详细的说明。
把写好的.php文件扔到phpstudy安装目录下(phpstudy\PHPTutorial\WWW)
现在还需要在mysql中建立sqltest数据库,库中users表,带三个字段:id(int),username(varchar),password(varchar)
这个也不细说了,用命令行或者phpmyadmin都可以,百度教程一大把。

往里面插几条数据,就ok了。

测试一下:
[超级基础]Web安全之SQL注入由浅入深(?)的更多相关文章
- WEB 安全之 SQL注入 < 三 > 提权
SQL注入是一个比较“古老”的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果能清楚了解 攻击的全 ...
- WEB 安全之 SQL注入 < 二 > 暴库
SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...
- web安全学习(sql注入1)
web安全学习(sql注入1) 一.简介 sql语句就是数据库语句,而sql注入就是用户将自己构造的恶意sql语句提交,然后服务器执行提交的危险语句.sql注入可能造成信息泄露以及服务器被控制等危害. ...
- mysql基础语法及拓展到web中的sql注入
本来是想写下javaweb的mvc(tomcat, spring, mysql)的搭建, 昨天搭到凌晨3点, 谁知道jdbcTemplate的jar包不好使, 想死的心都有了, 想想还是休息一下, ...
- Web安全 之 SQL注入
随着B/S模式应用开发的发展,使用这种模式编写的应用程序也越来越多.相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患.用户可以提交一段数据库查询代码,根据 ...
- 【渗透攻防WEB篇】SQL注入攻击初级
前言不管用什么语言编写的Web应用,它们都用一个共同点,具有交互性并且多数是数据库驱动.在网络中,数据库驱动的Web应用随处可见,由此而存在的SQL注入是影响企业运营且最具破坏性的漏洞之一,这里我想问 ...
- web安全之sql注入实例(5.0之前的)
web安全之sql(5.0之前)注入实例 5.0之前的数据库没有information库. 所以这里需要运用的是load_file()函数来获取信息. 1.判断是否有sql注入,用and 1=1 和 ...
- WEB 安全之 SQL注入<一> 盲注
SQL注入是一个比较"古老"的话题,虽然现在存在这种漏洞的站点比较少了,我们还是有必要了解一下它的危害,及其常用的手段,知己知彼方能百战不殆.进攻与防守相当于矛和盾的关系,我们如果 ...
- web安全之SQL注入
一.sql注入是一种将sql代码添加到输入参数中 传递到sql服务器解析并执行得一种攻击手法 例: $sql = "SELECT * FROM goods WHERE Id = 1" ...
随机推荐
- 定时器new Timer().schedule()的使用
Timer是一种工具,线程用其安排以后在后台线程中执行的任务.可安排任务执行一次,或者定期重复执行.实际上是个线程,定时调度所拥有的TimerTasks. TimerTask是一个抽象类,它的子类由 ...
- linux 命令——56 ss(转)
ss是Socket Statistics的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的信 ...
- NYOJ-596-谁是最好的Coder
原题链接 谁是最好的Coder 时间限制:1000 ms | 内存限制:65535 KB 难度:0 描述 计科班有很多Coder,帅帅想知道自己是不是综合实力最强的coder. 帅帅喜欢帅,所以他 ...
- UVALive 4987 EvacuationPlan(dp,贪心)
在所有避难所都有至少一只队伍的情况,总移动距离最小. 把队伍的位置和人都排序. 会发现,对于最后一个队伍i和最后一个避难所j, Case 1:pos[j]>=pos[i],那么i是距离j最近的一 ...
- 2754: C++习题-快速排序
2754: C++习题-快速排序 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 921 Solved: 406[Submit][Status][Web ...
- Angular6中[ngClass]、[ngStyle]的基本使用
1.ngStyle 基本用法 <div [ngStyle]="{'background-color':'green'}"></<div> 判断添加 & ...
- 使用ASP.NET Web API和Web API Client Gen使Angular 2应用程序的开发更加高效
本文介绍“ 为ASP.NET Web API生成TypeScript客户端API ”,重点介绍Angular 2+代码示例和各自的SDLC.如果您正在开发.NET Core Web API后端,则可能 ...
- Python基础-Python注释
一.什么是注释.特性 1.一段文字性的描述,通过注释,可以解释和明确Python代码的功能,并记录将来要修改的地方. 2.当程序处理时,Python解释器会自动忽略,不会被当做代码进行处理 二.注释的 ...
- Spring+ ApplicationListener
有时候 需要在容器初始化完成后,加载些 代码字典或不常变的信息 放入缓存之类的,这里使用spring 初始化bean,并实例化 1.创建一个ApplicationListener类 import o ...
- TCP/IP与OSI参考模型原理
网络是很重要同时也是很难理解的知识,这篇文章将会用自己容易理解的方式来记录有关网络的tcp与osi模型内容,不求专业深刻,但求通俗易懂也好. OSI参考模型 OSI定义了网络互连的七层框架(物理层.数 ...