1、xff_referer
首先我们应该知道题目中的XFF和referer是什么:
① X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段,它代表客户端,也就是HTTP的请求端真实的IP。
这一HTTP头一般格式如下:
X-Forwarded-For: client1, proxy1, proxy2, proxy3
其中的值通过一个 逗号+空格 把多个IP地址区分开, 最左边(client1)是最原始客户端的IP地址, 代理服务器每成功收到一个请求,就把请求来源IP地址添加到右边。
在上面这个例子中,这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(proxy3可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。
② http referer 是header的一部分 ,在浏览器向web服务器发送请求的时候,一般都会带上refere,告诉服务器我是从哪个页面链接来的。
比如我在www.google.com 里有一个www.baidu.com 链接,那么点击这个www.baidu.com ,它的header 信息里就有: Referer=http://www.google.com
如果是CSRF(跨站请求伪造)传来的请求,refere字段就会是包含恶意网址的地址,服务器就能识别出恶意访问。
打开这道题的链接,要求IP地址必须为123.123.123.123
使用 BurpSuite抓包,在action中将包发到repeater
来到repeater中,根据上面格式添加指定IP:X-Forwarded-For:123.123.123.123
注意这里需要添加在Connection: close之前,否则tcp链接在请求处理完毕后就已经被断掉了
send后得到响应,发现还需要来自谷歌,使用referer
添加 Referer: https://www.google.com,点击send得到响应,拿到flag
cyberpeace{78368835db6caa85b4d601f602db444a
2、simple_js
打开链接就提示输入密码
随便输入,被提示是假的密码
先介绍一些东西:
① HTML代码简化结构:
<html> //HMTL文件的开始 <head> //头部开始 <title>网页标题</title> //网页标题 </head> //头部结束 <body> //主体开始 这是我的第一个HTML网页 //主体内容 </body> //主体结束 </html>
② 在javascript中,alert的用法是 alert(在对话框中显示的纯文本) ,alert() 方法用于显示带有一条指定消息和一个确认按钮的警告框,可以用来向用户警示信息,也可以用来调试程序。
<script> function myFunction(){ alert("你好,我是一个警告框!"); } </script> ③ <script> 标签用于定义客户端脚本,比如 JavaScript。HTML 中的 Javascript 脚本代码必须位于 <script> 与 </script> 标签之间,可被放置在 HTML 页面的 <body> 和 <head> 部分中。 <script> alert("我的第一个 JavaScript"); </script>
查看源码,发现无论输入什么都是假密码,都会返回 FAUX PASSWORD HAHA
发现return pass,而pass = p,p是tab2数组的每一个ASCII码转换的字符,tab2来自于pass数组,也就是说,不管传入的pass_enc参数是什么,最后返回的都是pass数组的数字转换成的字符串。
fromcharcode()相当于Python的chr(),end=''就是不换行,默认是end='\n'(会换行)
这里密码藏在后面这句 String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30")
用Python编写脚本(超详细):
① 用括号内数据定义一个str类(str即string参数的类型),定义的时候用单引号或者双引号string="\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"
我们直接输出它,可以看到string本来就是一个带有逗号的字符串
② 使用split函数,以逗号为标识符,将string转换成数组(或者叫列表),并赋值给s
s = string.split(",")
我们输出s看看
③ ASCII 表
c = "" //定义c为一个空字符串
for i in s: //遍历s列表的数据
i = chr(int(i)) //将每一个数据转换为ASCII字符(字符转ASCII码用ord())
c = c+i //添加到字符串c后面
print(c) //输出c
合起来最终脚本为:
string="\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30" s = string.split(",") c = "" for i in s: i = chr(int(i)) c = c+i print(c)
得到 786OsErtk12
故flag为 Cyberpeace{786OsErtk12}