pwnable.kr collision

开始步骤跟fd一样,cat col.c后查看代码,如上。

第一眼看到system(“/bin/cat flag”);然后往回寻找执行命令的条件,hashcode ==check_password(argv[1]);

argv[1]是命令行中的第二个字符(参数argc记录了命令行中命令与参数的个数,而命令行中的参数都被存储在argv[]中,比如文件名为argv[0],那之后输入的字符串就是argv[1]),所以在调用/col文件后,还需要输入20个字符(根据main函数内的其他两个IF条件语句)

第一眼看check_password函数时,我以为它是计算前5个字符的ascll码的总和,之后复习了c的指针后,才明白(int*)将字符数组p转换成了整型,然后存储在指针ip中,因为整型在32位机器中存储占用4个字节,而字符串只占用1个字节,所以ip[0]在读取数据时会读取到原本总共4个字符的数值。因此check_password的函数是将输入的20个字符转化成整数,然后分成5个部分,再相加。

因为输入\x00、\x09、\x20程序无法读取,所以为了最简化,可以将hashcode的\x21DD09EC减去四个\x01\x01\x01\x01,得到\x1d\xd9\x05\xe8,然后用python程序输入时需要反过来(不知道是python输入的原因,还是\x格式的原因),最后直接用命令./col `python -c "print '\x01' * 16 + '\xE8\x05\xD9\x1D'"`得到flag。

参考https://blog.csdn.net/scnu_jiechao/article/details/50403810




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值