由order by排序注入實(shí)戰(zhàn)引發(fā)的思考

最近一直忙著實(shí)習(xí)面試,在準(zhǔn)備面試的過程確實(shí)也補(bǔ)充了很多自己以前的知識(shí)盲區(qū),雖然有點(diǎn)考前惡補(bǔ)的意思档押,但能學(xué)到知識(shí)總歸是好的。當(dāng)然曙寡,面試的結(jié)果也還算滿意,雖然還沒有拿到自己心中T0的大廠offer寇荧,但也獲得了很多其他乙方包括某個(gè)大廠甲方的實(shí)習(xí)offer举庶。師哥們也陸續(xù)去實(shí)習(xí)了,老師這邊壓著比較多的項(xiàng)目正在推進(jìn)揩抡,大都是滲透方向的户侥,包括這個(gè)月的業(yè)務(wù),所以趁著實(shí)習(xí)面試的尾聲峦嗤,好好的干一波嘿嘿蕊唐。

一、Result

這個(gè)月的業(yè)務(wù)挖洞成果對(duì)自己來說還是很滿意的烁设,除了漏洞數(shù)量外替梨,漏洞質(zhì)量也比較高。具體就不多說了装黑,言歸正傳副瀑,在本月的業(yè)務(wù)滲透測(cè)試?yán)锇l(fā)現(xiàn)一個(gè)很有趣的sql注入,也是自己之前的一個(gè)盲區(qū)——order by排序注入恋谭,一直想著在實(shí)戰(zhàn)中接觸這種類型的注入場景糠睡,還真就來了。

二疚颊、Process

話不多說狈孔,上接口:

https://xxxx.com/xxx/xxx/xxx/getAreaSpotPageList?&pageindex=1&pagesize=20&passAreaId=2&orderby=pass_area_spot_id+desc&userId=1181163&hotelId=5&brandId=5

這是一個(gè)比較正常的get類型的獲取數(shù)據(jù)接口信认,但orderby參數(shù)比較惹眼,因?yàn)閰?shù)的值為pass_area_spot_id+desc均抽,desc表示的是sql中的降序排序嫁赏,卻以orderby參數(shù)值的方式輸入,所以就對(duì)該參數(shù)進(jìn)行了測(cè)試:

Step 1:

令orderby=pass_area_spot_id+desc到忽,返回?cái)?shù)據(jù)如下:

image.png

Step 2:

令orderby=pass_area_spot_id+asc,返回?cái)?shù)據(jù)如下:

image.png

(解釋一下清寇,兩種情況下返回內(nèi)容不一致)

Step 3:

這里其實(shí)大致可以判斷存在排序注入的可能喘漏,但還是有歧義,需要進(jìn)一步進(jìn)行判斷华烟,這里采用基于時(shí)間的盲注輔助判斷:

Payload1:pass_area_spot_id+desc,(select*from(select+sleep(3)union/**/select+1)a)

返回如下:


image.png

該請(qǐng)求在5s多時(shí)得到響應(yīng)翩迈。

Payload2:pass_area_spot_id+desc,(select*from(select+sleep(6)union/**/select+1)a)

返回如下:


image.png

該請(qǐng)求在8s多時(shí)得到響應(yīng)。
在不考慮測(cè)試環(huán)境本身的網(wǎng)絡(luò)狀況盔夜,上述測(cè)試過程可以證明漏洞的存在负饲。

Step 4:

Time-based還是不太方便,并且時(shí)間較長喂链。所以更換注入手法返十,直觀輸出注入結(jié)果:

Payload:pass_area_spot_id+desc,if(ascii(substr(database(),? ,1))=?,1,(select%201%20from%20information_schema.tables))

通過布爾類型的盲注,利用上述payload進(jìn)行fuzz(省略通過二分法判斷當(dāng)前數(shù)據(jù)庫長度的步驟):


image.png

查找對(duì)應(yīng)ascii所代表的字符椭微,獲得當(dāng)前數(shù)據(jù)庫名:xxxxxxxx洞坑,測(cè)試結(jié)束。

三蝇率、Review

在整個(gè)測(cè)試階段里迟杂,雖然注入成功,但是也引發(fā)了自己的兩個(gè)問題本慕,這兩個(gè)問題也是自己在面試的過程中所碰到的排拷。

Q1、為什么預(yù)編譯不太好防order by注入(就mysql數(shù)據(jù)庫來談)锅尘?

A1:

這個(gè)問題不管在面試的過程中還是個(gè)人的平時(shí)積累過程中都能夠折射出個(gè)人的學(xué)習(xí)深度监氢,很遺憾,我并沒有在面試的過程中很好的回答這個(gè)問題藤违,其實(shí)并不是不知道這個(gè)問題的答案忙菠,而是不太好組織語言去系統(tǒng)性的帶擴(kuò)展的回答它,并且在之前的挖洞經(jīng)歷里沒有對(duì)應(yīng)的場景支撐纺弊,所以還是比較遺憾吧牛欢,另一方面更說明自己的知識(shí)體系太弱,表面徘徊較多淆游。
言歸正傳傍睹,為什么預(yù)編譯不太好防order by注入隔盛?這個(gè)問題等于是在問為什么在預(yù)編譯中order by后不能參數(shù)化?一般的sql執(zhí)行片段代碼(預(yù)編譯方式)是這樣的:

Connection conn = DBConnect.getConnection();
String sql = " SELECT xxx FROM xxx WHERE xxx = ? ";
ps = conn.prepareStatement(sql);
ps.setString(1, xxx); //或者ps.setInt(1, username);
rs = ps.executeQuery();

當(dāng)我們輸入xxx=abc時(shí)拾稳,預(yù)編譯的代碼會(huì)自動(dòng)給abc加上引號(hào),變成'abc'吮炕,sql語句也變成了:

String sql = " SELECT xxx FROM xxx WHERE xxx = 'abc' ";

這樣可以有效的防止用戶的輸入直接拼接在sql語句之后,譬如用戶輸入xxx=' or '1'='1時(shí)访得,實(shí)際上的sql語句卻為:

String sql = " SELECT xxx FROM xxx WHERE xxx = '' or '1'='1' ";

無法達(dá)到攻擊的效果龙亲。說回order by,order by的用法一般為order by [字段名] [desc/asc]悍抑,如果對(duì)order by之后的輸入進(jìn)行參數(shù)化鳄炉,那么sql語句將會(huì)變成這樣:

String sql = " SELECT xxx FROM xxx WHERE xxx ='xxx' order by 'xxx' "

這樣會(huì)造成sql語法錯(cuò)誤,因?yàn)榇藭r(shí)'xxx'是字符串而不是字段名搜骡。
那么為什么預(yù)編譯的函數(shù)在參數(shù)化時(shí)非要把輸入加上引號(hào)呢拂盯?如果沒有引號(hào)不就可以防御order by注入了嗎?是的记靡,但確實(shí)沒有不加引號(hào)的預(yù)編譯的方法哈哈谈竿。
引伸來說,這樣的sql注入不僅僅發(fā)生在order by處摸吠,任何需要字符串且不能夠加引號(hào)的地方都有可能發(fā)生類似的注入空凸,因?yàn)椴荒軈?shù)化的位置,不管怎么拼接寸痢,最終都是和使用“+”號(hào)拼接字符串的功效一樣劫恒。
那么又引出了新的問題,既然預(yù)編譯防不了order by轿腺,那么該怎么樣防两嘴?答案是采用白名單的方式,因?yàn)閛rder by之后跟的字段名肯定是有限的并且是數(shù)據(jù)庫中已經(jīng)存在的字段族壳,只要對(duì)這些有限字段設(shè)置白名單憔辫,任何不在白名單內(nèi)的數(shù)據(jù)統(tǒng)一報(bào)錯(cuò),那么就可以解決啦仿荆。

Q2贰您、面對(duì)時(shí)間較長的Time-based或者Boolean-Base,除了用工具自動(dòng)化跑結(jié)果外拢操,有沒有其他較好的方式锦亦?

A2

答案是利用Dnslog,當(dāng)時(shí)面試的時(shí)候比較緊張令境,一直想著payload的改進(jìn)和工具自動(dòng)化杠园,把這個(gè)給忘了,其實(shí)也跟平時(shí)使用這個(gè)技巧不多的原因有關(guān)舔庶,所以認(rèn)了抛蚁。陈醒。不過在面試過后確實(shí)對(duì)Dnslog又強(qiáng)化了一波,的確很好用瞧甩。直接上鏈接把->Dnslog-<钉跷,這個(gè)博主關(guān)于Dnslog在各個(gè)場景下的使用技巧總結(jié)的十分詳細(xì)了。

四肚逸、Re-review

參與面試的過程其實(shí)是對(duì)自己之前所積累的技術(shù)體系的一種測(cè)試爷辙,更重要的對(duì)我來說收獲最多是了解圈內(nèi)的大牛們都在關(guān)注著哪些他們感興趣的方向和技術(shù)細(xì)節(jié),在丟人的同時(shí)的確獲得了很多自己想要的信息哈哈朦促。也發(fā)現(xiàn)了自己在hack的過程中深度的確不夠膝晾,容易滿足于眼前的成果,挖洞是一方面思灰,學(xué)習(xí)知識(shí)也是玷犹。因?yàn)閔ack的過程永遠(yuǎn)比挖到漏洞更重要混滔。

五洒疚、To-Do

1、接下來的時(shí)間里繼續(xù)靶場的練習(xí)坯屿,回顧之前浮躁?duì)顟B(tài)下所忽略的技術(shù)細(xì)節(jié)油湖,直到hack清楚為止。
2领跛、思考自己的知識(shí)框架和技術(shù)框架乏德,乘早跳出滲透的圈子,接觸真正的企業(yè)體系安全建設(shè)吠昭。
3喊括、培養(yǎng)好奇心,保持好奇心矢棚。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末郑什,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子蒲肋,更是在濱河造成了極大的恐慌蘑拯,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件兜粘,死亡現(xiàn)場離奇詭異申窘,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)孔轴,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門剃法,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人路鹰,你說我怎么就攤上這事玄窝∏K拢” “怎么了?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵恩脂,是天一觀的道長帽氓。 經(jīng)常有香客問我,道長俩块,這世上最難降的妖魔是什么黎休? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮玉凯,結(jié)果婚禮上势腮,老公的妹妹穿的比我還像新娘。我一直安慰自己漫仆,他們只是感情好捎拯,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著盲厌,像睡著了一般署照。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上吗浩,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天建芙,我揣著相機(jī)與錄音,去河邊找鬼懂扼。 笑死禁荸,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的阀湿。 我是一名探鬼主播赶熟,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼陷嘴!你這毒婦竟也來了映砖?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤罩旋,失蹤者是張志新(化名)和其女友劉穎啊央,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體涨醋,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡瓜饥,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了浴骂。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片乓土。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出趣苏,到底是詐尸還是另有隱情狡相,我是刑警寧澤,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布食磕,位于F島的核電站尽棕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏彬伦。R本人自食惡果不足惜滔悉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望单绑。 院中可真熱鬧回官,春花似錦、人聲如沸搂橙。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽区转。三九已至苔巨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間蜗帜,已是汗流浹背恋拷。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國打工资厉, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留厅缺,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓宴偿,卻偏偏與公主長得像湘捎,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子窄刘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容

  • 0x00 背景 看了之前Gr36_前輩在先知上的議題窥妇,其中有提到排序注入,這個(gè)在最近經(jīng)常遇到這樣的問題娩践,所以先總結(jié)...
    漏斗社區(qū)閱讀 776評(píng)論 0 1
  • 為什么會(huì)存在SQL注入 通俗來講活翩,sql作為一種解釋型語言,在運(yùn)行時(shí)是由一個(gè)運(yùn)行時(shí)組件解釋語言代碼并執(zhí)行其中包含的...
    hxhdip閱讀 596評(píng)論 0 0
  • sql注入及防護(hù) 一翻伺、常見獲取變量 request.getParameter() request.getCooki...
    thelostworldSec閱讀 501評(píng)論 0 0
  • Web安全篇之SQL注入攻擊 在網(wǎng)上找了一篇關(guān)于sql注入的解釋文章材泄,還有很多技術(shù),走馬觀花吧 文章來源:http...
    hao0_0閱讀 1,586評(píng)論 0 0
  • 一吨岭、WAF介紹 傳統(tǒng)防火墻只是在第三層(網(wǎng)絡(luò)層)有效的阻斷一些數(shù)據(jù)包拉宗;而隨著web應(yīng)用的功能越來越豐富的時(shí)候,We...
    卿酌南燭_b805閱讀 1,024評(píng)論 0 0