web小trick
记得比较杂,一些web的小trick,持续更新。
php
1.RCE
echo命令执行系统命令
1 | echo`nl fl''ag.p?p`; |
2.include
文件包含include(),include可以无括号包含
3.assert
php7中,assert不再是函数,变成了一个语言结构(类似eval),不能再作为函数名动态执行代码。
assert只能执行一条语句
4.自增RCE
自增RCE可以借助借助NaN和INF
NaN(Not a Number,非数)是计算机科学中数值数据类型的一类值,表示未定义或不可表示的值。常在浮点数运算中使用。首次引入NaN的是1985年的IEEE 754浮点数标准。
INF:infinite,表示“无穷大”。 超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值)。
1 | $_=C/C;//NAN |
分别对应
1 | $_=0/0;//NAN |
%得到NAIF四个字符,需要拼接字符串才能得到
如
1 | $_=C/C.c; |
虽然报错,但成功获得。
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 | %d9%5c%27 |
注入时需要注意使用hackbar时可能会受影响,最好使用bp。
flask
1.debug
算pin
或者,开启了debug所以检测到⽂件变动后会⾃动重启服务器
2.secret_key
查看生成函数,是否存在伪随机,或者是明文就直接用
如果是随机值,但是拼接了指定的字符串,可以尝试读mem,可能读出秘钥,秘钥是存储在内存中的。