[GXYCTF2019]CheckIn
一眼看到“==”猜测出是base64
得到一串:奇奇怪怪的的东西,想到了凯撒密码但是不对
尝试了很多方法后,决定将这串奇怪的东西转为Ascill,因为发现它的Ascill值在33到156之间
AScill的值在33到156直接就是ROT47加解密了
直接在在线网站进行解码发现出现一串的东西,也不知道怎么了
实在不行来用一 一对照,ASCII编码对照表_911查询 (911cha.com)
参考了大神的wp,
得到的结果是GXY{Y0u_kNow_much_about_Rot}
补充:
ROT n 系列密码
主要分为ROT5、ROT13、ROT18、ROT47 编码是一种简单的码元位置顺序替换暗码。此类编码具有可逆性,可以自我解密,主要用于应对快速浏览,或者是机器的读取,而不让其理解其意。
ROT5:是 rotate by 5 places 的简写,意思是旋转5个位置,其它皆同。只对数字进行编码,用当前数字往前数的第5个数字替换当前数字,例如当前为0,编码后变成5,当前为1,编码后变成6,以此类推顺序循环。
ROT13:只对字母进行编码,用当前字母往前数的第13个字母替换当前字母,例如当前为A,编码后变成N,当前为B,编码后变成O,以此类推顺序循环。
ROT18:这是一个异类,本来没有,它是将ROT5和ROT13组合在一起,为了好称呼,将其命名为ROT18。
ROT47:对数字、字母、常用符号进行编码,例如当前为小写字母z,编码后变成大写字母K,当前为数字0,编码后变成符号_。用于ROT47编码的字符其ASCII值范围是33-126。
加密过程:
首先,将明文中的每个字符转换为其对应的ASCII码值。然后将字符的ASCII码值加上47。
如果加上47后的ASCII码值超过了126,则从33开始重新计数。 将加密后的ASCII码值转换回字符形式即可。
解密过程:
首先,将密文中的每个字符转换为其对应的ASCII码值。将字符ASCII码值减去47。
如果减去47后的ASCII码值小于33,则从126开始重新计数。将解密后的ASCII码值转换回字符形式即可。
[BJDCTF2020]The mystery of ip
进去看了一圈没有什么特别的东西,源代码里面有一个flag.php
直接使用bp,进行抓包来看看,ip应该是直接给我们的
服务器端从我们身上直接获得ip的
那么我们加上
尝试是否存在XFF漏洞存在 {1+1},如果存在,会执行我们的1+1,输出计算结果2
基本可以判断存在XFF漏洞存在
那么 输入{system('ls /')},发现了一些目录,访问一下flag目录
最后得到了flag
补充:
服务端从客户端获得ip的方法:
主要有三种:emote_addr参数(无法伪造),X-Forwarded-For,client-ip等请求头
emote_addr:指的是当前直接请求的客户端IP地址,它存在于tcp请求体中,是http协议传输的时候自动添加,不受请求头header的控制。因此,当客户端与服务器之间不存在任何代理的时候,通过remote_addr获取客户端IP地址是最准确,也是最安全的。
X-Forwarded-For,即XFF,是很多代理服务器在请求转发时添加上去的。如果客户端和服务器之间存在代理服务器,那么通过remote_addr获取的IP就是代理服务器的地址,并不是客户端真实的IP地址。因此,需要代理服务器(通常是反向代理服务器)将真实客户端的IP地址转发给服务器,转发时客户端的真实IP地址通常就存在于XFF请求头中。
client-ip:同XFF一样,也是代理服务器添加的用于转发客户端请求的真实IP地址,同样保存与请求头中
Nikto工具:
1.作用:
搜索存在的安全漏洞的文件或服务器漏洞
2.参数:
-h/-host (域名或者ip或者文本文件):扫描地址
基本格式:
192.168.2.130 【直接写ip地址,默认80端口】
https://www.baidu.com 【域名】
192.168.2.15:440 【IP+指定端口】
3.和namp一起使用:
两个都是KaliLinux系统中默认安装的
Nikto 把Namp扫描的某一个端口ip地址进行扫描
namp扫描开放的80端口的IP并通过oG选项对扫描结果输出并整理后,通过管道符“|”
将结果导入Nikto中进行扫描。
namp -p [端口] ip/24 - oG - | nikto -hos -
4.支持代理扫描和扫描域名头:
namp -host [ip/网站] -useproxy
nikto -vhost [域名] -port 80
5.扫描中的互动按键
X-Forwarded-For:
简称XFF头,它代表客户端,HTTP的请求端真实的IP,只有在通过了HTTP 代理或者负载均衡服务器时才会添加该项。它不是RFC中定义的标准请求头信息,标准格式如下:
X-Forwarded-For: client1, proxy1, proxy2,proxy3。
解释:这个请求成功通过了三台代理服务器:proxy1, proxy2 及 proxy3。请求由client1发出,到达了proxy3(可能是请求的终点)。请求刚从client1中发出时,XFF是空的,请求被发往proxy1;通过proxy1的时候,client1被添加到XFF中,之后请求被发往proxy2;通过proxy2的时候,proxy1被添加到XFF中,之后请求被发往proxy3;通过proxy3时,proxy2被添加到XFF中,之后请求的的去向不明,如果proxy3不是请求终点,请求会被继续转发。简单来说就是,XFF 头信息可以有多个,中间用逗号分隔,第一项为真实的客户端ip,剩下的就是曾经经过的代理或负载均衡服务器的ip地址。
场景=客户端--CDN--Nginx
当用户请求经过 CDN 后到达 Nginx 负载均衡服务器时,其 XFF 头信息应该为 “客户端IP,CDN的IP”
一般情况下CDN服务商出于自身安全考虑会将屏蔽CDN的ip,只保留客户端ip求头到达 Nginx 时:
在默认情况下,Nginx 并不会对 XFF 头做任何处理,
当 Nginx 设置 X-Forwarded-For 等于 $proxy_add_x_forwarded_for 时:
如果从CDN过来的请求没有设置 XFF 头(通常这种事情不会发生),XFF 头为 CDN 的ip
此时相对于 Nginx 来说,客户端就是 CDN
如果 CDN 设置了 XFF 头,我们这里又设置了一次,且值为$proxy_add_x_forwarded_for 的话:
XFF 头为“客户端IP,Nginx负载均衡服务器IP”,这样取第一个值即可。