每周一题(二)
[SWPUCTF 2021 新生赛]finalrce
题目
有exec,一看就是无回显RCE,curl没有被过滤,可以尝试用ceye平台实现dnslog外带。
方法一:dnslog外带
原理:DNS在解析的时候会留下日志,我们将信息放在高级域名中,传递到自己这里,然后通过读日志获取信息。
1 | payload |
进行尝试,得到
发现确实可行,接着用ls查看根目录文件,由于ls被过滤,因此要用l\s进行绕过
1 | payload |
得到
接下来查看文件内容,因为cat被过滤,可用ca\t或tac进行绕过
1 | payload |
得到
flag在flllllaaaaaaggggggg里,直接读取(注意la被过滤)
1 | payload |
得到
加上{}应该就行,如果想得到完整flag可以将flag用base32编码,将结果外带后解码得到
1 | payload |
得到的base32编码
解码后得到
方法二:tee命令(输出重定向)
无回显RCE也可通过将命令执行结果重定向输出得到信息,本题中”<”,”>”都被过滤,因此可用tee命令进行绕过
tee
命令在 Unix 和 Unix-like 操作系统中的作用是将标准输入 (stdin) 的内容复制到标准输出 (stdout) 以及一个或多个文件中。
1 | payload |
访问1.txt,得到
一些思考
用curl命令实现dnslog外带会发现返回的结果只有一行,因此尝试使用tr ‘\n’ ‘ ‘将换行符 \n 替换为空格。这样,所有的行都会被合并成一行,返回结果用base32编码
1 | payload |
解码后的结果
发现长度不够,想得到g后面的字符,可以使用?进行匹配,但是不知道后面还有多少字符,可以多次尝试,发现用6个?可以得到flag
1 | payload |
也可以用grep命令得到以flllllaaaaaag开头的文件名
1 | payload |
小结
做题时发现可以用的命令有很多,然后就试试能不能用多种方法,就当做多熟悉一些linux命令的练习了。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Wei's blog!