第一次当出题人,随便写写吧。

按不了的 F12

启动靶机:

根据题目名称可知,这题与 f 12 按键有关,即查看网页源代码。

按下 f 12 发现 f 12 按键被禁用:

尝试另一种方式:右键->查看网页源代码

发现同样被禁用,尝试第三种方式:ctrl+u

发现同样被禁用,于是,在 chrome 浏览器的选项栏中打开开发者工具或 ctrl+shift+i:

获得 flag。

GET and POST

启动靶机:

根据题目名称可知,这题考察的是 http 协议的请求方法,主要是 get 和 post 两种。

观察 url 发现:

需要传入一个参数:what

根据网页上的提示,将 flag 作为 payload 传入:

页面反馈:

这里考察更改请求方式的方法。

使用 burpsuite 抓包:

使用 Rpeater 模块更改请求参数:

更改如下:

  1. 更改请求方式:GET 更改为 POST
  2. 添加请求头信息:Content-Type: application/x-www-form-urlencoded
  3. 添加数据:what=flag

发送数据包,获得 flag:

世界上最好的语言

启动靶机:

发现 php 源码,分析源码可知:

程序从 get 请求的参数中获取变量 flag,然后将 flag 的值进行 md 5 加密,并将加密后的数据与字符串"s 155964671 a"进行 md 5 加密后的数据进行比较,若相等且 flag 的值不与给定字符串相同,则输出 flag。

编写脚本,获取字符串"s 155964671 a"的 md 5 值:

发现结果以 0 e 开头,由此可知存在 md 5 碰撞漏洞,使用 md 5 值同样以 0 e 开头的其它字符串作为 payload 传入(网上有很多,也可以自己写脚本跑出来,这里不赘述)

获得 flag:

补充知识:

MD 5 是一种哈希算法,任意长度的输入经过处理后输出为 128 位的信息,且尽量使结果不冲突和信息不可逆。

Php 是一门弱类型语言,脚本中进行两个值的比较时,使用的是 == ,这是一种弱类型比较运算,之比较值,不比较类型。

PHP 规定当进行字符串与数字的弱比较时,会进行如下步骤:

先看字符串开头是否为数字,如果为数字,则截止到连续数字的最后一个数字,即"123 abc 456"=>123

如果开头不为数字,则判断为 false,即 0。因此

(“aaa 123”==0) =>true

(“123 a”==123) =>true

由于两个 md 5 值字符串都以 0 e 开头且 0 e 后不含有字母,所以在使用 == 进行比较时,都被当作用科学计数法表示的数字,因为 0 的 n 次幂仍为 0,所以这条语句恒为真。

爱冒险的朵拉

启动靶机:

非常可爱的画面 hhh~

点击页面上的几个按钮,发现除了页面上的提示变化,url 也有相应的变化: