XCTF_Web进阶区
ics-06
(1)打开网址,根据题意点击报表中心(试了一下点击其他的发现都一样)
(2)发现URL栏有?id=1,使用burp爆破id。
(3)设置浏览器的配置为手动代理配置,burp设置为拦截请求,刷新页面
(4)发送给Inturder,设置爆破点为id变量
(5)把爆破变量设为数值
(6)为了让爆破更快,这里设置多一点线程
(7)开始攻击,发现id为2333时长度和其他数值不一样(这里不要一个一个找,点击“长”,英文版是“length”会排序)
(8)回到网址,把id改为2333,发现flag
warmup
(1)打开网址,是一张滑稽图片,查看网页源代码,发现source.php
(2)进一步访问,又发现一个hint.php
(3)这里提示了flag在这个ffffllllaaaagggg文件中
(4)返回source.php,继续审计代码
(5)参数file满足三个条件,就会包含文件,file可以由自己构造。
条件一:检查file变量是否为空。
条件二:检查file变量是否为字符串。
条件三:通过checkFile函数来检查
(6)由于要构造payload,条件一和二直接满足,直接查看checkFile函数代码:
(7)发现包含四个if语句:
第一个 if 语句对变量进行检验,要求$page为字符串,否则返回 false;
第二个 if 语句判断$page是否存在于$whitelist数组中,存在则返回 true;
第三个 if 语句,截取传进参数中首次出现?之前的部分,判断该部分是否存在于$whitelist数组中,存在则返回 true;
第四个 if 语句,先对构造的 payload 进行 url 解码,再截取传进参数中首次出现?之前的部分,并判断该部分是否存在于$whitelist中,存在则返回 true;
#以上4个if语句,满足一个即可返回true。都未满足则返回false。
(8)这里用第三个if语句构造参数:
?file=source.php?/../../../../ffffllllaaaagggg
第一个?用来传参,第二个?用来满足截取
(9)include
#因为参数有定义路径,就会忽略/前的字符串,直接去找/…/…/…/…/ffffllllaaaagggg这个文件。
NewsCenter
解法一:
(1)打开网址,如上图所示页面。考虑到xss或sql注入,试试sql注入。随便输入123后,使用burp抓包
(2)发现是post方式,直接sqlmap爆破。将这些保存在一个文本文档里,为了方便命名为1.txt。并将该文本放到sqlmap所在目录下。使用命令爆破数据库
sqlmap.py -r 1.txt --dbs
(3)看到一个news,继续使用命令查看news数据库的内容
sqlmap.py -r 1.txt -D news --dump
(4)发现flag
解法二:
(1)尝试构造语句sr’ or '1=1,果然返回了7条新闻。通常使用单引号,1,2等尝试,然后用union联合查询获取信息。union就是两个结果的去重合集,但前提要列数一致。因此构造语句判断数据的列数。
sr' union select 1,2#
(2)没有正确返回结果,再试试:
sr' union select 1,2,3#
//语句中的第一个单引号'用来闭合后台的第一个',前面的sr也可改成其他字符或数字
//语句中的#用来注释掉后台的第二个'
(3)只有1,2,3的时候才正确返回,因此数据的列数为3列。
(4)接下来利用information_schema来获得所有的表名,构造语句:
sr' union select 1,2,table_name from information_schema.tables#
//前面的1,2就是凑列数的
(5)得到一大串的表名,慢慢找,发现最底下有news和secret_table数据库
(6)因为试过了news,没有结果。接下来利用information_schema.columns的结构来获得secret表的信息。我们要得到的信息也就只有列名column_name,也可以再加上column_type来查看数据类型。附上大佬的文章https://www.cnblogs.com/JiangLe/p/5793555.html因此,构造
sr' union select 1,column_type,column_name from information_schema.columns where table_name='secret_table'#
(7)看到了flag的信息,构造语句:
sr' union select 1,2,fl4g from secret_table#