Web-新手练习区
0.some words
这个write up是做完之后才补的,所以好多题都没有截图,如果想要看图的话,可以直接去官方的wp(题目右上角) = =
1.view_source
f12 就能看到flag
2.robots.txt
访问/robots.txt,可以看到not-allowed里有flag文件名,直接访问,拿到flag
3.backup
这道题考了常用备份文件名,一般是.bak,直接访问,下载备份文件,查看源码,就能拿到flag
4.cookie
f12在network里找到请求数据包,flag在里边的cookie字段
5.disabled_button
这道题想说明的是,前端限制不可信,就是说前端的限制都是可以绕过的
f12,把按钮button里的disabled属性删掉,然后点一下按钮,flag会显示出来
6.weak_auth
这道题想考弱口令的爆破,一般来说,账号都是admin,实际情况可以测试一下,下面是题解
尝试用不同的账号登录,发现用admin会提示密码错误,判断账号为admin(网页源码也有提示是admin),然后用burp抓包,丢到intruder,用常用弱口令字典爆破。(其实我是随手试了个123456就成功了哈哈哈哈哈哈)
当时没有截图,可以参考官方wp
7.simple_php
题目:
这道题是想考php的弱类型比较绕过,在php中
- '1aaa'==1是成立的,因为比较时会把1aaa强制转换成数字,会丢弃掉aaa
- 所以a=0&b=2222asd就可以拿到flag了
8.get_post
这道题考了get和post的传值方式
-
get的传入值在url中,即?payload=xxxxx¶m=ssssss
-
post得传入值在数据包得body中,需要借助工具(例如burp或者firefox的hackbar)来实现。
9.xff_referer
这道题考了xff和referer伪造,用burp抓包,在header部分添加要求的字段
10.webshell
这道题考了webshell的使用方法,页面显示了一句话shell,需要用post方式传入shell,然后会执行shell语句
我以前没有做过webshell相关的题,所以来踩坑了
我先尝试了很多次shell=ls,想要查看目录,结果一直没有回显,google了一下,顿然醒悟,shell中的eval();是php环境,想要访问系统环境需要用system()函数
尝试shell=system('ls'),返回了index的目录,里边有flag,使用cat指令,就直接拿到flag,cat是查看文件内容的指令
shell=system('cat flag.txt')
11.command_execution
这道题考了命令拼接,下边是常用的命令拼接方式:
假设A B 为两条指令
- AB同时执行
A&B
- A执行成功后B执行
A&&B
- A的输出作为B的输入
A|B 管道符|还有个妙处,把A的运行结果作为输入,那么输出就会空出来很多空间(如果长度受限)
- A执行失败后B执行
A||B
然后构造127.0.0.1 | ls,返回当前目录文件,发现没有flag,考虑flag被藏到了某个文件夹下,在header中看到系统环境是ubuntu,所以使用find来查找文件,用法:find [path] -name "[filename]",意思是在[path]下查找
127.0.0.1 | find / -name "flag"
在response中可以看到flag.txt的路径,然后使用cat,cat是查看文件内容的指令
127.0.0.1 | cat [filepath]
就可以拿到flag
12.simple_js
这道题做完睡觉前没做出来,看了下wp也没看懂,今天再来做一下
进去会弹窗让输入密码,随便输点东西然后确定,弹窗关掉之后f12看源码,里面有一段js:
function dechiffre(pass_enc) { //pass_enc 是传入的值
var pass = "70,65,85,88,32,80,65,83,83,87,79,82,68,32,72,65,72,65";
var tab = pass_enc.split(',');
var tab2 = pass.split(',');
// 用脚本跑了一下,pass里就是错误之后的结果,所以把tab2相关的代码删掉
var i, j, k, l = 0,
m, n, o, p = "";
i = 0;
j = tab.length;
k = j + (l) + (n = 0); // k = tab.length
n = tab2.length;
for (i = (o = 0); i < (k = j = n); i++) {
o = tab[i - l];
p += String.fromCharCode((o = tab2[i]));
if (i == 5) break;
}
for (i = (o = 0); i < (k = j = n); i++) {
o = tab[i - l];
if (i > 5 && i < k - 1)
p += String.fromCharCode((o = tab2[i]));
}
p += String.fromCharCode(tab2[17]);
pass = p;
return pass;
}
String["fromCharCode"](dechiffre("\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30"));// flag
h = window.prompt('Enter password');
alert(dechiffre(h));
python转换了一下\x35\x35\x2c\x35\x36\x2c\x35\x34\x2c\x37\x39\x2c\x31\x31\x35\x2c\x36\x39\x2c\x31\x31\x34\x2c\x31\x31\x36\x2c\x31\x30\x37\x2c\x34\x39\x2c\x35\x30
,得到一串字符,猜测是flag,填到Cyberpeace{}里,成功提交