[极客大挑战 2019]Http1
题解:
1. 查看源代码,发现文件Secret.php
2. 查看后发现提示“It doesn't come from 'https://Sycsecret.buuoj.cn'”,记录跳转位置的请求头是refer,更改refer为'https://Sycsecret.buuoj.cn'
3. 提示“Please use "Syclover" browser”,user-agent为记录你的浏览器信息的,在user-agent中添加Syclover。
4. 发现提示显示你无法读取到本地,用X-Forwarded-For: 127.0.0.1查看本地,得到flag
[RoarCTF 2019]Easy Calc1
- 查看网络源代码发现文件名“calc.php”
- 进入文件后发现被过滤的字符,发现“;”没有被过滤
构造payload(ps:?后需有空格)
/calc.php? num=2;var_dump(scandir(chr(47)))
- 发现“f1agg”文件名比较特别
构造payload(ps:?后需有空格)
/calc.php? num=2;var_dump(file_get_contents(chr(47).chr(102).chr(49).chr(97).chr(103).chr(103)))
- 得到flag
[极客大挑战 2019]BuyFlag1
1.点击menu进入payflag
2.查看网页源代码得到提示
<!--
~~~post money and password~~~
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (is_numeric($password)) {
echo "password can't be number</br>";
}elseif ($password == 404) {
echo "Password Right!</br>";
}
}
-->
3.由于类型为post型,使用hackbar输入post数据:password=404
发现并无变化,更改post数据为:password=404a(函数is_numeric()
判断其中的参数是数字还是其他)
回显提示:Only Cuit's students can buy the FLAG
4.使用bp抓包,发现Cookie: user=0,将0更改为1。
得到提示: you are Cuiter
Password Right!
Pay for the flag!!!hacker!!!
5.回到源码提示“post money and password”,输入post数据:money=100000000&password=404a
发现提示:you are Cuiter
Password Right!
Nember lenth is too long
6.考虑到strcmp()函数,将数据进行绕过:money[]=100000000&password=404a
7.得到flag
[BJDCTF2020]Easy MD51
1.进入后发现网站源码没有提示,使用bp抓包,发现代码
Hint: select * from 'admin' where password=md5($pass,true)
为md5函数,输入:ffifdyop
2.发现提示Do You Like MD5?,查看网站源代码,
发现提示:
<!--
$a = $GET['a'];
$b = $_GET['b'];
if($a != $b && md5($a) == md5($b)){
// wow, glzjin wants a girl friend.
-->
为md5函数弱类型比较可以用科学计数法或者数组绕过
3.发现提示:
<?php
error_reporting(0);
include "flag.php";
highlight_file(__FILE__);
if($_POST['param1']!==$_POST['param2']&&md5($_POST['param1'])===md5($_POST['param2'])){
echo $flag;
}
为md5函数强类型比较使用数组绕过可得到flag
ezhttp(xyctf)
- 进入登陆界面只有登录框,查看源代码发现提示 “”
- 使用7kbscan扫描网站目录,得到robots.txt路径,在路径下得到l0g1n.txt,访问得到账号密码
- 登录发现提示“不是 yuanshen.com 来的我不要”,将Referer修改为yuanshen.com
- 得到提示“你用的不是XYCTF的浏览器”,将User-Agent更改为XYCTF
- 发现提示“非本地用户禁止访问!”,使用X-Forwarded-For传入127.0.0.1,发现提示“xff 打咩!!!”,使用burp suite插件burpfakeip,删除X-Forwarded-For,继续传入
- 提示“不是从 ymzx.qq.com 代理来的我不玩”,使用via进行传入
- 提示“有点饿,想吃点XYCTF的小饼干”,直接cookie传入,回显flag
[BJDCTF2020]The mystery of ip
- 存在X-Forwarded-For注入
- 在bp中添加X-Forwarded-For字段
- {{system("ls /")}}
- {{system("cat /flag")}}
知识点
1.什么是 Referer?
就是你点击A标签 Referer的信息告诉服务端你从哪里点击出来的。
2.什么是User-Agent?
User Agent中文名为用户代理,简称 UA,它是一个特殊字符串头,使得服务器能够识别客户使用的操作系统及版本、CPU 类型、浏览器及版本、浏览器渲染引擎、浏览器语言、浏览器插件等。可以抓包进行修改其中的值。
3.什么是X-Forwarded-For?
X-Forwarded-For(XFF)是用来识别通过HTTP代理或负载均衡方式连接到Web服务器的客户端最原始的IP地址的HTTP请求头字段。大概就是传输自己真实的IP地址,阻止匿名请求,但同样的也可以通过抓包进行修改。
4.Referer作用是什么?
1)防盗链
比如办事通服务器只允许网站访问自己的静态资源,那服务器每次都需要判断Referer的值是否是zwfw.yn.gov.cn,如果是就继续访问,不是就拦截。
2)防止恶意请求
比如静态请求是.html结尾的,动态请求是.shtml,那么所有的*.shtml请求,必须 Referer为我自己的网站才可以访问,这就是Referer的作用。
我们通过bp抓包修改referer
5.X-Forwarded-For
这一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不是请求终点,请求会被继续转发。
6.url函数构造
var_dump()用来打印
scandir()用来获扫描目录下文件
chr(47)是“/”的ASCII编码
file_get_contents() 函数是用于将文件的内容读入到一个字符串中的首选方法
chr(102)是f的ASCII编码
chr(49)是1的ASCII编码
chr(97)是a的ASCII编码
chr(103)是g的ASCII编码
7.strcmp()函数
比较两个字符串
绕过方式:变量后加符号[],将字符串变成数组绕过
8.via报头
一个包含所有中间主机和协议的通用头标,用于满足请求。例如:Via: 1.0 fred.com, 1.1 wilma.com