Ashing's Blog

想学的太多 懂得的太少

0%

第七届山东省网络安全技能大赛-决赛Write-Up

0x01 前言

第一次真正意义打线下赛,学到不少东西。差点三等奖,继续努力吧。

0x01 Reverse

0x02 Pwn

0x03 Web

web1

打开页面:

猜测抓包伪造地址。同时把admin=0改为admin=1。只说IP不在范围这个和127.0.0.1貌似没什么关系…有点坑,卡了一小会儿。

Web2

简答的审计源码

危险函数:parse_str()存在变量覆盖漏洞。把aabg7XSs,MD5加密后发现是0e开头。

思路即构造?id=key[99]=QNKCDZO

发现upl04d50m3thing.php,应该是个上传的页面。

随便上传测试

下载后发现文件内容是

猜测是条件竞争,后台处理:file_put_content,然后sleep(1),echo ‘TooSlow’

利用burp的intruder开多线程,利用延迟来竞争。一个上传,一个访问即可。

看V0W的博客先上传一句话再利用py脚本重复访问竞争。贴V0W代码:

1
2
3
4
5
6
7
8
import requests

url = 'http://192.168.100.243:2002/uploads/e6ce11ded480d904ea8c3b30b00a23ab9bb59119/v.php'//连接根据自身情况

postdata = {'v': "system('ls');"} //‘v’根据自身传马情况
while True:
r = requests.post(url,data=postdata)
print r.text

Web3

SSTI第二次接触。过几天总结一下。

0x04 Crypoto

rsa

思路一:分解大素数N(在线或yafu),用已知的p,q,e通过模逆运算(可以直接调用pyhton里gmpy2模块的invert函数)求解e的逆元d。然后通过c的d次方对n取模的明文m。

在线直接失败(当然了比赛不能在线)

yafu也失败了。

思路二:上脚本秒解(当然得稍微改改他给的txt文档把N换成n,把enc换成c)

看了看这个脚本求N的模块,挺复杂的。应该是某几种算法结合。原理我真不知道…..总之感觉有时候工具都不如py脚本好用。得好好补补python…

affine

仿射变换解密。也用到了求解逆元算法..信安数基好好学挺重要…

思路一:在线

手算-8mod26的逆元为18!(当然比赛也不能在线)

思路二:上脚本爆破解密

但是并不是所有的仿射加密都可以逆向解密,只有符合C = Ek(m) =(k1m + k2) mod n中gcd(k1, n) = 1时可以逆向解密。

看了表哥们的wp才发现flag可以是加密。当然我也不是很清楚这个仿射加密和解密怎么都是一样呢?我测试了一下换个字符串

确实是一样的。回头又仔细看了看脚本,应该是属于解密。原理是直接通过仿射函数把对应密码表换了,不用爆破就可以解密。强大!

通过爆破知道-8的逆元是18也可以直接进行在线解密了。

0x05 MISC

CrackIt

kali自带破解工具:john

ada

binwalk查看带有一个zip,foremost分离得到加密的zip/

然后用图片的详细信息里面的16进制转为ascii即是密码。千万记住加0x!!!比赛卡了很长时间,我说的为什么不对!!!

神秘的文件

一看样子就是明文攻击。唉…..说多了都是泪。没网,以前的工具也找不到了….干瞪眼吧!回学校一看,就算找到工具也不行!因为压缩那一步必须是WinRar软件(压缩算法和CRC一样即可),而我用的是Bandzip…

用ARPR进行明文攻击。保存解出的zip。

然后把docx后缀改成zip找到falg.txt

base64解密即可得flag。

basic

做过类似的题目,还存这脚本。135000不能开放也不是素数。就是不知道x,y…

进制转换

比赛手撕…回来看看别人怎么写的python脚本,以后多练python…..

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
import binascii

text = "d87 x65 x6c x63 o157 d109 o145 b100000 d116 b1101111 o40 x6b b1100101 b1101100 o141 d105 x62 d101 b1101001 d46 o40 d71 x69 d118 x65 x20 b1111001 o157 b1110101 d32 o141 d32 d102 o154 x61 x67 b100000 o141 d115 b100000 b1100001 d32 x67 o151 x66 d116 b101110 b100000 d32 d102 d108 d97 o147 d123 x31 b1100101 b110100 d98 d102 b111000 d49 b1100001 d54 b110011 x39 o64 o144 o145 d53 x61 b1100010 b1100011 o60 d48 o65 b1100001 x63 b110110 d101 o63 b111001 d97 d51 o70 d55 b1100010 d125 x20 b101110 x20 b1001000 d97 d118 o145 x20 d97 o40 d103 d111 d111 x64 d32 o164 b1101001 x6d o145 x7e"
solution = ''
text2 = text.split(' ')
for x in text2:
print x
if x[0] == 'b': #binary
solution += chr(int(x[1:],2))
elif x[0] == 'x': # hexadecimal
solution += x[1:].decode("hex")
elif x[0] == 'd': # decimal
solution += chr(int(x[1:]))
elif x[0] == 'o': # octal
solution += chr(int(x[1:],8))
print solution

colors

用StegSolve打开每一张图片查看最低位通道发现hint:

修改图片高度得到:

联想二进制,黑->1,白->0。刚好七张图片,我们联想ascii码的可打印字符是7位二进制。所以必须竖读。写(贴)个python脚本得flag:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
coding:utf-8
def encode(s):
return ' '.join([bin(ord(c)).replace('0b', '') for c in s])
def decode(s):
return ''.join([chr(i) for i in [int(b, 2) for b in s.split(' ')]])
l = [''] * 7

f = open('code.txt', 'r') # 01矩阵
for i in range(7):
j = 0
line = f.readline().replace('\n','')
l[i] = line
# print l

## 矩阵初始化
ll=[''] * 20
for i in range(len(ll)):
ll[i]=[''] * 7
## 矩阵翻转
for i in range(20):  
for j in range(7):
ll[i][j] = l[j][i]
# print ll

flag = ''
for i in ll:
t = ''.join(i)
flag += decode(t)

print flag

0x06 Forenisc

日志分析

打开发现一堆sql注入的信息

我们先url decode,这里我用的burpsuite挺方便的。这样手撕起来就比较好看了。

发现是sql盲注二分查找,根据返回404还是200直接判断就好了。25个字符还好,手撕比脚本快一点吧。

附(贴)python判断脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
# coding:utf-8
import re
import urllib

f = open('access.log','r')
lines = f.readlines()
datas = []for line in lines:
t = urllib.unquote(line)
if '1765' in t and 'flag' in t: # 过滤出与flag相关,正确的猜解
datas.append(t)

flag_ascii = {}
for data in datas:
matchObj = re.search( r'LIMIT 0,1),(.*?),1))>(.*?) AND', data)
if matchObj:
key = int(matchObj.group(1))
value = int(matchObj.group(2))+1
flag_ascii[key] = value     # 使用字典,保存最后一次猜解正确的ascii码

flag = ''
for value in flag_ascii.values():
flag += chr(value)

print flag

特殊后门

提示特殊协议,过滤搜索flag找到了ICMP协议。

之后把后面的一个个手撕拼接OK。

weblogic

搜索hostname定位过滤,追踪HTTP流再搜索hostname。hint:16进制