buuctf最近刷题

一、buuctf_php_Easy Calc 1

        首先抓包:

        打开cal.php如下,里面有一些过滤,但是这些过滤很简单,按道理可以直接出flag的。。

但是事情却没那么简单,经过测试,完全执行不了,发现内含了一个waf。
可以看到下面,在num前面加了一个空格才绕过了,原因在于这样waf检测不到num变量。 

这里提醒一下,直接在地址栏输入+号会被url变成空格,因此+需要实体编码%2b 

接下来就是无脑爆破了
    num=var_dump(scandir(chr(47))):
 num=1;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))

php绕过waf资料:
    
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”]中。
PHP需要将所有参数转换为有效的变量名,因此在解析查询字符串时,它会做两件事:
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

因此假如waf不允许num变量传递字母:
http://www.xxx.com/index.php?num=aaaa   //显示非法输入的话

那么我们可以在num前加个空格:
http://www.xxx.com/index.php? num=aaaa   //显示非法输入的话

这样waf就找不到num这个变量了,因为现在的变量叫" num",而不是"num"。但php在解析的时候,会先把空格给去掉,这样我们的代码还能正常运行,还上传了非法字符。

二、【BUUCTF】[ACTF2020 新生赛]BackupFile1

常见的备份文件后缀名有 .git .svn .swp .~ .bak .bash_history
    打开后的代码如下。

==在两边类型不一样的时候会先转换成同一类型的,int==str时,会将str转换成int,而且转换的逻辑就是匹配前面的合法数字。因此只能匹配到123.如下实验:

因此只需要:

三、BUUCTF WEB [极客大挑战 2019]BuyFlag


    只有cuit能买?我一开始想的是X-forwarded-for构造cuit的ip。其实这题考的是身份认证罢了。


 

身份认证就是cookie、session这一套了吧。抓个包看到了cookie: 

        注意这个cookie是需要从主页跳转到pay.php 这样抓包才能看得到。因此有时候也要从主页一步一步地抓包,才有可能有东西。

        最终构造如下:cookie user处设一个1,传入post数据。 

         

        主要是绕过下面的:

第一个是password,这个好理解,由于是弱等于,因此直接404aa转换就行了。
    下面比较难的是money的长度有限制。
    有两种方法:
    1、传入1e9,这个长度小于4并且能识别成。

不管传啥,都是string,因此都是需要进行一些转化的。 

所以1e9肯定能转化成正常数字的。 

 2、传入数组。

        首先是绕过长度的控制,由于strlen函数是需要传入str字符串的,传入数组会返回0,因此0<4
        其次就是绕过大小了。其内部实现应该是strcmp,这个函数传入了数组时,也会返回0。一般情况下返回0是相等,因此满足要求。

三、[护网杯 2018]easy_tornado

burp抓包显示304:

  304状态是在有缓存下

    浏览器会发一下当前页面的etag,如果服务器那边显示该etag对应的网页并没有变化,
那么不会返回之前的相同页面(毕竟客户端缓存中已经有了)。
    第一次发的包:

 第二次发的包:

多了这个If-None-Match,因此要想不收到这种包,直接把If-None-Match去掉即可。
    收到的response:
 这题存在sstl注入,也就是模版注入 

 题目提示了render,也就是render模版注入。render经常被用于返回一个具体的模版,如果参数可控的话,就能生成指定的内容。简单点就是把数据插入到html中去。

例如: 

获取到了'cookie_secret': '3f0903de-3ce5-4a52-a28b-2bd2df8d3cb9'
    
    接下来看提示:

        后面的就简单了: 

 这里写一点关于前后端渲染的区别,render应该属于后端渲染。

四、[HCTF 2018]admin

首先查看源代码,以后分析要仔细,先各个代码都查看一下。

 打开之后发现是网页代码,开始代码审计。

看不出啥情况。它会检测session,如果session对应的name是admin则会暴出flag。       

由于flask的session是存在于客户端的。因此可以伪造session。可以看到下图抓包有session。

网上有代码可以直接解密反序列化:

得到:

这里直接用工具把结果的name修改成admin,然后加密成session即可:

 发包获得flag:

        还有一种利用内部str_lower函数的漏洞,这个是from twisted.words.protocols.jabber.xmpp_stringprep import nodeprep,说明nodeprep是从twisted模块中导入的。 

因此发包如图: 

登陆成功:

由于在修改密码的地方再次使用了strlower函数如下:

因此用该账号改密码,其实会修改admin账号的密码。
最终结果如图:

还有一种条件竞争,好像没复现成功,也不追求了。 

 五、[BJDCTF2020]Easy MD5

先是简单的md5比较绕过如下,也就是md5(数组)会返回null

 

随后如下所示,不同的是一个==一个是===,因此前面的可以用0e的那个绕过。

六、[ZJCTF 2019]NiZhuanSiWei

hackbar在这种情况下:

         源代码:

 这题并不复杂,直接上解答:
 

七、[ZJCTF 2019]NiZhuanSiWei

        典型的文件上传题:

        上传了半天,结果都不行,改了content-type之类的:    


    

        估计是有黑名单之类的:  

         用.htacess来绕过:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值