Kali学习笔记42:SQL手工注入(4)
前三篇文章都是在讲发现SQL注入漏洞
如何查询得到所有的信息
那么另一条思路还未尝试过:能否修改数据?
例如这样:
'; update users set user='yiqing' where user='admin
理论上是会成功的,由于DVWA编写BUG,导致无法执行
实战中,可以这样直接修改数据
可以修改,那么就可以插入数据:
'; INSERT INTO users (' user_id',' first_name',' last_name',' user','password','avatar') VALUES ('35','yiqing','xu','xyq','5f4dcc3b5aa765d61d8327deb882cf99','OK'); --
更恶意的人可以删库:
'; DROP TABLE users; --
由于DVWA的编写问题,这些示例都不能成功
可以这样说:正式由于程序员水平不够,阴差阳错防止了一部分SQL注入
到这里其实基本的手工SQL注入就说完了
实战中,SQL注入考验的是一个人的综合素质
以及对数据库本身的了解程度
一个人如果是SQL注入方面的大师,那么他一定是数据库方面的专家
接下来对DVWA三种SQL注入的源码进行分析:
低级别:
<?php
if(isset($_GET['Submit'])){
// Retrieve data
$id = $_GET['id'];
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
$num = mysql_numrows($result);
$i = 0;
while ($i < $num) {
$first = mysql_result($result,$i,"first_name");
$last = mysql_result($result,$i,"last_name");
echo '<pre>';
echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
echo '</pre>';
$i++;
}
}
?>
分析:
没有对输入做任何过滤,直接放入SQL语句
最后对结果进行输出
缺陷:
1.对输入没有任何过滤
2.如果查询失败,直接返回数据库错误信息,不妥
中级别:
<?php
if (isset($_GET['Submit'])) {
// Retrieve data
$id = $_GET['id'];
$id = mysql_real_escape_string($id);
$getid = "SELECT first_name, last_name FROM users WHERE user_id = $id";
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
$num = mysql_numrows($result);
$i=0;
while ($i < $num) {
$first = mysql_result($result,$i,"first_name");
$last = mysql_result($result,$i,"last_name");
echo '<pre>';
echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
echo '</pre>';
$i++;
}
}
?>
分析:使用函数:
mysql_real_escape_string()
对输入进行过滤
这个函数的作用:给非法字符'"/%#等字符前面加上转义符号:\
还有一个地方存在问题:SQL语句没有使用拼接的方式,所以SQL注入不需要单引号进行闭合
新版本的PHP语言采用其他函数:MySQLi,PDO_MYSQL
结论:
1.SQL注入漏洞还是存在,而且会报错,理论上可以避免一部分SQL注入
2.无意义代码:既然过滤了单双引号,那么为什么要改SQL语句,使得不需要引号就可以注入
3.依然可以SQL注入,有方法绕过输入过滤
注入方式:

其实注入比刚才反而简单了:比如查所有的表
0 union select table_name,table_schema from information_schema.tables

高级别:
<?php
if (isset($_GET['Submit'])) {
// Retrieve data
$id = $_GET['id'];
$id = stripslashes($id);
$id = mysql_real_escape_string($id);
if (is_numeric($id)){
$getid = "SELECT first_name, last_name FROM users WHERE user_id = '$id'";
$result = mysql_query($getid) or die('<pre>' . mysql_error() . '</pre>' );
$num = mysql_numrows($result);
$i=0;
while ($i < $num) {
$first = mysql_result($result,$i,"first_name");
$last = mysql_result($result,$i,"last_name");
echo '<pre>';
echo 'ID: ' . $id . '<br>First name: ' . $first . '<br>Surname: ' . $last;
echo '</pre>';
$i++;
}
}
}
?>
分析:
首先函数
stripslashes()
去掉字符\
然后再进行中级别的特殊字符转义
这些都是小问题,之所以高级别,在于下面这个函数:
is_numeric()
如果输入不是一个数字,那么什么都不执行
结论:很安全,几乎不可能找到SQL注入漏洞
到这里SQL手工注入就完成了
后边将说一说SQL盲注和SQL自动注入,以及神器SQLMAP
Kali学习笔记42:SQL手工注入(4)的更多相关文章
- 小白日记41:kali渗透测试之Web渗透-SQL手工注入(三)-猜测列名、表名、库名、字段内容,数据库写入
SQL手工注入 靶机:metasploitable(低) 1.当无权读取infomation_schema库[MySQL最重要的源数据库,必须有root权限]/拒绝union.order by语句 ...
- SQL反模式学习笔记21 SQL注入
目标:编写SQL动态查询,防止SQL注入 通常所说的“SQL动态查询”是指将程序中的变量和基本SQL语句拼接成一个完整的查询语句. 反模式:将未经验证的输入作为代码执行 当向SQL查询的字符串中插入别 ...
- 小白日记40:kali渗透测试之Web渗透-SQL手工注入(二)-读取文件、写入文件、反弹shell
SQL手工注入 1.读取文件[load_file函数] ' union SELECT null,load_file('/etc/passwd')--+ burpsuite 2.写入文件 ' unio ...
- 小白日记39:kali渗透测试之Web渗透-SQL手工注入(一)-检测方法
SQL手工注入(一) SQL注入:通过把SQL命令插入到Web表单递交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.[SQL注入原理] ##服务端程序将用户输入参数作为查询 ...
- SQL手工注入基础篇
0.前言 本篇博文是对SQL手工注入进行基础知识的讲解,更多进阶知识请参考进阶篇(咕咕),文中有误之处,还请各位师傅指出来.学习本篇之前,请先确保以及掌握了以下知识: 基本的SQL语句 HTTP的GE ...
- 【新手篇】搭建DCN漏洞靶机及简单的SQL手工注入
很多新手小白入门后发现想要学好“网安”技术,除了掌握基础理论知识,更需要经常模拟不同的漏洞环境,但是如果使用外网服务器练习,会存在一定风险,因此能够搭建一个本地的模拟环境去测试漏洞将是一个不错的方案. ...
- Oracle学习笔记三 SQL命令
SQL简介 SQL 支持下列类别的命令: 1.数据定义语言(DDL) 2.数据操纵语言(DML) 3.事务控制语言(TCL) 4.数据控制语言(DCL)
- .NET CORE学习笔记系列(2)——依赖注入[7]: .NET Core DI框架[服务注册]
原文https://www.cnblogs.com/artech/p/net-core-di-07.html 包含服务注册信息的IServiceCollection对象最终被用来创建作为DI容器的IS ...
- .NET CORE学习笔记系列(2)——依赖注入[6]: .NET Core DI框架[编程体验]
原文https://www.cnblogs.com/artech/p/net-core-di-06.html 毫不夸张地说,整个ASP.NET Core框架是建立在一个依赖注入框架之上的,它在应用启动 ...
随机推荐
- 初探 Liunx 的命令模式(一)
1.从 X window 切换到 纯命令模式 Ctrl+Alt+[F2-F6].切换回来 Ctrl+Alt+[F2-F6]. 2. 1)CentOS Linux 7 (Core)代表 Linux d ...
- 网络安装Centos x64 6.10
1.下载老毛桃PE最新增强版本,然后生成一个可启动U盘. 2.在U盘或移动硬盘中创建一个目录 MYEXT,然后把centos的安装iso放到里面. 3.引导选择从外置ISO进行安装. https:// ...
- JS全角与半角转化小结
最近在做PC端网站的页面的一个表单校验,需要把全角输入转化成半角符号.之前没有了解过这些编码的知识,还是得Google一下查查资料,故简单总结一下. 什么是全角.半角 传统上,英语或拉丁字母语言使用的 ...
- MongoDB数据库发展历程及商业模式
2007年,Dwight Merriman, Eliot Horowitz和Kevin Ryan成立10gen软件公司,在成立之初,这家的公司目标进军云计算行业,为企业提供云计算服务.在开发云计算产品 ...
- HeadFirst学习笔记-1. 设计模式入门
1.概念 在开始学习前,我们先了解一些概念,方便我们接下来的学习. OO基础 抽象 继承 多态 封装 OO原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 设计模式 设计模式(Desi ...
- 乌班图平台kurento +kurento-one2many-call+videojs-panorama+RICOH THETA实现VR直播
这个小项目是公司要求的,开发大佬找到的资源,让小弟搭建一下子.第一次体验VR视频效果,感觉很好. 下面将搭建过程简单写出来,有需求的可以参考下. 一.乌班图平台搭建 按照centos7的习惯搞了一下乌 ...
- python3.X中try/except
包含try...except...在3.x版本中与2.x版本中的用法差异. 1.先说差异: 在2.x的python中用法实例: try: ...... except Exception,e: rais ...
- 小程序app.onLaunch中获取用户信息,index.onLoad初次载入时取不到值的问题
问题描述: //app.js App({ globalData:{ nickname:'' }, onLaunch: function () { let that=this; //假设已经授权成功 w ...
- avuex
今天做了的avuex终于发现了问题.作为前端小白,解决花了一上午,这是因为以前没有用过框架.还好终于憋出来了.具体如下,还望不要嘲笑自己 查找好久原来是没有仔细看文档的原因,一定要记住,这是一个技术活 ...
- 利用JavaFx开发RIA桌面应用-在线资料
转载请注明来源-作者@loongshawn:http://blog.csdn.net/loongshawn/article/details/52805751 1.前言 虽说java已经不是主流的桌面应 ...