没想到又有时间写wp了。。那就再写一篇吧。
False
跟前两次写的题一样,还是php代码审计,而且这一次的题跟cg-ctf上的md5collision有很多相似之处,索性一起总结下吧。
先贴源代码:
FALSE源码这里的isset()是php中检查变量是否设置的函数,若存在且值不为空,则返回True,否则返回False.
sha1(),用于计算字符串的SHA1散列值。
因此对于sha1()而言,默认传入字符串,传入其他类型就返回False了。
那么很快又可以总结需要满足的条件:
1)name与password不为空
2)name与password值不相同
3)name与password的sha1值相等(这里的相等是强类型“===”)
之前偶然看到其他代码审计的题目提到了数组绕过的方法,这里也可以用数组绕过sha1,因为令传入的name与password均为数组,最终sha1值不等
构造URL:http://ctf5.shiyanbar.com/web/false.php?name[]=1&password[]=2
flag下面再记录下很久之前做的cg-ctf上的md5collision
md5 collision
源码如下:
php源码这题的条件与上一题十分相似:
1)变量a存在
2)a的md5值跟'QNKCDZO'相等
3) a的值跟'QNKCDZO'不等
可以知道'QNKCDZO'的md5值为'0e830400451993494058024219903391'
而这里对$md51与$md52两个哈希值进行比较的运算符是‘==’,在php中属于弱类型,因此只要是个0e开头的哈希值都直接被php认为0.
所以可以去网上搜一波md5值为‘0e’开头的字符串就好了。
flag最后,作为还在摸爬滚打的web小白,先补充下这些天直接用构造url提交得flag的原理吧:
转自https://www.cnblogs.com/zsots83/articles/7755295.html,感谢博主
浅谈HTTP中Get与Post的区别:
Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们可以这样认为: 一个URL地址,它用于描述一个网络上的资源,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。 到这里,大家应该有个大概的了解了,GET一般用于获取/查询资源信息,而POST一般用于更新资源信息。 表面现像上面看看GET和POST的区别:
GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连, 如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+, 如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。
POST把提交的数据则放置在是HTTP包的包体中。
今天就到这里吧
网友评论