记得比较杂,一些web的小trick,持续更新。

php

1.RCE

echo命令执行系统命令

1
echo`nl fl''ag.p?p`;

2.include

文件包含include(),include可以无括号包含

3.assert

php7中,assert不再是函数,变成了一个语言结构(类似eval),不能再作为函数名动态执行代码。

assert只能执行一条语句

image-20230311152923131

4.自增RCE

自增RCE可以借助借助NaN和INF

NaN(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。常在浮点数运算中使用。首次引入NaN的是1985年的IEEE 754浮点数标准。

INF:infinite,表示“无穷大”。 超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值)。

1
2
$_=C/C;//NAN
$_=1/C//INF

分别对应

1
2
$_=0/0;//NAN
$_=1/0//INF

%得到NAIF四个字符,需要拼接字符串才能得到

1
$_=C/C.c;

image-20221005113821225

虽然报错,但成功获得。

5.伪协议

php遇到不认识的协议就会当目录处理

比如0://

6.引用

php引用,就是在变量或者函数、对象等前面加上&符号

表示不同变量指向同一个内容(反序列化时也可使用

8.assertion

PHP>=7.2版本开始,assertion参数不再支持字符串,但是还能用(警告级别Deprecated)。

9.php源码泄露

PHP<=7.4.21时通过php -S开起的WEB服务器存在源码泄露漏洞,可以将PHP文件作为静态文件直接输出源码

sql注入

1.sql_mode

sql注入时长度超长导致的报错是因为sql_mode为严格模式

2.宽字节

宽字节注入payload构造,宽字节在线urldecode

http://www.mytju.com/classcode/tools/urldecode_gb2312.asp

转义字符为

1
%5c%27

在它前面构造就行,例如

1
2
%d9%5c%27
%c9%5c%27

注入时需要注意使用hackbar时可能会受影响,最好使用bp。

flask

1.debug

算pin

或者,开启了debug所以检测到⽂件变动后会⾃动重启服务器

2.secret_key

查看生成函数,是否存在伪随机,或者是明文就直接用

如果是随机值,但是拼接了指定的字符串,可以尝试读mem,可能读出秘钥,秘钥是存储在内存中的