Blind SQL Injection Techniques.pdf




Time-based SQL Injection.pdf

피드백 환영합니다

'Study > Web' 카테고리의 다른 글

Hello SQL Injection  (2) 2016.12.18

Hello SQL Injection

Written by Safflower (st4rburst@naver.com)



Hello SQL Injection.pdf


'Study > Web' 카테고리의 다른 글

Time-based SQL Injection  (0) 2017.01.31

Project 카테고리가 추가되었습니다.

Project 카테고리는 팀원분들께서 진행하셨었던, 진행 중인 프로젝트에 대한 내용을 자유롭게 작성하실 수 있습니다.

그외, 소개하고 싶은 프로젝트나 평가받고 싶은 프로젝트, 아이디어에 대한 내용을 작성하실 수 있습니다.


Project - TO-DO 카테고리에는 진행할 계획이 있는 프로젝트나, 아이디어를 업로드할 수 있는 공간입니다.

Project - Release 카테고리에는 간단한 프로그램, 미완성 프로젝트, 완성 프로젝트 등 본인이 개발했던 프로그램과 프로젝트를 공유하고 싶을 때 이용하시면 됩니다.


Release 하실 때 오픈소스에 대한 사항은 창작자 본인께서 판단해주시기 바랍니다.


+ 외부와의 공개가 꺼려지실 경우 비공개로 작성해주시면 됩니다.

기존 스마트포인터들은 new[] 형식의 할당된 포인터는 제대로된 처리를 하지않습니다.

(boost 라이브러리나 기타 라이브러리에 이미 보완된 코드가 존재할 것 같은데, 저는 한번도 못봤네요.)


때문에 기존 스마트포인터를 new[] 형태로 사용할 경우엔 일반적으로 vector 컨테이너와 함께 사용합니다.


스마트포인터 소멸자의 처리에서 new[] 형식의 할당된 포인터는 delete[] 를 호출해야 하지만, 기존 스마트포인터는 delete 만 호출할 겁니다.

이런 정상적으로 해제되지 않은 메모리는 _CrtDumpMemoryLeaks() 로 메모리 누수 체크를 하면 정상적으로 탐지하지 못하게 됩니다.


그리하여 vector 까지 써가며 코드를 작성하는게 귀찮았기 때문에 간단하게 만들어본 클래스입니다.


namespace am
{
	class noncopyable
	{
	protected:
		noncopyable() {}
		~noncopyable() {}

	private:
		noncopyable(const noncopyable&);
		noncopyable& operator=(const noncopyable&);


	}; // class noncopyable

	template<class R>
	class safe_ptr : private noncopyable
	{
	private:
		R* ptr_;
		size_t cnt_;

	public:
		explicit safe_ptr(R* ptr = 0) throw()
		{
			if (ptr)
			{
				ptr_ = ptr;
				cnt_ = _msize(ptr) / sizeof(R);
			}
		}

		explicit safe_ptr(void* ptr) throw()
		{
			ptr_ = (R*)ptr;
			cnt_ = 0;
		}

		~safe_ptr()
		{
			if (ptr_ && cnt_)
					cnt_ == 1 ? delete ptr_ : delete[] ptr_;
			
			ptr_ = nullptr;
		}

		R& operator*() const throw()
		{
			return *ptr_;
		}

		R* operator->() const throw()
		{
			return ptr_;
		}

		R& operator[](size_t n) const throw()
		{
			return ptr_[n];
		}

		R* get() const throw()
		{
			return ptr_;
		}

		size_t get_size() const throw()
		{
			return cnt_;
		}

		bool empty() const throw()
		{
			return nullptr == ptr_;
		}


	}; // template<class R> class safe_ptr
} // namespace am


가끔 가다보면 실제 아두이노에서 hex 파일을 추출해야 하는 경우가 있어요!

그렇다면, avrdude 를 사용해봐요

우선 "아두이노 IDE 설치경로\hardware\tools\avr\bin\" 에보면 avrdude.exe  가 있어요. 해당 폴더에서 명령프롬프트를 열어요.

(Tip : Shift+우클릭 해서 명령창 관련 메뉴를 선택하면 해당폴더에서 명령창이 열려요.)

avrdude.exe -p m328p  -c arduino -C "..\etc\avrdude.conf" -P com6 -U flash:r:"C:\flash.hex":i

이렇게 입력하면 아두이노에서 hex 파일이 추출가능해요.

(-P 다음에 오는건 COM 포트 번호에요. 각자에 맞는 COM 포트 번호로 바꾸세요.)

(단, uno 기준이에요. 메가2560 사용자분들은 -p 다음껄 atmega2560 으로 바꾸고 해보세요!)

p.s 윈도우 환경에서는 아무도 설명안해주길래 적어봄.


#오이콩


Anti-Debug : EntryPoint is Zero

Written by Safflower (st4rburst@naver.com)



EXE 파일의 EntryPoint 주소가 0x00000000 ("MZ")이면 일부 Debugger에서 파일 로드가 안된다.

이러한 파일을 분석하기 위해선 다른 Debugger를 사용하거나, Hex Editer 등의 프로그램을 이용해 Opcode 상태의 분석이 필요할 것이다.

그러므로 효과가 크지는 않지만 이를 이용한 간단한 Anti-Debug를 생각해볼 수 있다.


1. PE Format 중 AddressOfEntryPoint 구조체를 0x00000000 으로 변경한다.

2. 0x00000002 주소에 OriginalEntryPoint 로 분기하는 명령어를 넣는다. (0x00000000에는 "MZ" 가 들어가있으므로 수정 불가)


p.s 리버싱 처음 배울 무렵에 EXE Obfuscation 프로그램 만들다 우연히 알게됨.

+ Recent posts