Advanced String Functions Filter Bypass With Gadgets Sql Injection

$filter = ['conv', 'code', 'hex', 'ha', 'b', 'x', '_', '`', '\'', '"', '@','into','outfile','load','file', 'date', 'co','ca', 'b', 'g', 'h', 'j', 'k', 'q', 'v', 'x', 'z', 'date', 'make'];

If filters are like that, how can I inject successfully? I will show you some gadgets can bypass the hard filter.

string function filter bypass with gadgets

such as

ascii, bin, char, concat, hex, oct, ord, conv, etc…

you can easily make the string with the following crypto functions.

aes_encrypt, …

[link]mysql crypt functions

But usually most of detectors also filtered underbar since prevent to access *_schema. There are two ways to generate arbitrary characters.

  1. Use dayname function.
  2. Use encrypt function with salt.

The first one is well-known bypass technic. Bypass with date and time functions. The result of now() (timestamp) is integer, so we can subtract and add other integer to make everyday name.

select DAYNAME(now());
-> Thursday

But this way only can make “a, e, d, f, i, h, m, o, n, s, r, u, t, w, y” 15 alphabets. Let’s check out the solution 2.

Or hash functions like md5, sha1, … are only contains hexadecimal characters.. We need more alphabets !!!!

There aren’t any references or cheat sheets of encrypt function.
When you run encrypt function the output is different each time. Since Mysql’s encrypt function is based system’s crypt function. So encrypt auto generates salt. This is why you saw the different output each time.

If you pass the salt parameter, you will get a fixed output result.

ENCRYPT(str[,salt])

Encrypts str using the Unix crypt() system call and returns a binary string. The salt argument must be a string with at least two characters or the result will be NULL. If no salt argument is given, a random value is used.

Note: The ENCRYPT() function is deprecated as of MySQL 5.7.6, will be removed in a future MySQL release, and should no longer be used. Consider using AES_ENCRYPT() instead.

# with no salt
select encrypt(12);
-> 10CkN4GiVzSd2
select encrypt(12);
-> F0HgfxV9ENjfY
select encrypt(12);
-> J0mzyT/ZwRHlc

# with salt
select encrypt(12, 99); # (any types, twocharacter or 2 digit number
-> 99LNryKuWYuKc

Here is very good wargame challenge. Pwn it !!!

Link CodeShellWEB

Here are some interesting bypass cheat sheets.

Link SQLI Cheat Sheets 1(English)

Link SQLI Cheat Sheets 2(Korean)

If u have any questions please contact email or reply the comments.

티머니 Third-Party 어플리케이션 취약점

2016-12-04 13:39에 쓰기 시작했는데 이제서야 완성한다.

Intro

작년 겨울에 학교에서 K-sheild 멘토링을 했었다. 처음 받아보는 멘토링이라 설렜다. 같은 학년에서 보안 공부를 하는 친구들이 딱히 많지 않아, 맘 맞는 친구들과 신청하였다. 신청했던 주제는 IOT 사물인터넷 보안이었는데 타겟을 찾다찾다 한 친구놈이 교통카드 해킹하자 한게 실제로 하게 되었다. 우리가 생각했던것은 offensive-security에 대한 멘토링이었는데 멘토분들은 방화벽 만들고 유지보수 하는 기업다니시는 분들이라 조금 아쉽기도 했다. 보안의 다른면에 대한 이야기도 들을 수 있어서 좋았던것 같다.

어떻게 해킹을 할까 생각하다, 검색엔진에 검색해보니 뉴스 링크가 나왔다. 우리도 똑같이 어플리케이션을 타겟으로 잡았다. 분명 다른 로직버그들이 존재할게 분명했기 떄문이다. 그렇게 티머니앱을 분석하려하는데 난독화가 심하게 걸려있었다. 결국 찾은게 티머니 API를 사용한 Third-Party 어플리케이션이었다.

kisa 제보 취약점은 4개월 지나면 공개해도 되길래 다른 누군가가 새로운 취약점을 찾길 바라면서 공개해본다.

Target

특정앱을 거론할 수 는 없지만 캐시비, 티머니등 교통카드를 충전해주는 어플리케이션이었다. 지금은 라이브러리파일들이 seworks의 앱솔리드로 난독화 되어있다. 아마 패치하면서 같이 적용한것 같았다. 예전에 썻던 보고서와 자료들이 남아있길래 그걸 토대로 작성하겠다.

뭐이렇게 생기긴 했다. logo

Summary

한장으로 요약하면 다음과 같다.

summary

지금 와서 생각한건데 보고서 참 못썻다.. 저땐 저게 최선이라고 생각했었는데 ㅋㅋ 앞으론 잘써야겠다는 생각이 들었다.

Vuln

취약점은 되게 간단한데, 그걸 찾고 실제로 exploit하는것 까지 좀 힘들었다. 그걸 이야기기해보고자 한다.

예전에는 교통카드 충전을 특정한 기기에서밖에 할 수 없었다. 하지만 기기의 역활을 하던것이 스마트폰으로 넘어오게 된것이다. 이로써 이것을 리버스 엔지니어링 하게될경우 성공적으로 해킹할 수 있다는 생각이 들었다.

– deleted –

로직이 저기 위에 사진과 같았는데 validation을 클라이언트쪽에서 진행했기때문에 발생하는 취약점이었다.

응답을 보내는것 자체가 너무 한정적이기 때문에 스마트폰을 에뮬레이션할 수 있게 될경우 다른 취약점이 발생할 수 있을거 같다.

그때 스크린샷은 다 사라졌지만 보고서만이 남아있기에 보고서를 첨부한다.

 


 


업데이트

2018-06-03 보안상의 이유로 보고서는 삭제되었습니다.