pyhton爬取反序列細說一

2021-10-10 20:08:41 字數 1329 閱讀 1090

pyhton反序列化的字元逃逸算是比較難理解的乙個知識點,在最近的好幾場比賽中都出現了相關的題,於是下定決心徹底理解透徹這個知識點,於是便有了這篇文章。

字元逃逸在理解之後就能夠明白,這是一種閉合的思想,它類似sql中的萬能密碼,理解這種原理之後會變得特別容易。

在sql注入中,我們常用』、"來對注入點進行一些閉合或者一些試探,從而進行各種姿勢的注入,反序列化時,序列化的值是以;作為欄位的分隔,在結尾是以}結束,我們稍微了解一下,

反序列化的過程就是碰到;}與最前面的然後進行反序列化,這裡指的是在對username傳參的時候進行修改,也就是我們寫鍊子的時候進行的操作

可以看到構造出來的序列化字串長度為25,而在上面的反序列化過程中,他會將乙個o變成兩個,oo,那麼得到的應該就是s:25:"toom"我們要做的就是讓這個雙引號裡面的字串在過濾替換之後真的有描述的這麼長,讓他不要報錯,再配合反序列化的特點,(反序列化的過程就是碰到;}與最前面的的長度22,那就需要22個o,

總的來說就是22個o加上後面的字串長度22,總長度就為44,在被過濾替換後,光o就有44個,符合描述的字串長度。下面就說明(為什麼叫做逃逸)

這裡特意寫了"將一大串o進行與前面的"閉合了,如果直接反序列化,在序列化出來的值中就包含了";s:3:「age」;s:2:「35」;}。

反序列的過程中,所描述的字串長度(這裡為44),而後面雙引號包裹的字串長度(這裡為22)不夠所描述的長度,那麼他將會向後吞噬,他會將後雙引號吞噬,直至足夠所描述的長度,在一切吞噬結束之後,序列化出來的字串如果不滿足反序列化的字串的格式,就會報錯。我們這裡是他吞噬結束後,還滿足這個格式,所以不報錯。

在這個例子中,我們利用他對序列化後的值,進行增加字串長度的過濾,讓他填充雙引號內的字串達到所描述的44這麼長,使得後面的s:3:「age」;s:2:「35」;不被吞噬,讓這部分**逃逸出吞噬,又讓他提前遇到}忽略後面的一些不需要的字串,結束反序列化。

可以看到,我們構造的payload是成功修改了age,這裡是陣列,在對物件操作時也是一樣的。

剛剛說到吞噬,在增加字串的題目中,我們是利用題中的增加操作,阻止他進行向後吞噬我們構造的**,而在字元減少的過程中,我們也是利用這個操作。

有了前面」吞噬「的一種解釋,那麼字串減少就很好說了 ,同樣的也是因為替換的問題,使得引數可以讓我們構造payload

這裡的錯誤是因為s:5:"zddo"長度不夠,他向後吞噬了乙個雙引號,導致反序列化格式錯誤,從而報錯,我們要做的就是讓他往後去吞噬一些我們構造的一些**。以下講具體實施。

同樣的,我們這裡以修改age為例,不同的是與增加字串傳值的地方有些許不同,我們構造的值是有一部分讓他吞噬的

先正常傳遞值序列化出我們需要修改的值,我們需要的是將age:13改為35

php反序列unserialize的乙個小特性

這幾天wordpress的那個反序列漏洞比較火,具體漏洞我就不做分析了,看這篇 你也可以去看英文的原文 wp官網打了補丁,我試圖去bypass補丁,但讓我自以為成功的時候,發現我天真了,並沒有成功繞過wp的補丁,但卻發現了unserialize的乙個小特性,在此和大家分享一下。1.unseriali...

PHP反序列化漏洞總結(一)

做了不少php反序列化的題了,是時候把坑給填上了。參考了一些大佬們的部落格,自己再做一下總結 在了解序列化和反序列化之前,先簡單了解一下php的物件導向。萬物皆可物件。根據官方手冊,php中,以關鍵字class定義乙個類,乙個類可以包含有屬於自己的常量,變數 稱為 屬性 以及函式 稱為 方法 cla...

DRF 一對多序列化與反序列化

from django.db import models 建立老師模型 class teacher models.model 教師名稱 name models.charfield max length 32,unique true 新增時間 addtime models.datetimefield ...