CVE-2025-60691
1. Ghidra
apply_cgi function
apply_cgi functionundefined4
apply_cgi(FILE *param_1,undefined4 param_2,undefined4 param_3,undefined4 param_4,undefined4 param_5,
char *param_6,char *param_7)
{
char *pcVar1;
int iVar2;
char *__s1;
char *pcVar3;
FILE *__stream;
undefined4 uVar4;
undefined **ppuVar5;
undefined1 *puVar6;
uint __seconds;
char local_838;
undefined1 auStack_837 [2047];
char *local_38;
int local_34;
int local_30;
pcVar1 = (char *)get_cgi(0x49f270);
if (pcVar1 == (char *)0x0) {
pcVar1 = "0";
}
local_30 = atoi(pcVar1);
pcVar1 = (char *)get_cgi(0x49f188);
if (pcVar1 == (char *)0x0) {
pcVar1 = "1";
}
local_34 = atoi(pcVar1);
local_38 = (char *)get_cgi(0x49f27c);
error_value = 0;
pcVar1 = (char *)get_cgi(0x49f288);
if (pcVar1 == (char *)0x0) {
pcVar1 = "";
}
iVar2 = strcmp(pcVar1,"gozila_cgi");
if (iVar2 == 0) {
gozila_cgi(param_1);
return 1;
}
__s1 = (char *)get_cgi(0x49edc0);
if (__s1 == (char *)0x0) {
__s1 = "";
if (param_7 != (char *)0x0) goto LAB_00421bc0;
LAB_00421d74:
puVar6 = (undefined1 *)0x0;
__seconds = 0;
}
else {
if (param_7 == (char *)0x0) goto LAB_00421d74;
LAB_00421bc0:
if (param_6 != (char *)0x0) {
iVar2 = strcmp(param_6,"tmBlock.cgi");
if (iVar2 == 0) {
local_838 = '\0';
memset(auStack_837,0,0x7ff);
iVar2 = get_cgi(0x4a2600);
sprintf(&local_838,"http://%s",iVar2);
nvram_set("TM_block_url",&local_838);
iVar2 = get_cgi(0x4a35cc);
nvram_set("TM_block_index",iVar2);
iVar2 = get_cgi(0x4a1474);
nvram_set("TM_block_hwaddr",iVar2);
pcVar1 = (char *)get_cgi(0x49f2ec);
if ((pcVar1 == (char *)0x0) || (iVar2 = strcmp(pcVar1,"1"), iVar2 != 0)) {
do_ej("tmWTPBlock.asp",param_1);
}
else {
do_ej("tmPCBlock.asp",param_1);
}
wfflush(param_1);
return 1;
}
iVar2 = strcmp(param_6,"hndBlock.cgi");
if (iVar2 == 0) {
local_838 = '\0';
memset(auStack_837,0,0x7ff);
iVar2 = get_cgi(0x4a2600);
sprintf(&local_838,"http://%s",iVar2);
nvram_set("hnd_block_url",&local_838);
iVar2 = get_cgi(0x49bfd0);
nvram_set("hnd_block_policy",iVar2);
iVar2 = get_cgi(0x4a1474);
nvram_set("hnd_block_mac",iVar2);
iVar2 = get_cgi(0x49f6a0);
nvram_set("hnd_block_ip",iVar2);
pcVar1 = (char *)get_cgi(0x49f2ec);
if ((pcVar1 == (char *)0x0) || (iVar2 = strcmp(pcVar1,"0"), iVar2 != 0)) {
do_ej("BlockSite.asp",param_1);
}
else {
do_ej("BlockTime.asp",param_1);
}
nvram_set("hnd_password_deny",&DAT_0049ea84);
wfflush(param_1);
return 1;
}
}
...2. Analysis of the source code
2.1 Analysis of the apply_cgi function
apply_cgi function 2.2 Analysis of the index.asp file
index.asp file2.3 Likely HTTP POST request format
3. Network analysis + reverse engineering
3.1 Network analysis

3.2 Analysis with GDB+gdbserver



3.1 Testing payload
4. Analysis in Ghidra
4.1 Search for value "apply_cgi"

4.2 Search for value "apply.cgi"


5. Google dork
Last updated