ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

BUGKU—— No one knows regex better than me

2022-05-21 00:35:16  阅读:186  来源: 互联网

标签:regex me BUGKU second flag zero girl php first


知识点

1、在ASCII码表中

ASCII码规则

在代码中 \ddd 任意字符 三位八进制 \160表示p
在代码中 \xhh 任意字符 二位十六进制 \x70表示p

 

\056    为八进制   代表   句点或小数点

\160    为八进制   代表   小写字母 p

\150    为八进制   代表   小写字母 h

\x70    为十六进制 代表   小写字母 p

实况

1、打开靶机,发现直接就将源码展现出来了

2、对代码进行审计

 1  <?php 
 2 error_reporting(0);
 3 $zero=$_REQUEST['zero'];
 4 $first=$_REQUEST['first']; //传两个变量,zero和first变量
 5 $second=$zero.$first;
 6 if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second)){
 7     $key=$second;
 8     if(preg_match("/\.\.|flag/",$key)){
 9         die("Noooood hacker!");
10     }else{
11         $third=$first;
12         if(preg_match("/\\|\056\160\150\x70/i",$third)){
13             $end=substr($third,5);
14             highlight_file(base64_decode($zero).$end);//maybe flag in flag.php
15         }
16     }
17 }
18 else{
19     highlight_file(__FILE__);
20 }

1)

1 <?php
2 preg_match("/\\|\056\160\150\x70/i",$string)
3 //1.执行ASC码转为可打印字符 \056\160\150\x70 => .php
4 //2.执行php语法转义  \\ => \,剩下 \|.php
5 //3.执行正则语法转义  \| => |,剩下 |.php
6 ?>

2)

1 $zero=$_REQUEST['zero'];
2 $first=$_REQUEST['first']; //传两个变量,zero和first变量
3 $second=$zero.$first;
4 if(preg_match_all("/Yeedo|wants|a|girl|friend|or|a|flag/i",$second)){
5     $key=$second;

echo $second 发现是把zero和first变量连起来

3)

 1  if(preg_match("/\.\.|flag/",$key)){
 2         die("Noooood hacker!");
 3     }else{
 4         $third=$first;
 5         if(preg_match("/\\|\056\160\150\x70/i",$third)){
 6             $end=substr($third,5);
 7             highlight_file(base64_decode($zero).$end);//maybe flag in flag.php
 8         }
 9     }
10 }
11 else{
12     highlight_file(__FILE__);

在$second里必须匹配到/Yeedo|wants|a|girl|friend|or|a|flag/i这里面的字符,$key=$second,接着在$key里不能匹配到/..|flag/,然后$third=first,并且在$里要匹配有/\|\056\160\150\x70/i,$end从third里第五位字符开始截取

3、解题思路

1)

seconde里要存在"/Yeedo|wants|a|girl|friend|or|a|flag/i",而second=zero.first,所以zero=flag

2)

key=second=zero.first,并且不能存在"/\.\.|flag/",也就是说zero不能=flag或=.

3)

highlight_file(base64_decode($zero).$end),会对$zero进行base64解密,所以我们直接将它进行base64加密$zero=ZmxhZw==

4)

之后third=first,并且要匹配"/\\|\056\160\150\x70/i",这是16进制与进制的东西,转换成10进制,再转成ascii码后即为|.php,但$end=substr($third,5);,故需要在|.php前面加上4个字符,来绕过substr,不过这4个字符得都是"/Yeedo|wants|a|girl|friend|or|a|flag/i",这里面的列出一些组合(aaaa oror Flag girl )只能使用aaaa或girl

4、构造传参

?zero=ZmxhZw==&&first=girl|.php
或
?zero=ZmxhZw==&&first=aaaa|.php

得到flag

 

标签:regex,me,BUGKU,second,flag,zero,girl,php,first
来源: https://www.cnblogs.com/Rammstein-and-rock/p/16294126.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有