본문 바로가기

Security

[systemhacking] Buffer overflow c++

반응형

string은 cin의 입력사이즈에 맞게 메모리 할당 -> 버퍼오버플로우 발생 x

 

#include <algorithm>
#include <vector>
#include <iostream>
void f(const std::vector<int> &src) {
        std::vector<int> dest(5);
        std::copy(src.begin(), src.end(), dest.begin());
}
int main(void){
        int size = 0;;
        std::vector<int> v;
        std::cin >> size;
        v.resize(size);
        v.assign(size, 0x41414141);
        f(v);
}

5 size보다 큰 src size가 입력되면 버퍼 오버플로우 발생.

#include <algorithm>
#include <vector>
#include <iostream>
void f(const std::vector<int> &src) {
        std::vector<int> dest(src);
        std::copy(src.begin(), src.end(), dest.begin());
}
int main(void){
        int size = 0;;
        std::vector<int> v;
        std::cin >> size;
        v.resize(size);
        v.assign(size, 0x41414141);
        f(v);
}

dest에 src로 명시

 

#include <algorithm>
#include <vector>
int main() {
	std::vector<int> v;
	std::fill_n(v.begin(), 10, 0x42);
}
  • 첫번째 인자, 값을 바꿀 배열 요소들의 시작 주소.
  • 두번째 인자, 바꿀 요소의 개수
  • 세번째 인자, 대입할 값
  • 벡터의 사이즈를 지정하지 않았기 때문에 버퍼 오버플로우 발생
#include <iostream>
#include <vector>
void f(const std::vector<int> &c) {
	for(auto i = c.begin(), e = i + 20; i != e; ++i) {
		std::cout << *i << std::endl;
	}
}
int main(void) {
    std::vector<int> v;
    v.push_back(1);
    v.push_back(2);
    v.push_back(3);
    v.push_back(4);
    v.push_back(5);
    f(v);
}

이터레이터가 범위 넘어가면 쓰레기 값 출력

for(auto i = c.begin(), e = i + c.size(); i != e; ++i)

벡터 사이즈로 범위 한정.

반응형

'Security' 카테고리의 다른 글

[systemhacking] logical bugs  (0) 2021.11.23
[systemhacking] Uninitialized value  (0) 2021.11.22
[systemhacking] Integer Issues  (0) 2021.11.22
[systemhacking] Memory corruption  (0) 2021.11.18
[systemhacking] format string bug  (0) 2021.11.17