某系統漏洞挖掘之授權繞過到rce
漏洞挖掘
基本信息
首先進行端口掃描,發現僅開了23和80。

telnet 連接23端口發現如果輸入的用戶名不對都會斷開連接。

瀏覽器進行登錄然后抓包,獲取可以用做定位的字符串。

通過文件搜索,可以定位到jhttpd。

通過main函數入手。

首先是mem_init_fun()函數,其中三個函數是負責初始化http可以訪問到的請求以及對應的處理函數:httpd_file_init、httpd_file_ext_init、httpd_cgi_ext_init。

示例如下,httpd_all_file指向了一個結構體,包含了可以訪問的權限、接口名等信息,編寫腳本解析dump出該地址指向的所有接口。

接著繼續dump httpd_file_ext_init和httpd_cgi_ext_init中的所有請求。這兩個函數的結構跟httd_all_file的有所不同,但都包含了一樣的信息。

當http請求的東西初始化完調用httpd_sever_init開始監聽80端口。


最后調用http_poll函數開始處理用戶的http請求。

對于get請求則讓httpd_dowith_get函數去處理。

post請求則根據請求的名hash去獲取對應的處理函數經過httd_check_user校驗權限后判斷是否調用相應的處理函數。

了解了該程序的http服務大概的流程,接下來就是分析哪個請求的處理存在問題即可。
授權繞過
登錄是繞不過的問題,如何弄到一個帳號呢?
先看登錄函數,通過之前的抓包可以看到請求是/login.cgi,那么對應的函數是login_cgi。

我們并沒有傳入type這個參數,那么就來到了這里。

在httpd_cgi_user_check函數中,發現多數的帳號都是通過配置讀取的,但存在一個內置的帳號Wowfkrouteradmin。
通過他修改過的md5函數對jhl_realm_str(此時為空)進行加密后和傳入的也是md5的密碼進行對比。

如果校驗不成功返回-1,在回到上層login_cgi中。是-1會從httpd_cgi_user_check_admin中獲取一個字符串并返回前端。

將他的md5扣出來自己弄加密。

登錄提交,發現返回的是一個也類似md5的字符串。

最后查看httpd_cgi_user_check_admin函數,發現他返回的居然是jhl_realm_str的md5,并且會將新的md5覆蓋到jhl_realm_str?
這什么操作沒看懂,后門?


所以攻擊方法只需要將他返回的md5進行一次加密拿來提交即可。

登錄成功。
命令注入
登錄成功后,通過查找對system的引用找到了最好利用的httpd_debug_asp接口,由于沒有對參數過了,直接調用了sprintf進行格式化字符串,導致可以進行命令注入(也存在棧溢出....)。

請求的接口為/httpd_debug.asp?time=
payload=ping -c 2 192.168.92.128
構造payload提交

payload=echo I\'m Wowfk

其中還存在許多棧溢出、命令執行等漏洞
2
總結
來一張fofa的暴露資產搜索圖:
