代码执行类的题目,如在指定时间内计算给定方程的数值,方程题一般时间人工计算会超时,只能通过抓取页面内的方程,然后通过代码执行的方式计算好然后提交来解决;或给定一串 php 代码,通过指定变量输入系统指令执行代码获取目录和读取 flag 里的内容。
获取页面信息包
- 1.quests包 pip install获取,获取页面信息包
1 | sess = requests.session() |
- 2.通过 re 正则表达式截取内容,通过(.) 即 (.?)匹配
1 | pattern = "the answer is:(.*)</br> a=(.*)</br> b=(.*?)</br>" |
- 3.然后可获取匹配到值,通过eval()函数计算数值
1 | a, b = int(result.group(2)), int(result.group(3)) |
命令执行
如给定一串代码,
1 |
|
然后通过发送 post 请求传参,传入 phpinfo() 或者系统命令执行相关命令来获取 flag。
linux中,&和&&,|和||的区别
&表示任务在后台执行,如要在后台运行redis-server,则有redis-server &&&表示前一条命令执行成功时,才执行后一条命令 ,如echo '1‘ && echo '2'|表示管道,上一条命令的输出,作为下一条命令参数,如echo 'yes' | wc -l||表示上一条命令执行失败后,才执行下一条命令,如cat nofile || echo "fail"|被过滤 用换行符%0a
空格绕过技巧
命令执行时,后台函数可能会过滤掉空格等特殊字符,可通过如下方式绕过过滤
- ${IFS}
- < <>
- %09
- {cat, 1.txt}
- .\
- %CommonProgramFilesL~10,1%
判断服务器为linux或windows
windows对大小写不敏感,将x改为X,如果不变,则为windowswindows查看文件使用指令type,
文件名绕过技巧
如 flag 文件被绕过,可通过如下方法绕过
nl / fl``ag, nl / fl[a-z]g, a=fl;b=ag;nl /$a%becho base64字符串 | base64 -d通过base64加密后再解密echo cat /flag|base64,echo base64字符串 | base64 -d通过base64加密后再解密