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

在文章之前先提一下~~~ 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

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

原文发布于微信公众号 - 晨星先生(MoXuanIT)

原文发表时间:2016-11-28

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏乐沙弥的世界

MySQL Utilities工具包概述及安装

31210
来自专栏MYSQL轻松学

MYSQL INNODB表压缩

压缩前提 表压缩能提升性能,减少存储空间,主要是用在字符类型比较大的表上(VARCHAR,VARBINARY和BLOB和TEXT类型),且读多写少的情况下,如果...

1.1K40
来自专栏沃趣科技

ASM 翻译系列第十二弹:ASM Internal amdu - ASM Metadata Dump Utility

原作者:Bane Radulovic 译者: 庄培培 审核: 魏兴华 DBGeeK社群联合出品 amdu - ASM Metadata Dump U...

37650
来自专栏极客猴

Django 学习笔记之模型(上)

上片文章讲解模板。你本文将讲解 “MTV” 中 M 层次,即模型层(数据存取层)。模型这内容比较多,我将其拆分为 3 个部分来讲解。同时,文章也配套了例子,你可...

8830
来自专栏技术翻译

关于Couchbase-Dzone数据库,你必须了解的10件事情

此功能已经存在了一段时间,但仍值得一提。一些Key-Value Store只允许你将整个文档全部整合在一起,这是一个合理的。但是,如果你使用Couchbase作...

28300
来自专栏祝威廉

ElasticSearch QueryCache漫谈

这些天在做ES调优,因为之前更多的是考虑ES的架构和可运维性,并没有过多关注query调优这块。今天一查Query Cache相关的内容,发现是少之又少。于是自...

19120
来自专栏张善友的专栏

Ibatis in action 电子书

电子书 ? 是ibatis 项目组写的ibatis开发的权威书籍.现在只有电子版,目前使用Java作为描述的平台,这个书对于.NET和Ruby一样适用.    ...

22170
来自专栏乐沙弥的世界

MongoDB执行计划获取(db.collection.explain())

16230
来自专栏大内老A

在Entity Framework中使用存储过程(一):实现存储过程的自动映射

之前给自己放了一个比较长的假期,在这期间基本上没怎么来园子逛。很多朋友的留言也没有一一回复,在这里先向大家道个歉。最近一段时间的工作任务是如何将ADO.NET ...

36850
来自专栏恰童鞋骚年

.NET基础拾遗(6)ADO.NET与数据库开发基础

  SQL语句时操作关系型数据库的基础,在开发数据访问层、调试系统等工作中十分常用,掌握SQL对于每一个程序员(无论是.NET、Java还是C++等)都非常重要...

14530

扫码关注云+社区

领取腾讯云代金券