上回内网渗透,想到命令执行这块全忘了,赶紧回来看一下,我只想说我好菜啊。。。。。。。。。。。。。。我记性真不好。。。。。。。。。。但我够骚,等我精通了一定要搞很多骚操作.
代码执行,就是用户输入的数据当后端代码执行,比如php中<?php @eval($_REQUEST[8]) ?>可以把传递的数据当任意php代码执行。同时因为后端语言肯定也要操作系统执行外部命令,system(),exec(),shell_exec(),passthru().比如<?php system(‘whoami’) ?>,然后这个函数会把执行结果放到页面上来,这里我在想为毛这个字符串一定要加’’,是为了区别关键字?这下php语言作者上心了,实名表扬!不然又有很多巧合可以构造。
想到这里好像php中有单引号字符串,双引号字符串,还™不一样,但我忘记了,要感悟一下,嗯嗯下次一定下次一定。刚刚试了一下命令行中命令带引号是不能起作用的, 想到是传给操作系统的是字符串,然后应该是自动把’’去掉了,但我想到如果转义字符在字符里面呢,这个是完完整整的传给操作系统去掉引号后执行,还是先执行php的引号,再把结果传给操作系统去掉引号执行呢,感觉这里有点骚,可能有些可以利用的点,。
漏洞,骚操作往往能存在于两个体系之间的翻译交互,谁叫他们各行其是!比如宽字节绕过。下回研究哈!、
这里还有exec(),这个函数能执行,但只回复最后一句,而且还要echo配合。比如 <?php echo exex(‘whoami’) ?>,<?php echo shell_exex(‘whoami’) ?>就可以完整显示反馈到页面,鬼畜大师-风说这个查看源代码看起来比较舒服,我一看果真,大师经验丰富。
passthru()函数和system()一样只用<?php passthru(‘whoami’) ?>就能在页面反馈全部结果。
休息休息
想起两个体系之间交互的情况,比如url编码问题。我觉得 他们得分3层:第一就是机器层面 第二就是交互层面 第三就是人。
在机器层面,运算,存储,传输都是机器层面,都是两种状态的存在。交互层面就是机器和人之间的沟通。人就是人的思想语言逻辑。
编码的两个方面:1.就是把物理层面的状态和人类符号一一对应起来。人类符号有很多体系。主要是 来给人看,以及让人通过人类符号给机器下指令(人机交互)
2.机器与机器传输的时候需要知道传输的数据是用 哪种 物理层面的状态和人类符号的对照关系来存储解读。
不管我们用什么编码机器层面一直都是两种不同状态。问题在于,我们输入了一个符号,他根据编码转化成机器层面的状态,然后传输到其他机器,那边机器再根据某种编码对照翻译成人类符号,显示给人类。
比如url的人类符号之有两种一种是ASCII码,一种是加%的16进制码(数字码是一体两面的,一面也是一种人类符号,一面是两种物理状态的组合).url方面这边有篇文章可以看看https://www.cnblogs.com/hannover/p/4657463.html
比如在传参的时候先把url变成ASCII码+%的16进制码的人类符号,传输的时候就是对应的两种物理状态的各种骚组合,服务器接到然后交给后端语言去处理,会把这些骚组合按照对照表翻译成ASCII码+16进制码的人类符号。比如宽字节注入中,后端语言php中开启加\功能
1)低版本(php5.4以下)开启魔术引号的方法:
phpstudy中,修改php.ini配置文件,搜索magic_quotes_gpc ,使得magic_quotes_gpc=on (代表魔术引号开启) 反之off为关闭
记住修改之后一定要重启php(重启生效
(2)高版本php: 使用魔术引号同等功能的addslashes()函数,
高版本(php5.4以上)没有魔术引号,没法在php的配置文件中开启, 但是有新的同等功能函数支持(addslashes()
传参中有 ‘ , “ , \ 这几个特殊字符时,(php是单字节处理的)都会在它前面加上\对其进行转义成普通字符,而\符号 代表的物理状态组合,能与其他组合,巧妙的在传递给数据库中,数据库如果是GBk编码,会根据GBK编码翻译成GBK编码对应的符号。详见:https://www.jb51.cc/note/499129.html
转义是不是在PHP里没转义,跑数据库里才转义啊,php的解释器怎么知道这个\是字符串啊,等下回忆回忆
用户名 | 金币 | 积分 | 时间 | 理由 |
---|---|---|---|---|
杰斯 | 1.00 | 0 | 2021-05-10 21:09:14 | 一个受益终生的帖子~~ |
打赏我,让我更有动力~
© 2016 - 2024 掌控者 All Rights Reserved.