SQL注入
SQL注入笔记
老司机开代码
这个作者很懒,什么都没留下…
展开
-
SQLmap使用笔记
文章目录1. 基础语法1.1 常用参数介绍1.2 实例1.2.1 -u 测试目标网站是否存在漏洞1.2.2 限定参数及部分查询参数的使用1.2.3 --cookie1.2.4 --data1.2.5 -r2. 进阶语法1. 基础语法1.1 常用参数介绍为了便于使用和记忆,个人将自己经常使用的一些参数做了如下分类。赋值参数:-u : 指定测试目标URL--cookie : 测试时提交cookie信息;可用于cookie注入(当--level设置为2才可用)--data : 构造POST提原创 2020-09-03 13:46:55 · 445 阅读 · 0 评论 -
Sqli-labs 1-4(union注入)
文章目录1. Less-11.1 判断id类型1.2 判断检索字段个数1.3 获取数据库信息1.3.1 查询网站使用的数据库名1.3.2 爆破数据表1.3.2 以上使用sql语句的介绍2. Less-23. Less-3注意:有时候可能我们输入了正确的注入语句,但是页面没有给出正确的响应,问题的原因我也不清楚,但是你再重置一下这个sqli的数据库能够解决大部分的问题。![在这里插入图片描述](...原创 2020-08-03 17:34:01 · 475 阅读 · 0 评论 -
Less 5-6(双注入)
文章目录1. Less-51.1 问题描述1.2 解法一:双注入破解1.2.1 双注入的过程1.2.2 双注入的原理(floor报错的原因)1. rand()生产随机数的原理2. floor(rand())如何分组1.3 解法二:布尔盲注2. Less-63. 小结1. Less-51.1 问题描述首先我们看一下题目意思是考察SQL注入的双注入。这里涉及到了一个关键的知识点,利用cou...原创 2020-08-03 17:34:13 · 2008 阅读 · 2 评论 -
Less-7(文件读写操作)
文章目录OUTFILE注入实战1. 关卡分析2. 过关斩将2.1 `secure_file_priv`2.2 注入过程OUTFILE注入在前面的学习中,我们知道了sql注入中的盲注和双注入是个什么鬼。今天,我门又解锁了一个新的姿势----outfile。那么outfile是干什么的呢?简单讲就是将一句话木马通过outfile传入网站目录,然后连上去;然后你就能为所欲为了(理想情况下)。实...原创 2020-08-03 17:34:38 · 1157 阅读 · 0 评论 -
Less-8(盲注--布尔盲注)
文章目录布尔盲注1. 关卡分析2. 盲注思路3. 编写工具进行通关布尔盲注在前面的练习中,也涉及到了布尔盲注的解题过程,思路都是一样的。自己构造判断语句强制页面进行判断并根据返回结果查看判断的正确性。1. 关卡分析本次的关卡是less-8,首先我们来分析一下这个页面。通过多次的尝试我们发现,如果输入的是true,那么就会返回一个You are in......,而如果是false,则不会返...原创 2020-08-03 17:39:15 · 1259 阅读 · 0 评论 -
Less-9-10(盲注-时间盲注)
文章目录盲注-时间盲注1. 分析问题2. 使用burp suite拦截注入2.1 破解数据库名字2.2 破解所有数据库下的数据表name3. 小结盲注-时间盲注盲注有两种:基于布尔的盲注基于时间的盲注我们之前讲到过布尔盲注,但是今天这个关卡很无赖,不管你什么条件,他就给你返回一个页面。你没法判断,因此时间盲注的重要性就体现出来了。1. 分析问题打开sqli网站,进入less-9...原创 2020-08-03 17:39:22 · 449 阅读 · 0 评论 -
Less 11-12(基于POST-union注入)
文章目录POST注入1. 题目分析2. 开始注入less-12POST注入这次,我们接触到了之前从未接触过的POST注入。先看一下题目:哇,好新颖,这次页面上有框框啦。1. 题目分析首先我们还是要先分析一下题目。先随便输入一些东西看看。页面提示你登陆尝试失败。。。说明这个username和password是不能随便输入的。那么根据之前的经验,我们试一下admin可以看到,...原创 2020-08-03 17:37:06 · 423 阅读 · 0 评论 -
Less 13-14(双注入查询)
文章目录1. 题目分析2. 双注入爆库3. less 141. 题目分析开始,我们发现无论输入什么,网站没有报错信息返回。我们使用普通的基于报错返回的注入语句是无效的。那么双注入就会在我们的脑中一闪而过。首先判断字段类型,以及检索字段个数。通过多次尝试:') or 1=1#发现,字段由')闭合。然后判断检索字段的个数:') or 1=1 order by 2#由此可知,检...原创 2020-08-03 17:39:42 · 335 阅读 · 0 评论 -
Less 15-16(POST布尔注入)
文章目录1. 题目分析2. 注入过程less-161. 题目分析首先分析页面,发现网站此时完全规避了报错信息。连双注入都不会再由报错信息提示到页面上。因此,我们无法通过报错的信息来获取网站的数据库信息。这是我们只能换一种思路—盲注。通过多次尝试,我们发现,网站有两种响应状态,分别是successfully和failed。那么我们可以知道,当条件语句为true的时候,就会返回successf...原创 2020-08-03 17:39:03 · 370 阅读 · 0 评论 -
Less 17 (updatexml注入)
文章目录题意分析updatexml解析实战题意分析通过简单的测试,我们可以知道,这个页面的功能就是更改你所输入的username的password。(就是改密码)通过看源码,我们可以知道,此页面对于username字段有很严格的过滤。因此我们将注入的重点放在password上。同时我们一定要保证输入的用户名一定要是正确的,否则只会返回错误页面。通过上面这个测试,我们得到了一条报错信息:You have an error in your SQL syntax; check the manual th原创 2020-08-03 17:38:39 · 768 阅读 · 0 评论 -
Less 18 (请求头注入--user-agent注入)
文章目录1. 题目分析2. 构造SQL3. 注入过程4. 使用python进行注入1. 题目分析首先我们来分析一下题目:经过尝试,我们知道,当我们输入正确的用户名和密码的时候,后台会将User Agent返回到屏幕上。那么根据目前的情况来看,可能存在的注入点有2个:登录框user-agent我们先来看一下源代码:// uagent的接收是未经过严格过滤的$uagent = $_SERVER['HTTP_USER_AGENT'];$IP = $_SERVER['REMOTE_ADDR原创 2020-08-03 17:38:06 · 2537 阅读 · 0 评论 -
Less19 (referer注入)
文章目录1. 什么是referer?2. 分析题目3. 手工注入4. SQLmap注入1. 什么是referer?简单讲就是当你访问一个网站的时候,你的浏览器需要告诉服务器你是从哪个地方访问服务器的。(直接输入网址或者其他页面中的链接点进来的)。之前写过一篇关于referer的文章,不明白的小伙伴可以点击下方链接看一下。HTTP请求头中的referer字段2. 分析题目这关的思路和Less-8几乎是一样的。首先看一下网站源码:$sql="SELECT users.username, user原创 2020-08-03 17:38:16 · 1799 阅读 · 0 评论 -
Less 20 (cookie注入)
文章目录1. 题目分析2. 思路3. 注入手法3.1 更改本地cookie3.2 抓包更改cookie1. 题目分析首页是一个登录框,登录成功后,可以看到如下界面:这里记录了很多请求头信息。接着看一下网站源码:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="ht原创 2020-08-03 17:38:23 · 370 阅读 · 0 评论 -
Less21-22 (基于base64的cookie注入)
文章目录1. 题目分析2. 通关思路1. 题目分析目前已经完成了Basic Challenges,相信小伙伴们对于SQL注入也有了一定程度的理解。但是,还是脱离不了小白的称号,那么今天我们就向Advanced Injections进军。首先还是先登录进去看一下情况,这一关卡和Less20的手法其实是一摸一样的,只不过多了一道加密解密的步骤。通过观察这个cookie可以判断出来是一个加密过后的密文,而题目也给出了是base64加密,那么我们就把这个复制下来解密一下看看。可以看到YWRtaW4=其原创 2020-08-03 17:37:41 · 366 阅读 · 0 评论 -
Less-23
文章目录1. 题目分析2. 注入思路3. 注入过程4. 总结1. 题目分析根据题目要求,这一关和最开始的一样,让我们构造一个?id参数到url上,通过改变url的参数获取不同的账户信息。而当我们尝试输入一个14'的时候,网页给出了报错的信息,'14'' LIMIT 0,1根据这个内容,可以得知后台的id参数是使用单引号包裹的。根据一往的策略,我们都会向构造闭合然后使用联合查询。但是这次的情况和往常不同,比如当我们输入了http://127.0.0.1:7788/sqli/Less-23/?id=1'原创 2020-08-04 13:47:57 · 456 阅读 · 0 评论 -
Less 24(二次注入)
文章目录前言1. 二次注入的原理1.1 个人理解1.2 Example2. 题目分析2.1 主页2.2 注册页面2.3 登录成功界面(修改密码)3. 注入过程首先看一下数据库中原本的用户信息:![在这里插入图片描述](https://img-blog.csdnimg.cn/20200711191827350.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubm原创 2020-08-04 13:48:06 · 981 阅读 · 0 评论 -
Less-25 (绕过AND OR 过滤)
文章目录1. 题目分析2. 源码分析3. 注入过程1. 题目分析这一关还是一个基于GET的注入,还是要先构造一个ID作为参数给他传进去。因为题目给的是string single quote,所以ID的类型一定是单引号包裹的了。根据一往的经验,两条语句一看便知。那么这道关卡的考点在哪里呢?当我使用order by测试检索字段的时候,就出现了问题。这里我明明输入的order by结果报错就只剩下了der by,根据题目上的or and and belong to us我们不难猜测,可能自己输入的原创 2020-08-04 13:48:14 · 682 阅读 · 0 评论 -
Less-25(绕过or或and--盲注)
文章目录1. 题目分析2. 注入思路2.1 盲注2.2 联合注入3. SQLmap注入1. 题目分析根据less24的经验以及通过?id=1 aandnd 1=2 --+和?id=1 aandnd 1=1 --+可以判断出id的类型为int;并且可以使用盲注或联合查询两种方法解决的题目。一下主要回顾盲注的解题思路:False页面:True页面:之前学习过盲注,我们知道盲注主要分为布尔盲注和时间盲注,同时再回忆一下要使用的函数:length() :判断字长substr(): 从字符串中取原创 2020-08-04 13:48:20 · 522 阅读 · 1 评论 -
Less-26
文章目录1. 题目分析2. 思路分析2.1 不用空格2.1.1 报错注入2.1.2 盲注2.2 使用特殊字符代替空格1. 题目分析这道题的坑算是比较多的了,我们来分析一下。通过初步测试发现这个题目过滤的东西有点多,直接看源码function blacklist($id){ $id= preg_replace('/or/i',"", $id); //strip out OR (non case sensitive) $id= preg_replace('/and/i',"", $id);原创 2020-08-04 13:48:34 · 741 阅读 · 0 评论 -
Less-27and27a
文章目录1. 思路分析2. 注入过程3. 27a1. 思路分析这一关表上上告诉你他只是过滤了union和select,其实不然。function blacklist($id){$id= preg_replace('/[\/\*]/',"", $id); //strip out /*$id= preg_replace('/[--]/',"", $id); //Strip out --.$id= preg_replace('/[#]/',"", $id); //Strip out #.$原创 2020-08-04 13:48:43 · 273 阅读 · 0 评论 -
Less 28-28a
文章目录题目分析题目分析首先题目告诉我们会吃掉我们的union和select。然后通过?id=1')%26%261=1;%00测试出来,id的是被('')包裹的。接着看一下源码的blacklistfunction blacklist($id){$id= preg_replace('/[\/\*]/',"", $id); //strip out /*$id= preg_replace('/[--]/',"", $id); //Strip out --.$id= preg_repl原创 2020-08-04 13:49:03 · 530 阅读 · 0 评论 -
Less 32-33(宽字节注入)
文章目录1. 宽字节注入的原理2. 题目分析3. 注入过程1. 宽字节注入的原理当mysql使用的是gbk编码的时候,默认认为两个字符为一个汉字。(就是认为%xx%xx为一个汉字,前一个ascii码要超过128)。而当网站过滤的机制是采用转义\的时候,我们可以在网站添加的转义符号前面构造一个%xx使得变成%xx%5c而被mysql认为是一个汉字,从而绕过转义。就比如当我们输入的单引号被过滤的时候:默认情况下: 1' --+ --> 1\' --+ 注入后: 1%df' --原创 2020-08-04 13:51:26 · 420 阅读 · 0 评论 -
Less-38-41(堆叠注入)
文章目录1. 原理2. 题目分析3. 注入过程4. Less391. 原理SQL语句以;作为一个结束标记。如图,在执行数据库命令的时候,是支持将多个SQL语句放在一行执行,以;进行分割的。2. 题目分析首先看一下题目的意思:stacked query injection String告诉我们考察的内容是堆叠查询注入。通过?id=1'判断这个参数是由单引号包裹。通过?id=0' union select 1,2,3 and 1=1; --+判断出来,这道题貌似没有什么过滤;和Less1几原创 2020-08-04 13:51:13 · 385 阅读 · 0 评论 -
Less 42-45 (基于POST的堆叠注入)
文章目录1. 题目分析2. 注入过程1. 题目分析这一关看起来和之前的二次注入的页面挺相似,但是却不能使用二次注入。我们点开发现注册页面是没有功能的。看一下源码吧:$username = mysqli_real_escape_string($con1, $_POST["login_user"]);$password = $_POST["login_password"];$sql = "SELECT * FROM users WHERE username='$username' and pass原创 2020-08-04 13:51:02 · 300 阅读 · 0 评论 -
Less 46 (ORDER BY 后的注入)
文章目录1. 题目分析2. 注入过程2.1 利用rand()实现布尔盲注2.2 时间盲注2.3 双注入1. 题目分析先看一下源码中的SQL$id=$_GET['sort'];$sql = "SELECT * FROM users ORDER BY $id";需要注意的是,此处我们输入的参数应该是?sort=xxx,并且后台没有对这个参数进行过滤。但是和以往不同的是,我们的注入位置不再是WHERE后面,而是在ORDER BY之后。目前有2中注入思路:利用rand()实现布尔盲注时间盲注原创 2020-08-04 13:50:23 · 270 阅读 · 0 评论 -
Less 47
文章目录1. 思路分析2. 注入手法2.1 时间注入1. 思路分析和Less46基本相同。本关与46不同之处在于SQL语句有着细微的差别:$sql = "SELECT * FROM users ORDER BY '$id'";此处的id是用单引号包裹的。因此无法在使用rand()函数对其进行布尔注入。但是仍然可以使用的方法有:时间盲注双注入2. 注入手法2.1 时间注入当构造一条?sort=1%27 and sleep(0.5) --+时,发现网页的返回大概有6.5s的延迟。原创 2020-08-04 13:50:50 · 181 阅读 · 0 评论 -
Less 48
文章目录1. 题目分析2. 注入过程2.1 利用rand进行布尔注入2.2 基于时间的注入1. 题目分析当我们输入?sort=1 desc --+可以发现,此页面存在基于order by的注入漏洞,并且类型为数值类型。那么根据之前的思路,有三种应对方法:利用rand进行布尔注入时间注入基于报错的双注入(经测试,本关不能双注入)2. 注入过程2.1 利用rand进行布尔注入首先构造True和False,看看返回的结果是否存在差异。通过构造rand(1)和rand(0)以及rand(原创 2020-08-04 13:50:39 · 671 阅读 · 0 评论 -
Less 49
文章目录1. 题目分析2. 注入过程1. 题目分析通过?sort=2%27 and sleep(0.5) --+可判断存在时间注入漏洞。并且传入的参数类型为字符串。因此,利用rand()进行布尔盲注是无法使用的。然后再来测一下双注入。网站给报错也屏蔽了,双注入也凉凉了。那么我们使用时间注入。2. 注入过程既然确定了注入的手段,过程就是老生常谈的事情了。给出一条payload?sort=2%27 and if(ascii(substr(database(),1,1))=115,sleep原创 2020-08-04 13:50:32 · 179 阅读 · 0 评论 -
Less 50-53
文章目录1. 题目分析2. 注入过程2.1 堆叠注入2.2 时间注入2.3 双注入Less 51-531. 题目分析Less50-53这四关是第三部分的最后一个考察点。考察的主要知识为堆叠注入。这四关十分的相近(对于堆叠注入而言,仅仅是是否需要引号的问题),因此,放在一起讨论。通过?sort=1' --+以及?sort=1 and sleep(0.5) --+可以判断出来,本关用报错信息的输出,以及sort为数值类型。因此,应该可以使用双注入、时间注入;根据题目的要求,还可以使用堆叠注入。2原创 2020-08-04 13:50:06 · 176 阅读 · 0 评论 -
sqli-Challenges Less-54
文章目录1. 题目分析2. 注入过程1. 题目分析经过不懈的努力,终于来到了最后一部分。首先看第一关:题目要求是让我们获取到一个密钥,然后提交;但是我们查询的次数不能超过10次,否则就会重置这个密钥。而且这个密钥是存在于challenges这个数据库中。2. 注入过程因为条件是超过10就会重置密钥,也不是超过10次就封你的IP什么的。对于我们的影响不是特别大。其实可以忽略这个条件。该做的检测做一下,等到确定了详细的信息,以后直接查询即可。首先要判断id的类型。通过/?id=1%27原创 2020-08-04 13:49:45 · 116 阅读 · 0 评论 -
Less 58-61
文章目录1. 题目分析1. 题目分析本关提示的是测试次数不要超过5次,其实超过了也没有什么特别大的影响。首先还是判断id的类型。通过?id=1%27确定id是被''包裹的。然后我们先测试一下能否使用联合注入。当输入?id=-1%27 union select 1,2,3 --+发现结果如下...原创 2020-08-04 13:49:31 · 378 阅读 · 0 评论 -
Less 62-65
文章目录1. 题目分析2. 注入过程1. 题目分析通过简单的测试发现,本关对报错信息进行了屏蔽。并且也无法使用联合查询。但是通过/?id=1') and sleep(5) --+不仅判断出id的类型,同时发现存在盲注的漏洞。而本关的限制次数为130,看似赋予,其实对于相对复杂的盲注来说,应该是比较紧张的。因此在判断字母ascii码的时候,就不能使用暴力破解的方法。需要尽可能利用二分法来判断字母的ascii码,这样使用的次数会比爆破的次数少的多。2. 注入过程我们已知数据库的名字为challen原创 2020-08-04 13:49:13 · 405 阅读 · 0 评论 -
墨者学院--SQL注入漏洞测试(布尔盲注)
文章目录题意解析注入过程爆数据库名爆表名爆字段名今天做了一道墨者学院的盲注题目。头皮发麻。题意解析要求是找出moezhe开头的32为的key。先看一下题目:开始一看是这个界面,第一感觉以为是post提交表单的注入漏洞,然后一顿操作猛如虎,结果人都傻了。接着,底下那个通知就一直在那晃荡,抱着试试看的心理点进去,结果就发现了新大陆。?id,多么亲切的老朋友啊。一下子就豁然开朗了。通过...原创 2020-08-03 17:43:39 · 614 阅读 · 0 评论