我要成为web🐕
- 你从哪里来
HTTP请求报文:
他说要从谷歌来:
可以bp抓包:
更改一下请求头的内容就可以实现了:
具体的:
http请求头里的键值对是
也就是请求头里每个key对应的功能!
这个题用到 referer:该页面的来源URL
那我们就可以直接bp抓包,再修改,最后获取响应!
这个题好像在攻防世界做过!
2.md5 collision(NUPT_CTF)
md5 collision(md5碰撞)这英语不好太难了😭
考点:md5检查绕过
题目了有两点:
1 md5 collision(md5碰撞)
2 input a
试了试
老错!false
怎么办🐷
md5绕过:
1科学计数法 0==0
我认为MD5咋检查吧,就是输入a后它的md5值和原来它原来本身创建的md5值相等!那它们就是一个东西。
通过这个,因为我们又不知道它的值具体是多少,只能通过绕过方法。
也就是a它原本就有个值,现在要通过a的MD5值相同,来表示值相同来绕过!
来随便找个:
直接网上MD5 oe 一收🤭:
0e开头MD5值小结3.程序员本地网站
考点 :XFF(X-Forwarded-For)
这个在攻防世界也做过好像!
前面第一题里的HTTP请求头里有讲解XFF。
简单说就是要从本地登录来访问:
本地一般都是:127.0.0.1
bp抓包添加XFF即可👨🎓:
4.各种绕过
考点明显就是考你各种的绕过!
<?php
highlight_file('flag.php');
$_GET['id'] = urldecode($_GET['id']);
$flag = 'flag{xxxxxxxxxxxxxxxxxx}';
if (isset($_GET['uname']) and isset($_POST['passwd'])) {
if ($_GET['uname'] == $_POST['passwd'])
print 'passwd can not be uname.';
else if (sha1($_GET['uname']) === sha1($_POST['passwd'])&($_GET['id']=='margin'))
die('Flag: '.$flag);
else
print 'sorry!';
}
?>
1.代码审计
有一个flag.php。五日不会有答案吧!我在想屁吃🐷
$_GET['id'] = urldecode($_GET['id']);
看大佬文章都没写这点!自己想不通!哦。。
这里因为urlencode(margin)=margin
加不加密都一样!五日👀
3.sha1 — 计算字符串的 sha1 散列值
那现在
MD5和SHA1是2种加密算法,用于计算出一段不可逆向计算的数值,以此来验证该文件是否被修改的.
它可以帮验证从网上下载下来的windows7安装程序是否与发布人发布的东西完全一致,也就是帮助验证这个程序有没有经过他人(非发布人)的修改。
所以大概就是要uname和passwd的SHA1的值和类型都相同还有id=margin就可以得到flag了!
但是又有个条件uname和passwd本身的值不能相同,不然就直接输出了。
我认为(看完大佬)sha1和md5有一样的漏洞。
就是是数组的时候他们的MD5()是null.而SHA1()是false。
最后构造payload:
?uname[]=1&d=margin
小心有点passwd是post
passwd[]=2
还有一点不要带上flag.php不然出不来flag
(不给答案就算了,还坑人🐱👤)
5.web8
txt????有个txt提示
试一试flag.txt
不知道为什么页面容易405 刷新几下也能看到提示
flags
flags.txt是404啥也没有!
这是啥意思呢?
<?php
extract($_GET);
if (!empty($ac))
{
$f = trim(file_get_contents($fn));
if ($ac === $f)
{
echo "<p>This is flag:" ." $flag</p>";
}
else
{
echo "<p>sorry!</p>";
}
}
?>
代码审计:函数好多记不住呀😱
extract — 从数组中将变量导入到当前的符号表
也就是把下标变成了变量,直接输出**$下标**就可以得到值!
就是把你get的参数变成变量!
empty — 检查一个变量是否为空
当var存在,并且是一个非空非零的值时返回 FALSE 否则返回 TRUE.
就是空的时候是true,不空是false!
那!empty就说明他是有值的!
trim — 去除字符串首尾处的空白字符(或者其他字符)
file_get_contents — 将整个文件读入一个字符串
file_get_contents($fn):file_get_contents
功能是从文件名为“$fn
”的文件中读取数据,但是当$fn
的值为“php://input
”,它会接受并返回post的值
大概意思是$ac
和$f
的类型和值都要等于,就可以都到flag了。
这里大佬们说得到的提示flags可能是$ac
的值。
因为$fn
它是文件,那它可能是flag.txt
试一试:
可以😀
大佬们还说有另外的方法:php://input(PHP输入流)
当$fn
的值为“php://input
”,它会接受并返回post的值
利用file_get_contents在$fn
的值为“php://input”时会返回post值 的特点,使$ac
值为123,$fn
值为“php://input”,并post值123,同样可使
a
c
和
ac和
ac和f相等
6.细心
看了看源代码也没有可用信息
那就Disearch扫一扫有什么吧:
试一试扫出来的网站:
不让访问,我偏要访问😋
有一行php代码提示,还有要是管理员!
题目上有提示说要想办法变成admin
那我们就吧x赋值admin试一试吧:可以😀
一般这种脑洞题也是不错的!
7.求getshell
题目说到了getshell
题上说要上传一个图片不是php文件
那我们先按要求试试
上传成功还可以看上传的图片
但都没有结果
大佬给思路。
bp抓包;
大佬都说是(后缀黑名单检测和类型检测)
(刚刚接触文件上传)个人理解黑名单检查很好理解
指定一些不能通过,别的全能通过!
一 一试试php别名:php2, php3, php4, php5, phps, pht, phtm, phtml(一个个去试,发现php5没有被过滤掉)这是黑名单检测!
那类型检测怎么绕过呢?
将Content-Type: multipart/form-data;其中的一个或多个字母换成大写,越过服务器端检查。相当于失效了!
累了👻
大佬说这个题是walf严格匹配,。不知道他是什么!
以后做题遇到再说吧!