본문 바로가기

시스템 해킹100

uaf #include #include #include #include #include using namespace std; class Human{private:virtual void give_shell(){system("/bin/sh");}protected:int age;string name;public:virtual void introduce(){cout 401550->40117a(HUMAN의 give_shell)인데, +8해서 401558->401376(WOMAN의 introduce)이 실행된다. 이 또한, 3을 입력하면, c25ca0이 401590->40117a으로 바뀐 후, c25ca0이 모두 지워버린다. 1->3 delete하지 않고, 2를 할 경우1->2 c25ca0보다 훨씬 뒤에 입력이 된다.b4.. 2016. 12. 24.
ssp 매우 재미있는 문제를 풀었다바로 이대진 선배님의 과제였던 ssp문제이다이것은 eip를 41414141로 조작하는 문제이다 메인이 없는 것 같아 보일때는 아이다에서 start에서 마지막에 0x804865c로 가는 것을 볼 수 있는데, 이곳이 메인임을 알 수 있다. 일단, 0x804865c에서 read를 하여 입력을 받는다, 이때, i=strchr(&v3,58)을 하게 되는데, 이는 v3의 주소에 적힌 값에서 :가 있는 곳의 주소를 i에 넣는다.for문에서 중간에 i만 있는데, 이는 i가 참일때까지, 즉 null이 아닐때까지 i는 i+2가 되어 반복을 한다. 0x80485bd를 보면 a2-a1+1을 하게 될때, a2는 :가 있는 곳의 주소고, a1은 v3의 주소 이므로, a2-a1+1은 처음부터 :까지의 길.. 2016. 12. 14.
ROP2 이를 이용해 system("sh")로 쉘 얻기!! 일단, memory leak을 해야 한다. __libc_start_main : 0xb7e1c500__libc_system : 0xb7e3e850 offset: 0xb7e3e850-0xb7e1c500=0x22350 0x80482c0은 __libc_start_main의 plt 0x804a00c는 __libc_start_main의 got0xb7e1c500은 실함수 0x80482c0와 0x804a00c는 바뀌지 않지만, 0xb7e1c500은 바뀐다.0x804a00c에 있는 어떤 값 x에 offset을 더하면 __libc_system주소가 됩니다!! system함수의 인자 sh를 만들어야 한다.bss 부분에 넣자 0x804a018은 IDA에서 보면 알 수 있듯이 .. 2016. 11. 17.
ROP1 writable인 곳에 넣어야 한다.IDA에서 확인 0x080491b0 0xbfffe500에 값 들어가기 시작 0x080480db : popal ; ret 0x080480d8 : rep stosb byte ptr es:[edi], al ; ret rep있으면 ecx가 0이 될때까지 반복al의 값을 edi에 있는 주소의 값으로 넣는다. AL은 EAX의 마지막 8bit(1byte) 처음 도전: r < 2016. 11. 11.
brainfuck get으로 fgets->system으로 바꿀 것이다. do_brainfuck 함수 아스키코드 60: 아스키코드 43: + 아스키코드 45: -아스키코드 46: .아스키코드 44: ,아스키코드 91: [을 의미한다. payload=''tape을 가리키는 p를 fgets를 가리키게 올려주어야 한다. payload+=''*4bf_libc.so에서 system함수의 주소: 3A920 fgets함수의 주소: 5D540 gets함수의 주소: 5E770 from_system_to_fgets=0x5D540-0x3A920from_gets_to_fgets=0x5D540-0x5E770 fgets_addr=u32(s.recvn(4)[:4])system_addr=fgets_addr-from_system_to_fgetsgets_.. 2016. 11. 6.
xavius__미해결__Remote BOF local bof만 하다가 remote bof가 무엇인지 모르는 분들?-나 local bof의 경우에는 해당 서버의 계정이 있을 때 서버에 접속하여root 권한 아니면 자신보다 더 높은 권한을 얻을 수 있게 된다.그런데 해당 서버에 계정이 없을 때는지금 말하는 remote attack을 하면 된다.remote bof는 서버에서 제공하는 취약한 서비스 프로그램을exploit하여 해당 서비스를 실행하는 데몬의 실행권한(쉘)을 가져올 수 있게 된다. 그럼 xinetd로 작동하는 프로그램에 대해서 remote bof를 해보도록 하겠다. 데몬의 두가지 실행 모드1. xinetd 수퍼데몬에 의해 제어되는 서비스 데몬2. 독립적으로 실행되는 Standalone 환경의 서비스 데몬 xinetd 수퍼 데몬의 서비스 데몬.. 2016. 11. 1.
nightmare 버퍼 앞에도 지우는 것은LD_PRELOAD의 사용을 막기 위해서이다.스택도 못쓰고, 바이너리(?)도 못쓴다.fgets를 이용하자fgets는 버퍼를 이용한다.그 버퍼를 찾기 위해 stdin을 까봤다. fgets 실행전 fgets 실행후 0x40015000에 입력값이 버퍼로 쌓인다는 것을 알 수 있다. 2016. 10. 31.
giant argv[1][47]=\xbf이면 안된다!! argv[1][47]=\x40이어도안된다!! libc함수를 이용하지 못한다. buffer+sfp hunter가 있어서 buffer+ebp까지 쭉 지워진다. RET부분에 ret있는 곳의 주소를 넣는다. 그렇다면 그 주소로 eip가 이동그 다음 4 byte AAAA넣으면, AAAA로 eip 이동이 AAAA를 쉘코드 있는 부분으로 넣어주면 되겠다쉘코드가 들어가는 주소를 찾자 2016. 10. 31.
succubus 40칸 버퍼 + 4칸 SFP + RET: strcpy주소 +AAAA+(버퍼+48byte의 주소)+(argv[2]의 주소) argv[2]: system함수 주소+BBBB+/bin/sh의 주소 main함수의 ret부분에서 strncpy가 실행되는데,그 인자는 버퍼+48byte의 주소와 argv[2]의 주소이다버퍼+48byte에 argv[2]가 들어가고 AAAA가 그 부분이다.AAAA는 strcpy의 ret부분이므로,이때 system함수가 실행되는 것이다. AAAA의 주소: 0xbffffb00argv[2]의 주소: 0xbffffc8e 2016. 10. 31.