免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1614 | 回复: 4

[系统管理] web后台参数传递给shell守护进程疑惑 [复制链接]

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
发表于 2014-10-09 21:34 |显示全部楼层
RT:

原理:web页面有表单,输入远程IP,端口号,cmd命令,可以调用底层shell守护进程去远程服务器上执行命令。。

疑问:

web的表单传递给后台php页面,相关php页面 获取的参数如果调用底层shell脚本,去对端机器执行命令呢?


论坛徽章:
0
发表于 2014-10-09 21:39 |显示全部楼层
本帖最后由 zerostudy 于 2014-10-09 21:40 编辑

本机调用远方机器?可以参考nagios的插件方式。  或者写一个scok程序,可以接收参数。算是网络编程的那种吧。

论坛徽章:
14
15-16赛季CBA联赛之辽宁
日期:2019-06-16 15:47:3515-16赛季CBA联赛之广夏
日期:2016-08-13 21:24:352015亚冠之武里南联
日期:2015-07-07 17:37:372015亚冠之萨济拖拉机
日期:2015-07-06 17:07:482015亚冠之全北现代
日期:2015-06-04 13:54:272015亚冠之城南
日期:2015-05-21 15:43:212015年亚洲杯之伊朗
日期:2015-04-25 18:20:362015年亚洲杯之伊朗
日期:2015-04-20 16:06:052015年亚洲杯之科威特
日期:2015-03-07 12:51:26丑牛
日期:2014-12-30 10:26:38申猴
日期:2014-09-28 22:40:18金牛座
日期:2014-09-13 21:12:22
发表于 2014-10-09 22:09 |显示全部楼层
回复 2# zerostudy


    嗯 对的,...   OSA管理后台 是用php+python+shell实现的。

具体的代码没分析透,,

各位有相关案例代码介绍吗?

论坛徽章:
3
丑牛
日期:2014-09-13 18:19:22摩羯座
日期:2014-10-10 17:43:02水瓶座
日期:2014-10-16 01:00:22
发表于 2014-10-09 22:15 |显示全部楼层
学生党:飘过~以前CGI写一个亮一下~其实就是低权限用户调用bash解释运行的,PHP也是一样的

  1. [root@redhat002 html]# cat index.cgi
  2. #!/bin/bash
  3. echo "Content-Type:text/html"
  4. echo ""
  5. #画个表格出来
  6. echo '<table style="border:solid 1px red;width:800px;height=100%;text-align=center;"><tr><td>'
  7. echo '<form action="index.cgi" method="get">命令:<input size="68" type="text" name="command" /><input type="submit" value="执行" /><br /></td></tr><tr><td>'
  8. #加载获取键值脚本,获取执行command
  9. source yhsafe_getkv.class.cgi
  10. exec_command=`yhsafe_show_value`
  11. #转换把那个URL中的+号全部转换成为空格,但是有的就会和linux命令冲突
  12. pcre_command=$(echo $exec_command|sed 's/+/ /g')
  13. #echo ${exec_command%%+*}
  14. #echo ${exec_command//*+}
  15. #判断如果是command被指定命令就返回执行结果
  16. if [ -n ${exec_command} ];then
  17.         echo '<pre>'
  18.         eval ${pcre_command}
  19.         echo '</pre>'
  20. fi
  21. echo '</td></tr></table>'
  22. [root@redhat002 html]#

  23. [root@redhat002 html]# cat yhsafe_getkv.class.cgi
  24. #!/bin/bash
  25. #定义一个关系数组
  26. declare -A GET
  27. #循环读取一个键值对
  28. while read -r key_value; do
  29.         #获取键
  30.         key=${key_value%%=*}
  31.         #如果键中没有包含一些乱七八糟的危险字符以及URL编码字符等就继续
  32.         if [[ -z "$key" || -z "${key##*[\$"'"'`''"'.%]*}" ]]; then
  33.                 continue
  34.         fi
  35.         #获取值(严格过滤用)
  36.         #value=$(echo -e "$(echo "${key_value#*=}" | sed 's/+/ /g; s/%\([0-9a-fA-F]\{2\}\)/\\x\1/g')")
  37.         #获取值(针对LINUX命令)
  38.         value=$(echo -e "$(echo "${key_value#*=}" | sed 's/%\([0-9a-fA-F]\{2\}\)/\\x\1/g')")
  39.         #给关系数组赋值
  40.         eval "GET[$key]=\$value"
  41. #用的是$QUERY_STRING把&换位换行符这样就可以逐行读取
  42. done < <(echo "$QUERY_STRING" | sed 's/\&/\n/g')

  43. #这个和PHP还有点儿不同包含的文件的值必须用函数传出去
  44. function yhsafe_show_value(){
  45.         echo ${GET["command"]}
  46. }
复制代码

论坛徽章:
3
丑牛
日期:2014-09-13 18:19:22摩羯座
日期:2014-10-10 17:43:02水瓶座
日期:2014-10-16 01:00:22
发表于 2014-10-09 22:15 |显示全部楼层
学生党:飘过~以前CGI写一个亮一下~其实就是低权限用户调用bash解释运行的,PHP也是一样的

  1. [root@redhat002 html]# cat index.cgi
  2. #!/bin/bash
  3. echo "Content-Type:text/html"
  4. echo ""
  5. #画个表格出来
  6. echo '<table style="border:solid 1px red;width:800px;height=100%;text-align=center;"><tr><td>'
  7. echo '<form action="index.cgi" method="get">命令:<input size="68" type="text" name="command" /><input type="submit" value="执行" /><br /></td></tr><tr><td>'
  8. #加载获取键值脚本,获取执行command
  9. source yhsafe_getkv.class.cgi
  10. exec_command=`yhsafe_show_value`
  11. #转换把那个URL中的+号全部转换成为空格,但是有的就会和linux命令冲突
  12. pcre_command=$(echo $exec_command|sed 's/+/ /g')
  13. #echo ${exec_command%%+*}
  14. #echo ${exec_command//*+}
  15. #判断如果是command被指定命令就返回执行结果
  16. if [ -n ${exec_command} ];then
  17.         echo '<pre>'
  18.         eval ${pcre_command}
  19.         echo '</pre>'
  20. fi
  21. echo '</td></tr></table>'
  22. [root@redhat002 html]#

  23. [root@redhat002 html]# cat yhsafe_getkv.class.cgi
  24. #!/bin/bash
  25. #定义一个关系数组
  26. declare -A GET
  27. #循环读取一个键值对
  28. while read -r key_value; do
  29.         #获取键
  30.         key=${key_value%%=*}
  31.         #如果键中没有包含一些乱七八糟的危险字符以及URL编码字符等就继续
  32.         if [[ -z "$key" || -z "${key##*[\$"'"'`''"'.%]*}" ]]; then
  33.                 continue
  34.         fi
  35.         #获取值(严格过滤用)
  36.         #value=$(echo -e "$(echo "${key_value#*=}" | sed 's/+/ /g; s/%\([0-9a-fA-F]\{2\}\)/\\x\1/g')")
  37.         #获取值(针对LINUX命令)
  38.         value=$(echo -e "$(echo "${key_value#*=}" | sed 's/%\([0-9a-fA-F]\{2\}\)/\\x\1/g')")
  39.         #给关系数组赋值
  40.         eval "GET[$key]=\$value"
  41. #用的是$QUERY_STRING把&换位换行符这样就可以逐行读取
  42. done < <(echo "$QUERY_STRING" | sed 's/\&/\n/g')

  43. #这个和PHP还有点儿不同包含的文件的值必须用函数传出去
  44. function yhsafe_show_value(){
  45.         echo ${GET["command"]}
  46. }
复制代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

DTCC2020中国数据库技术大会

【架构革新 高效可控】2020年12月21日-23日第十一届中国数据库技术大会将在北京隆重召开。

大会设置2大主会场,20+技术专场,将邀请超百位行业专家,重点围绕数据架构、AI与大数据、传统企业数据库实践和国产开源数据库等内容展开分享和探讨,为广大数据领域从业人士提供一场年度盛会和交流平台。

http://dtcc.it168.com


大会官网>>
  

北京盛拓优讯信息技术有限公司. 版权所有 16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122
中国互联网协会会员  联系我们:huangweiwei@it168.com
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP