reversing.kr Easy Crack write-up

이 문제는 IDA에서 쉽게 열 수 있도록 만들어진 바이너리라서 분석하는데 크게 어려운 점이 있지는 않았다. 해당 파일을 D.I.E 로 열어보면 다음과 같은 화면을 만날 수 있다. 그래서 IDA 32로 바로 PE 파일을 열어보았다. WinMain 함수에서 호출되는 함수를 쭉 따라다니다보면 메인 기능이 있는 함수를 찾아볼 수 있다. 문자열을 검사할 때 string[1], &string[2] 이런 식으로 검사하는 루틴을 갖고 있기 때문에 IDA Hex-ray에서는 위와 같이 나왔다. 그래서 단축키 y 를 눌러 string의 크기를 바꾸었다. 보기가 훨씬 간결해졌다. flag 는 Ea5yR3versing 이다.

MySQL에서의 Error Based Injection에 대한 간단한 고찰

MySQL에서 가용한 Error Based Attack은 크게 두 분류로 나눌 수 있다. 첫번째는 GROUP BY, POLYGON, EXP, XPATH와 같은 기능을 사용하여 에러메시지에서 쿼리가 실행된 결과값을 extract하는 direct한 방식이고, 두번째는 MySQL의 조건에 따라 무조건 에러가 발생하게 하는 indirect한 방식이다. Direct 방식은 쿼리 한 번으로 특정한 값을 바로 extract할 수 있다는 점이 강력하나, MySQL Server의 버전과 웹 서비스에서의 SQL 에러 출력 유무에 따라 실행 가능 여부가 달라지기 때문에 범용성이 떨어진다는 단점이 있다. 이와 달리 Indirect 방식은 바로 값을 extract 할 수는 없지만 범용성이 뛰어나다는 장점이 있다. 이 글에서는 ..

ch4n3-world의 중복 인증 이슈에 관하여

내가 운영하는 워게임에 가끔 중복 인증에 관한 문의가 꾸준히 들어왔었는데 어이없게도 오늘에서야 그 이유를 알게 되어 블로그에 글을 포스팅하게 되었다. router.post('/auth', async (req, res) => { let getChallengeByFlag = async (flag) => { let sqlData = await ChallengeAPI.getChallengeByFlag(flag); if (sqlData) return sqlData.dataValues; return null; }; let isSolvedChallenge = async (user_no, challenge_no) => { let sqlData = await SolversAPI.isSolvedChallenge(chall..

CTF 웹해킹 문제 풀 때 루틴

1. robots.txt, .git, .index.php.bak, ~index.php 등의 파일이 있는지 확인한다. 2. HTTP Header에 플래그가 있는지 확인한다. 3. MySQL 기반의 서비스라면 대소문자 구분이 명확하지 않음을 명심하고 다시 공격해본다.

Bypassing with special chars in XSS exploit

Bypassing with specialchars in XSS Exploit 가끔 XSS 공격을 하다보면 다양한 WAF, 혹은 어플리케이션 자체의 필터링에 걸리는 경우가 발생한다. 이 경우엔 Javascript의 자유도(?) 덕분에 쉽게 우회할 수 있는 여지가 있다. 이러한 Javascript의 자유도는 서로 다른 객체 타입끼리의 연산을 수행하는 과정에서 발생하게 된다. 다음과 같은 예시 상황을 보자. [1,2,3,4]+"hello world" // "1,2,3,4hello world" 위의 경우엔 number로 이루어진 배열(Object)과 문자열간의 concat 연산을 하는 경우이다. 보다시피 object가 string으로 변환되어 있는 결과를 얻을 수 있다. 이러한 관점으로 조금 더 다채로운 객체와..

XSS awesome confirm variants

CTF에서 XSS exploiting 문제가 나오면 유용하게 사용할 수 있는 페이로드들. confirm() confirm`` (((confirm)))`` co\u006efirm() new class extends confirm``{} [8].find(confirm) [8].map(confirm) [8].some(confirm) [8].every(confirm) [8].filter(confirm) [8].findIndex(confirm) 아래의 Array 기반으로 함수를 실행하는 방식은 Javascript의 callback 함수를 이용하여 confirm() 함수를 실행시킨 것이다.

Airbnb – When Bypassing JSON Encoding, XSS Filter, WAF, CSP, and Auditor turns into Eight Vulnerabilities

https://buer.haus/2017/03/08/airbnb-when-bypassing-json-encoding-xss-filter-waf-csp-and-auditor-turns-into-eight-vulnerabilities/ 불러오는 중입니다... 세미콜론을 이용해서 Custom Filter를 우회, json에서 NULL byte로 WAF 우회 너무 아름답다..

서울여대정보보호 영재교육원 3년간의 수료를 마치며.

레드벨벳 슬기 2016년 중등심화A반을 시작으로 2017년 고등전문심화A, 2018년 고등전문심화B까지 3년동안 서울여대 정보보호영재교육원에서 공부하였고 2018년 12월 8일에 수료식을 가졌다. 2016년에 중등심화A 과정에서는 과정우수상을 수상했었다. 그리고 이 때 만났던 친구들과 아직도 친하게 지낸다. 더불어 승연이랑 기환이와는 디미고도 함께 입학했고, 이 때는 중등과정이라 많은 것을 배우진 않았지만 다채로운 활동을 하면서 많은 경험을 쌓을 수 있었던 것 같다. 2017년에는 본격적으로 과정우수상을 노리고 교육에 임하게 되었다. 결과적으로 말하자면 교육 과정 상의 상은 하나도 타지 못하게 되었다. 외부적인 요인이 크게 작용하여 이 때는 서울여대 정보보호영재교육원에 크게 신경 쓸 수 없었기 때문이다...

go lang calling convention

고언어는 누가 만든건지 어셈블리라인에서는 너무 괴랄한것 같음. 징그럽다. CTF에서 Go나 C++로 만든 바이너리를 거르는 이유가 진짜 있음..ㅋㅋ https://www.sokoide.com/wp/2014/09/28/golang-calling-convention/ https://particle.cafe/blog/golang-calling-convention.html

잊기전에 적어두는 bash trick

최근 CTF 들에 bash trick 이 너무 많이 올라오는 것 같아서 이참에 한 번 정리해놓고 가야겠다. - sh, bash, dash 등이 필터링 되어있는 경우 : $1 을 붙이는 것으로 우회 가능 (s$1h) * $1 에는 아무런 내용이 없기 때문에 bash에서는 sh 만 인식하게 된다. * 동일한 원리로 다음과 같은 상황도 가능하다. - vi가 필터링 되어있지 않은 경우 : * vi안에는 :! [command]로 쉘을 실행시킬 수 있는 기능이 있기 때문에 이것으로 쉘을 획득할 수 있다. (Layer7 Talmoru Party 문제에서 처음 알게 되었다.) - flag 등 파일 이름이 필터링 되어있는 경우 : * bash에서 기본으로 제공하는 regex 를 이용하면 된다. 다음과 같은 형식으로 우회..