实验吧 登录一下好吗
? ? ?
此篇文章是在實驗吧的writeupshang找的,寫的挺好的。
???? 這題我看到的時間比較晚,評論區有人說過濾了/ # -- select or union |等
反正不管,我先按常規試試
username=admin'--&password='or''='
回顯:
對不起,沒有此用戶!!
hint:
username:admin'
password:'''='
這時候--和or被過濾看起來好可怕,但是單引號'沒被過濾就是最幸福的事兒了(雖然有可能是經過轉義的,但題目中說只是過濾,沒說轉義,( # ▽ # ))
這時候其實只要帳號和密碼都上萬能密碼,啥都搞定,看似被過濾了n多n多,但卻是最容易注入進去的。
來一個過法:)
username=pcat'='&password=pcat'='
flag立馬就拿到,為何能過呢?很多人就疑問了?沒有or也能萬能注入?
解析過程看下面
- - - - - - - - - - - -
假設sql語句如下
select * from user where username='用戶名' and password='密碼'
當提交username=pcat'='&password=pcat'='
語句會變成如下:
select * from user where username='pcat'='' and password='pcat'=''
這時候還不夠清晰,我提取前一段判斷出來(后面的同樣道理)
username='pcat'=''
這是有2個等號,然后計算順序從左到右,
先計算username='pcat' 一般數據庫里不可能有我這個小名(若有,你就換一個字符串),所以這里返回值為0(相當于false)
然后0='' 這個結果呢?看到這里估計你也懂了,就是返回1(相當于true)
所以這樣的注入相當于
select * from user where 1 and 1
也等于 select * from user
(這題只有篩選出來的結果有3個以上才會顯示flag,沒有就一直說“對不起,沒有此用戶!!”)
好了,繼續嘮叨幾句,上面那個比較是弱類型的比較,
以下情況都會為true
1='1'
1='1.0'
1='1后接字母(再后面有數字也可以)'
0='除了非0數字開頭的字符串'
(總體上只要前面達成0的話,要使語句為true很簡單,所以這題的萬能密碼只要按照我上面的法子去寫一大把)
by pcat
2016.10.9
轉載于:https://blog.51cto.com/xiaocaione/1882321
總結
以上是生活随笔為你收集整理的实验吧 登录一下好吗的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 测试知识整理——基础篇
- 下一篇: 基于 Rancher 的企业 CI/CD