HGAME-WEEK1
HGAME-WEEK1
web 4/5
2048*16
混淆太厉害了,刚开始一直想修改变量值,但是它是动态的,改不成功,只能改bestScore
最后审计代码,发现关键部分
因为它是混淆过的,所以我刚开始几次路过这个地方都不太理解,感觉再难一点就把game-won
也放到定义的数组里去混淆了
g[h(432)][h(469)] = function(x) {
var n = h
, e = x ? "game-won" : n(443)
, t = x ? s0(n(439), "V+g5LpoEej/fy0nPNivz9SswHIhGaDOmU8CuXb72dB1xYMrZFRAl=QcTq6JkWK4t3") : n(453);
this[n(438)][n(437)].add(e),
this[n(438)][n(435)]("p")[-1257 * -5 + 9 * 1094 + -5377 * 3].textContent = t
}
都提示了game-won,那下面这个就是flag
s0(n(439), "V+g5LpoEej/fy0nPNivz9SswHIhGaDOmU8CuXb72dB1xYMrZFRAl=QcTq6JkWK4t3")
function s0(x, n) {
for (var e = h, t = 36 * 52 + -590 + -1282, r, a, o = -1 * -1971 + -678 + -1293, c = ""; a = x[e(442)](o++); ~a && (r = t % (-1 * 445 + -324 + -1 * -773) ? r * (-64 * 33 + -6548 + 8724) + a : a,
t++ % (-268 * -25 + 166 * -37 + -277 * 2)) ? c += String[e(423)](7397 + 173 * 13 + 1 * -9391 & r >> (-2 * t & 1573 + -2423 * 1 + -856 * -1)) : 3978 + -26 * 153)
a = n[e(481)](a);
return c
}
那n(439)
是什么
g[h(432)][h(469)] = function(x) {
var n = h
.....
}
var h = F;
把全部代码放入控制台后,输入F
会发现是这个函数
function F(x, n) {
var e = $();
return F = function(t, r) {
t = t - (-4073 * 1 + 84 * -39 + 7766);
var a = e[t];
return a
}
,
F(x, n)
}
先把全部代码放入控制台(防止漏掉条件),然后把上述条件(手动输入var n = h
)都放入控制台
Bypass it
禁用js,访问register才能注册用户,然后登陆即可
ezHTTP
常规的HTTP请求头,不说了
jhat
刚开始没思路,给了提示后做出来的
搜索发现jhat能够把内存一些东西放到7000端口的web服务上(附件给了开放端口)
就是一些内存的东西
然后发现一个OQL(类似于SQL的查询语句)
刚开始我以为要看文档,找到能够命令执行的函数什么的,然后就不会了
后来给了提示要RCE,我就查OQL进行rce
发现了这个文章,能够
java.lang.Runtime.getRuntime().exec('calc')
就像OGNL和SPEL这样的写法
我当时做时已经给了不出网的提示,于是我就直接文件读取/flag
new java.util.Scanner(new java.io.File("/flag")).next()
Select Courses *
。。。做不出来,没思路
唯一一个注入点就是POST个id,拿sqlmap跑没用
倒是能够在它渲染之前修改响应信息,使它显示成功选课
但最终那个fetch就是直接访问,也没带什么参数进行判断是否选课成功。。。
官方描述
帮助阿菇选到所有课程,即可获取FLAG。后端逻辑是每间隔 30s-180s 放出⼀⻔课,若 5s 内没有选到
课程,则课程⼜会满员。已经被选上的课程不会再放出。当所有课程都选上之后,点击“选完了”按
钮,后端判定所有课程都已经被选择,就会返回给前端FLAG
。。。。。。我就说咋有时候点开显示的是未满,然后又显示已满,还以为我眼花了呢
那没啥好说了
有意思的是用了selenium库,我看一些刷网课的代码也用这个
from selenium import webdriver
from selenium.webdriver.common.by import By
from selenium.webdriver.support.ui import WebDriverWait
from selenium.webdriver.support import expected_conditions as EC
from time import sleep
driver = webdriver.Chrome()
driver.get("http://127.0.0.1:8000")
sleep(3)
courses_list = []
for i in range(1, 6):
course = {
'panel': f'//*[@id="selector-container"]/section[{i}]/div[1]',
'status': f'//*[@id="selector-container"]/section[{i}]/div[2]/table/tbody/tr/td[5]',
'submit': f'//*[@id="selector-container"]/section[{i}]/div[2]/table/tbody/tr/td[6]/button'
}
courses_list.append(course)
print(courses_list)
while courses_list:
driver.refresh()
sleep(2)
for course in courses_list:
panel = driver.find_element(By.XPATH, course['panel'])
panel.click()
status_element = driver.find_element(By.XPATH, course['status'])
status_text = status_element.text
print(status_text)
if status_text != "已满":
submit_button = driver.find_element(By.XPATH, course['submit'])
submit_button.click()
WebDriverWait(driver, 5).until(EC.alert_is_present())
alert = driver.switch_to.alert
alert.accept()
courses_list.remove(course)
break
sleep(10)
driver.quit()
finally
第一周就有点难,感觉又是个牛B的新生赛,毕竟是杭电啊