各位小伙伴,我把Bugku上面的关于代码审计类型的WP为两部分,主要是为了各位小伙伴的阅读质量
希望你们能够多多包涵哦!!!!
7:
解题思路:首先应该了解一个关于php弱类型的知识:
再继续阅读信息就会发现:、
第一处if ($_GET['name'] == $_GET['password'])判断时两数组确实是不同的,
但在第二处else if (sha1($_GET['name']) === sha1($_GET['password']))判断时由于sha1()
函数无法处理数组类型,将报错并返回false
,false === false
条件成立,这样就绕过了sha()
函数获得flag,这个时候需要构造类似于:
就会得到答案:Flag: flag{bugku--daimasj-a2}
8:
解题思路:关于这一题最主要的是需要知道:md5('240610708') == md5('QNKCDZO'),
当然前提是要明白PHP在处理哈希字符串时,会利用”!=”或”==”来对哈希值进行比较,它把每一个以”0E”开头的哈希值都解释为0,所以如果两个不同的密码经过哈希以后,其哈希值都是以”0E”开头的,那么PHP将会认为他们相同,都是0。就可以得到答案,那么就需要构造PAYLOAD:
就会得到答案:flag{bugku-dmsj-am9ls} 9:
解题思路:针对于这个问题首先需要查询ord()函数,就会明白题目的含义:
ord() 函数返回字符串的首个字符的 ASCII 值。
使用在线十六进制转化工具()就会得到:
得到最后转化的十六进制,需要在其前面加上0x才能够表明是十六进制
因此最后的payload: 最后得到答案:flag{Bugku-admin-ctfdaimash}
10:
解题思路:首先使需要了解关于正则表达式的匹配问题,然后就是需要使用数组进行绕过
解决方案一:使用数组进行绕过:
Payload:(这个部分加不加并不影响最终结果;
解决方案二:使用ereg()null截断漏洞,再使用科学计数法来构造else if (strlen($_GET['password']) < 8 && $_GET['password'] > 9999999)这个条件,即1000000000用1e9来表示,在加上-
来构造满足(strpos ($_GET['password'], '-') !== FALSE,于是就可以构造:
payload: 这一个构造可以根据一步一步的调试进行,最终能够得到结果:例如:
最后得到结果:Flag: flag{bugku-dm-sj-a12JH8}
11:
解题思路:这一题直接使用数组进行绕过就可以得到答案:
Payload:
当然也是可以这样的(]=)
最后得到结果:
最后得到答案:Flag: flag{Bugku-D-M-S-J572}
12:
解题思路:构造那么久就是没有思路,看了一些其他人的解析构造,好像说的都是一样,都没有解释为什么直接使用插件HackBar就可以得到结果,大多数人都是直接写上使用这个插件就会得到答案:
关于火狐浏览器中的Hackbar插件,我会收集一些资料,整理好之后上传到博文中。
希望各位能够多多包涵(QAQ)
您可以考虑给博主来个小小的打赏以资鼓励,您的肯定将是我最大的动力。
关于作者:潜心于网络安全学习。如有问题或建议,请多多赐教!
版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接.
特此声明:所有评论和私信都会在第一时间回复。也欢迎园子的大大们指正错误,共同进步。或者直接私信我
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是作者坚持原创和持续写作的最大动力!