sqlite手工注入+墨者学院靶场


其他数据库的手工注入靶场都是一次1币,这个靶场居然一次5币!!!

 怀着我倒要看看它到底有什么神奇的心思打开。其实也不是,由于我最熟悉就是sqlite数据库,mysql的手工注入我虽然差不多懂了个七七八八,但是实际上我还是有一点注入不明白。于是我决定在我本地一边看着数据库的结构一边尝试注入。

首先,注入的流程就是要找到注入点。点进去发现页面一切正常,有一个滚动的通知,我们点一点。

 果不其然,这就是疑似注入点的地方。看着像数字型注入,不要紧,这是个入门靶场应该不会太难(其实是我还不太会判断注入类型)

先讲一下数据库结构再开始记录实操哈,比较有利于理解。 

其实一般情况下,发现注入点的时候,我们要先判断这是哪个数据库,因为不同的数据库结构不一样,我们用于注入的语句也会有所不同,但是这个靶场名字叫做sqlite手工注入,所以我们就不判断了,我会再写一个博客如何判断数据库。

首先我们了解一下sqlite的数据库的结构:下图为我之前建立的数据库。

 在main下面有5个表,其中buxianbuxian和那个越语的表是我自己建的。然后我们需要格外关注的是sqlite_master表,这个表是我们数据库的管理表,看一看表里面的内容:

 可以看到sqlite_master有五个字段,记录了数据库中所有的表的信息,其中我认为最比较需要关注的就是name和sql,name是记录了数据表的名字,sql则是记录了创建该数据表的时候用的sql指令,这非常重要,因为指明了表内所有字段的信息,也就是我们可以通过这个sql知道段名。要进行数据库注入,其实就是查表,我们如果知道了我们要查的表的名字,以及表的字段名字,那查起来就不会迷茫。

 框起来的是字段名,后面的是数据类型。

现在讲的差不多了,我们去实战一下。

首先,我们看到这个页面,测一下页面查的那个数据表有多少个字段。为什么要测字段呢,因为我们要判断页面上的内容是由返回结果的几个字段组成的。因为这里查的是新闻嘛,或许我表内一条新闻的记录有id,标题、正文、作者、时间等等,但是我url就传一个id进去,所以可能页面是对返回的记录选择某几个字段去显示。我们要判断这个出现在哪里,这样子才能构造我们的查询语句。

如何判断有几个字段呢,用order by,熟悉数据库的人都知道(我之前忘了),order by是排序的关键词。比如我第一列是时间,第二列是姓名,按两列排序的记录肯定是不一样的,这里不理解去打开excel玩一玩。所以如果我按一个不存在的列去排序,我数据表中只有4列但是按第五列排序,结果就会报错。

我们尝试的查询语句为:http://124.70.71.251:45554/new_list.php?id=1 order by n(n依次取1,2,3,4,5)

当n小于5时,页面都能正常的返回,不正常的检查一下是不是拼错了。但是n等于5时,页面啥也没返回。

既然我们知道了有4列,查数据库一般是一条一条查嘛,传一个id进去找一条记录肯定会返回四个字段,但是我们要判断一下,页面上显示的是哪些字段。

这个时候我们用到的查询语句为:

  http://124.70.71.251:45554/new_list.php?id=1 and 1=2 union select 1,2,3,4

union是联合查询的意思,就是数据库查询会执行union前后两条语句,为了不让查询返回的记录干扰我们,于是我们让union前面的语句报错,就是加一个条件and1=2,所以只会返回第二条语句的结果,也就是1,2,3,4,然后页面变成了下面这样子。

 很明显标题是返回记录的第二个字段,内容是第三个字段。然后我们要登录的账号密码,那肯定不是在这个查通知的表里面查,通知的表里面一般只有通知。所以我们要找到存账号密码的那个数据表。这个时候想起来我们前面介绍的sqlite_master表了没。就是它哈。我们挨条查一查存在的表名和建立表的sql语句(判断字段)。一次只查一条哈,多了的数据返回也只显示第2,3个字段

我们构造的语句为:http://124.70.71.251:45554/new_list.php?id=1 and 1=2 union select 1,name,sql,4 from sqlite_master limit 0,1

 limit 0,1是从第0条开始查询,查一条 ,那么如果是从第五条开始查5条,那不就是limit 5,5。|如果木有limit就是查完全部,但是这个页面这里只会显示一条结果噢,不信试试。

上面那个语句的查询结果为:

 查到了表名和sql语句,一下子就看到了name和password。

 然后我们查一查账号密码,试试登录。

语句为:http://124.70.71.251:45554/new_list.php?id=1 and 1=2 union select 1,name,password,4 from WSTMart_reg where status = 1 limit 0,1

细心的读者可能会发现为啥会有一个status = 1,这个看着就很怀疑是账号的状态,我感觉如果账号能用的话就是1不能用就是0,如果木有status的限制的话,查出来的第一条记录的status可能为0,那也就不能登录了,所以留个心眼。

执行以后,果然查出来了账号密码:

 这个密码肯定不是正常的密码,因为靶场说了MD5解密,所以我们去在线解密一下,随便搜一个MD5在线解密,

 然后我们试试登录:

 

 果然得到key啦!

我还想查一查其他的表:

notice表:

 sequence表:

 看看notice表的记录的时间是啥:

 这个时间怪怪的,而且notice表只有一条记录。

再查一查各个表有多少条记录:

 没找到notice表的sqe。

今天的靶场学习记录就到这里啦~~~

相关