bugku web never_give_up

发布时间:2022-07-05 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了bugku web never_give_up脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

bugku web never_give_up

打开靶场后先照例查看码,发现了1p.htML这个页面

bugku web never_give_up

 

 

 

进入这个文件,注意需要从源码的页面进入该页面,否则会显示另一个界面(暂不明白原理)

 

bugku web never_give_up

 

 

根据变量Words的形式,先进行URL解码,再进行部分base64解码后,发现解码后的字符又是URL编码格式,所以再次进行URL解码

 

bugku web never_give_up

 

 最后得出一段代码,整理过后如下所示

bugku web never_give_up

 

 

接下来便是代码审计环节:

 

bugku web never_give_up

 

 如果参数id为0或者为null时自动定位到hello.php?id=1

 

bugku web never_give_up

 

 如果参数a的第二位字符为.时,输出no no no no no no no,结合之后的代码,个人认为这里是提示我们使用php伪协议

tips:strIPOs()与strpos()的区别是前者不区分大小写

 

bugku web never_give_up

 

 这几行代码是核心部分:

file_get_contents()函数可以将整个文件读入一个字符串中。源码中变量 $data 是由file_get_contents()函数读取变量 $a 的值而得,所以 $a 的值必须为数据流,可是使用php伪协议中的php://input来访问原始请求数据中的只读流,也就是说我们可以在报文主体中post “bugku  is a nice plateform!”,通过php://input来访问。

②$id == 0,这显然与前文代码中的id不为0相矛盾,需要使用绕过,根据php的弱类型特点,我们可以使id = 0e123。

③eregi()函数进行不区分大小写的正则表达式匹配,substr(string,start,len)函数用来截取字符串。此处的意思是"111"与substr($b,0,1)拼接得到的字符串需要与"1114"相匹配,同时substr($b,0,1) != 4又进行限制。这时我们应该想到ereg() 函数或 eregi() 函数存在空字符截断漏洞,简单介绍一下,就是参数中的正则表达式或者匹配字符串遇到空字符则截断丢弃后面的数据,加上strlen($b) > 5这个限制条件,我们可以使b = %00abcde,此时字符串长度为6,因为通过get请求传参接收的是已经被URL解码过的值,此时%00已经被解码为null字符了

 

综合以上,我们就可以构建payload:?id=0e123&a=php://input&b=%00abcde,同时在报文主体中加上"bugku is a nice plateform!"

bugku web never_give_up

 

脚本宝典总结

以上是脚本宝典为你收集整理的bugku web never_give_up全部内容,希望文章能够帮你解决bugku web never_give_up所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。